| |
| /* |
| * Copyright (C) Igor Sysoev |
| * Copyright (C) Nginx, Inc. |
| */ |
| |
| |
| #ifndef _NGX_SHMTX_H_INCLUDED_ |
| #define _NGX_SHMTX_H_INCLUDED_ |
| |
| |
| #include <ngx_config.h> |
| #include <ngx_core.h> |
| |
| |
| typedef struct { |
| ngx_atomic_t lock; |
| #if (NGX_HAVE_POSIX_SEM) |
| ngx_atomic_t wait; |
| #endif |
| } ngx_shmtx_sh_t; |
| |
| |
| typedef struct { |
| #if (NGX_HAVE_ATOMIC_OPS) |
| ngx_atomic_t *lock; |
| #if (NGX_HAVE_POSIX_SEM) |
| ngx_atomic_t *wait; |
| 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, ngx_shmtx_sh_t *addr, |
| u_char *name); |
| void ngx_shmtx_destroy(ngx_shmtx_t *mtx); |
| 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); |
| ngx_uint_t ngx_shmtx_force_unlock(ngx_shmtx_t *mtx, ngx_pid_t pid); |
| |
| |
| #endif /* _NGX_SHMTX_H_INCLUDED_ */ |