summaryrefslogtreecommitdiff
path: root/ngx_lua-0.10.28/src/ngx_http_lua_semaphore.h
blob: 826f86a3f6d4a8078cb44358306cec75a91206f1 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
/*
 * Copyright (C) Yichun Zhang (agentzh)
 * Copyright (C) cuiweixie
 * I hereby assign copyright in this code to the lua-nginx-module project,
 * to be licensed under the same terms as the rest of the code.
 */


#ifndef _NGX_HTTP_LUA_SEMAPHORE_H_INCLUDED_
#define _NGX_HTTP_LUA_SEMAPHORE_H_INCLUDED_


#include "ngx_http_lua_common.h"


typedef struct ngx_http_lua_sema_mm_block_s {
    ngx_uint_t                       used;
    ngx_http_lua_sema_mm_t          *mm;
    ngx_uint_t                       epoch;
} ngx_http_lua_sema_mm_block_t;


struct ngx_http_lua_sema_mm_s {
    ngx_queue_t                  free_queue;
    ngx_uint_t                   total;
    ngx_uint_t                   used;
    ngx_uint_t                   num_per_block;
    ngx_uint_t                   cur_epoch;
    ngx_http_lua_main_conf_t    *lmcf;
};


typedef struct ngx_http_lua_sema_s {
    ngx_queue_t                          wait_queue;
    ngx_queue_t                          chain;
    ngx_event_t                          sem_event;
    ngx_http_lua_sema_mm_block_t        *block;
    int                                  resource_count;
    unsigned                             wait_count;
} ngx_http_lua_sema_t;


void ngx_http_lua_sema_mm_cleanup(void *data);
ngx_int_t ngx_http_lua_sema_mm_init(ngx_conf_t *cf,
    ngx_http_lua_main_conf_t *lmcf);


#endif /* _NGX_HTTP_LUA_SEMAPHORE_H_INCLUDED_ */

/* vi:set ft=c ts=4 sw=4 et fdm=marker: */