1 
2 /*
3  * Copyright (C) Igor Sysoev
4  * Copyright (C) Nginx, Inc.
5  */
6 
7 
8 #ifndef _NGX_SHMTX_H_INCLUDED_
9 #define _NGX_SHMTX_H_INCLUDED_
10 
11 
12 #include <ngx_config.h>
13 #include <ngx_core.h>
14 
15 
16 typedef struct {
17     ngx_atomic_t   lock;
18 #if (NGX_HAVE_POSIX_SEM)
19     ngx_atomic_t   wait;
20 #endif
21 } ngx_shmtx_sh_t;
22 
23 
24 typedef struct {
25 #if (NGX_HAVE_ATOMIC_OPS)
26     ngx_atomic_t  *lock;
27 #if (NGX_HAVE_POSIX_SEM)
28     ngx_atomic_t  *wait;
29     ngx_uint_t     semaphore;
30     sem_t          sem;
31 #endif
32 #else
33     ngx_fd_t       fd;
34     u_char        *name;
35 #endif
36     ngx_uint_t     spin;
37 } ngx_shmtx_t;
38 
39 
40 ngx_int_t ngx_shmtx_create(ngx_shmtx_t *mtx, ngx_shmtx_sh_t *addr,
41     u_char *name);
42 void ngx_shmtx_destroy(ngx_shmtx_t *mtx);
43 ngx_uint_t ngx_shmtx_trylock(ngx_shmtx_t *mtx);
44 void ngx_shmtx_lock(ngx_shmtx_t *mtx);
45 void ngx_shmtx_unlock(ngx_shmtx_t *mtx);
46 ngx_uint_t ngx_shmtx_force_unlock(ngx_shmtx_t *mtx, ngx_pid_t pid);
47 
48 
49 #endif /* _NGX_SHMTX_H_INCLUDED_ */
50