|  |  | 
|  | /* | 
|  | * Copyright (C) Igor Sysoev | 
|  | */ | 
|  |  | 
|  |  | 
|  | #ifndef _NGX_HTTP_BUSY_LOCK_H_INCLUDED_ | 
|  | #define _NGX_HTTP_BUSY_LOCK_H_INCLUDED_ | 
|  |  | 
|  |  | 
|  | #include <ngx_config.h> | 
|  | #include <ngx_core.h> | 
|  | #include <ngx_event.h> | 
|  | #include <ngx_http.h> | 
|  |  | 
|  |  | 
|  | typedef struct { | 
|  | u_char             *md5_mask; | 
|  | char               *md5; | 
|  | int                 cacheable; | 
|  |  | 
|  | int                 busy; | 
|  | int                 max_busy; | 
|  |  | 
|  | int                 waiting; | 
|  | int                 max_waiting; | 
|  |  | 
|  | time_t              timeout; | 
|  |  | 
|  | ngx_event_mutex_t  *mutex; | 
|  | } ngx_http_busy_lock_t; | 
|  |  | 
|  |  | 
|  | typedef struct { | 
|  | time_t         time; | 
|  | ngx_event_t   *event; | 
|  | void         (*event_handler)(ngx_event_t *ev); | 
|  | u_char        *md5; | 
|  | int            slot; | 
|  | } ngx_http_busy_lock_ctx_t; | 
|  |  | 
|  |  | 
|  | int ngx_http_busy_lock(ngx_http_busy_lock_t *bl, ngx_http_busy_lock_ctx_t *bc); | 
|  | int ngx_http_busy_lock_cacheable(ngx_http_busy_lock_t *bl, | 
|  | ngx_http_busy_lock_ctx_t *bc, int lock); | 
|  | void ngx_http_busy_unlock(ngx_http_busy_lock_t *bl, | 
|  | ngx_http_busy_lock_ctx_t *bc); | 
|  |  | 
|  | char *ngx_http_set_busy_lock_slot(ngx_conf_t *cf, ngx_command_t *cmd, | 
|  | void *conf); | 
|  |  | 
|  |  | 
|  | #endif /* _NGX_HTTP_BUSY_LOCK_H_INCLUDED_ */ |