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