| /* | |
| * Copyright (C) Igor Sysoev | |
| */ | |
| #ifndef _NGX_EVENT_BUSY_LOCK_H_INCLUDED_ | |
| #define _NGX_EVENT_BUSY_LOCK_H_INCLUDED_ | |
| #include <ngx_config.h> | |
| #include <ngx_core.h> | |
| #include <ngx_event.h> | |
| typedef struct ngx_event_busy_lock_ctx_s ngx_event_busy_lock_ctx_t; | |
| struct ngx_event_busy_lock_ctx_s { | |
| ngx_event_t *event; | |
| ngx_event_handler_pt handler; | |
| void *data; | |
| ngx_msec_t timer; | |
| unsigned locked:1; | |
| unsigned waiting:1; | |
| unsigned cache_updated:1; | |
| char *md5; | |
| ngx_int_t slot; | |
| ngx_event_busy_lock_ctx_t *next; | |
| }; | |
| typedef struct { | |
| u_char *md5_mask; | |
| char *md5; | |
| ngx_uint_t cacheable; | |
| ngx_uint_t busy; | |
| ngx_uint_t max_busy; | |
| ngx_uint_t waiting; | |
| ngx_uint_t max_waiting; | |
| ngx_event_busy_lock_ctx_t *events; | |
| ngx_event_busy_lock_ctx_t *last; | |
| #if (NGX_THREADS) | |
| ngx_mutex_t *mutex; | |
| #endif | |
| } ngx_event_busy_lock_t; | |
| ngx_int_t ngx_event_busy_lock(ngx_event_busy_lock_t *bl, | |
| ngx_event_busy_lock_ctx_t *ctx); | |
| ngx_int_t ngx_event_busy_lock_cacheable(ngx_event_busy_lock_t *bl, | |
| ngx_event_busy_lock_ctx_t *ctx); | |
| void ngx_event_busy_unlock(ngx_event_busy_lock_t *bl, | |
| ngx_event_busy_lock_ctx_t *ctx); | |
| void ngx_event_busy_lock_cancel(ngx_event_busy_lock_t *bl, | |
| ngx_event_busy_lock_ctx_t *ctx); | |
| #endif /* _NGX_EVENT_BUSY_LOCK_H_INCLUDED_ */ |