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