diff src/core/ngx_shmtx.h @ 624:d4da38525468 NGINX_1_0_2

nginx 1.0.2 *) Feature: now shared zones and caches use POSIX semaphores. *) Bugfix: in the "rotate" parameter of the "image_filter" directive. Thanks to Adam Bocim. *) Bugfix: nginx could not be built on Solaris; the bug had appeared in 1.0.1.
author Igor Sysoev <http://sysoev.ru>
date Tue, 10 May 2011 00:00:00 +0400
parents bb941a2996a6
children 4d05413aebad
line wrap: on
line diff
--- a/src/core/ngx_shmtx.h
+++ b/src/core/ngx_shmtx.h
@@ -15,95 +15,23 @@
 typedef struct {
 #if (NGX_HAVE_ATOMIC_OPS)
     ngx_atomic_t  *lock;
+#if (NGX_HAVE_POSIX_SEM)
+    ngx_uint_t     semaphore;
+    sem_t          sem;
+#endif
 #else
     ngx_fd_t       fd;
     u_char        *name;
 #endif
+    ngx_uint_t     spin;
 } ngx_shmtx_t;
 
 
 ngx_int_t ngx_shmtx_create(ngx_shmtx_t *mtx, void *addr, u_char *name);
-
-
-#if (NGX_HAVE_ATOMIC_OPS)
-
-static ngx_inline ngx_uint_t
-ngx_shmtx_trylock(ngx_shmtx_t *mtx)
-{
-    return (*mtx->lock == 0 && ngx_atomic_cmp_set(mtx->lock, 0, ngx_pid));
-}
-
-#define ngx_shmtx_lock(mtx)   ngx_spinlock((mtx)->lock, ngx_pid, 1024)
-
-#define ngx_shmtx_unlock(mtx) (void) ngx_atomic_cmp_set((mtx)->lock, ngx_pid, 0)
-
-#define ngx_shmtx_destory(mtx)
-
-
-#else
-
-static ngx_inline ngx_uint_t
-ngx_shmtx_trylock(ngx_shmtx_t *mtx)
-{
-    ngx_err_t  err;
-
-    err = ngx_trylock_fd(mtx->fd);
-
-    if (err == 0) {
-        return 1;
-    }
-
-    if (err == NGX_EAGAIN) {
-        return 0;
-    }
-
-#if __osf__ /* Tru64 UNIX */
-
-    if (err == NGX_EACCESS) {
-        return 0;
-    }
-
-#endif
-
-    ngx_log_abort(err, ngx_trylock_fd_n " %s failed", mtx->name);
-
-    return 0;
-}
-
-
-static ngx_inline void
-ngx_shmtx_lock(ngx_shmtx_t *mtx)
-{
-    ngx_err_t  err;
-
-    err = ngx_lock_fd(mtx->fd);
-
-    if (err == 0) {
-        return;
-    }
-
-    ngx_log_abort(err, ngx_lock_fd_n " %s failed", mtx->name);
-}
-
-
-static ngx_inline void
-ngx_shmtx_unlock(ngx_shmtx_t *mtx)
-{
-    ngx_err_t  err;
-
-    err = ngx_unlock_fd(mtx->fd);
-
-    if (err == 0) {
-        return;
-    }
-
-    ngx_log_abort(err, ngx_unlock_fd_n " %s failed", mtx->name);
-}
-
-
 void ngx_shmtx_destory(ngx_shmtx_t *mtx);
-
-#endif
+ngx_uint_t ngx_shmtx_trylock(ngx_shmtx_t *mtx);
+void ngx_shmtx_lock(ngx_shmtx_t *mtx);
+void ngx_shmtx_unlock(ngx_shmtx_t *mtx);
 
 
 #endif /* _NGX_SHMTX_H_INCLUDED_ */