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