diff src/os/unix/ngx_files.c @ 160:73e8476f9142 NGINX_0_3_27

nginx 0.3.27 *) Change: the "variables_hash_max_size" and "variables_hash_bucket_size" directives. *) Feature: the $body_bytes_sent variable can be used not only in the "log_format" directive. *) Feature: the $ssl_protocol and $ssl_cipher variables. *) Feature: the cache line size detection for widespread CPUs at start time. *) Feature: now the "accept_mutex" directive is supported using fcntl(2) on platforms different from i386, amd64, sparc64, and ppc. *) Feature: the "lock_file" directive and the --with-lock-path=PATH autoconfiguration directive. *) Bugfix: if the HTTPS protocol was used in the "proxy_pass" directive then the requests with the body was not transferred.
author Igor Sysoev <http://sysoev.ru>
date Wed, 08 Feb 2006 00:00:00 +0300
parents df17fbafec8f
children 13710a1813ad
line wrap: on
line diff
--- a/src/os/unix/ngx_files.c
+++ b/src/os/unix/ngx_files.c
@@ -235,59 +235,58 @@ ngx_open_dir(ngx_str_t *name, ngx_dir_t 
 }
 
 
-ngx_int_t
-ngx_lock_file(ngx_file_t *file)
+ngx_err_t
+ngx_trylock_fd(ngx_fd_t fd)
 {
-    ngx_err_t     err;
     struct flock  fl;
 
+    fl.l_start = 0;
+    fl.l_len = 0;
+    fl.l_pid = 0;
+    fl.l_type = F_WRLCK;
     fl.l_whence = SEEK_SET;
+
+    if (fcntl(fd, F_SETLK, &fl) == -1) {
+        return ngx_errno;
+    }
+
+    return 0;
+}
+
+
+ngx_err_t
+ngx_lock_fd(ngx_fd_t fd)
+{
+    struct flock  fl;
+
+    fl.l_start = 0;
     fl.l_len = 0;
     fl.l_pid = 0;
     fl.l_type = F_WRLCK;
-    fl.l_start = 0;
-
-    if (fcntl(file->fd, F_SETLK, &fl) == -1) {
-        err = ngx_errno;
+    fl.l_whence = SEEK_SET;
 
-        if (err == NGX_EAGAIN) {
-            return NGX_BUSY;
-        }
-
-        ngx_log_error(NGX_LOG_ALERT, file->log, err,
-                      "fcntl(%s, F_SETLK, F_WRLCK) failed", file->name.data);
-
-        return NGX_ERROR;
+    if (fcntl(fd, F_SETLKW, &fl) == -1) {
+        return ngx_errno;
     }
 
-    return NGX_OK;
+    return 0;
 }
 
 
-ngx_int_t
-ngx_unlock_file(ngx_file_t *file)
+ngx_err_t
+ngx_unlock_fd(ngx_fd_t fd)
 {
-    ngx_err_t     err;
     struct flock  fl;
 
-    fl.l_whence = SEEK_SET;
+    fl.l_start = 0;
     fl.l_len = 0;
     fl.l_pid = 0;
     fl.l_type = F_UNLCK;
-    fl.l_start = 0;
-
-    if (fcntl(file->fd, F_SETLK, &fl) == -1) {
-        err = ngx_errno;
+    fl.l_whence = SEEK_SET;
 
-        if (err == NGX_EAGAIN) {
-            return NGX_BUSY;
-        }
-
-        ngx_log_error(NGX_LOG_ALERT, file->log, err,
-                      "fcntl(%s, F_SETLK, F_UNLCK) failed", file->name.data);
-
-        return NGX_ERROR;
+    if (fcntl(fd, F_SETLK, &fl) == -1) {
+        return  ngx_errno;
     }
 
-    return NGX_OK;
+    return 0;
 }