summaryrefslogtreecommitdiffhomepage
path: root/src/core/ngx_shmtx.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/core/ngx_shmtx.h')
-rw-r--r--src/core/ngx_shmtx.h88
1 files changed, 8 insertions, 80 deletions
diff --git a/src/core/ngx_shmtx.h b/src/core/ngx_shmtx.h
index 57fe0b9f5..714f73aa6 100644
--- 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_ */