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