|  | 
 | /* | 
 |  * 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_ */ |