annotate src/event/ngx_event_busy_lock.c @ 4436:311b358658c8 stable-1.0

Merge of r4339, r4340, r4341: Cache fixes: *) Obsolete code removed. The ngx_http_cache() and ngx_http_no_cache_set_slot() functions were replaced in 0.8.46 and no longer used since then. *) Handling of cache files with long headers. There are two possible situations which can lead to this: response was cached with bigger proxy_buffer_size value (and nginx was restared since then, i.e. shared memory zone content was lost), or due to the race in the cache update code (see [1]) we've end up with fcn->body_start from a different response stored in shared memory zone. *) Only complain on long locked entries. There have been multiple reports of cases where a real locked entry was removed, resulting in a segmentation fault later in a worker which locked the entry. It looks like default inactive timeout isn't enough in real life. For now just ignore such locked entries, and move them to the top of the inactive queue to allow processing of other entries. [1] http://mailman.nginx.org/pipermail/nginx-devel/2011-September/001287.html
author Maxim Dounin <mdounin@mdounin.ru>
date Sun, 05 Feb 2012 13:34:08 +0000
parents 4c43e25d11ea
children d620f497c50f
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
441
da8c5707af39 nginx-0.1.0-2004-09-28-12:34:51 import; set copyright and remove unused files
Igor Sysoev <igor@sysoev.ru>
parents: 351
diff changeset
1
da8c5707af39 nginx-0.1.0-2004-09-28-12:34:51 import; set copyright and remove unused files
Igor Sysoev <igor@sysoev.ru>
parents: 351
diff changeset
2 /*
444
42d11f017717 nginx-0.1.0-2004-09-29-20:00:49 import; remove years from copyright
Igor Sysoev <igor@sysoev.ru>
parents: 441
diff changeset
3 * Copyright (C) Igor Sysoev
441
da8c5707af39 nginx-0.1.0-2004-09-28-12:34:51 import; set copyright and remove unused files
Igor Sysoev <igor@sysoev.ru>
parents: 351
diff changeset
4 */
da8c5707af39 nginx-0.1.0-2004-09-28-12:34:51 import; set copyright and remove unused files
Igor Sysoev <igor@sysoev.ru>
parents: 351
diff changeset
5
276
a2d1ccc96111 nginx-0.0.2-2004-03-03-00:14:37 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
6
a2d1ccc96111 nginx-0.0.2-2004-03-03-00:14:37 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
7 #include <ngx_config.h>
a2d1ccc96111 nginx-0.0.2-2004-03-03-00:14:37 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
8 #include <ngx_core.h>
a2d1ccc96111 nginx-0.0.2-2004-03-03-00:14:37 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
9 #include <ngx_event.h>
a2d1ccc96111 nginx-0.0.2-2004-03-03-00:14:37 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
10
a2d1ccc96111 nginx-0.0.2-2004-03-03-00:14:37 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
11
1565
4c43e25d11ea fix English grammar
Igor Sysoev <igor@sysoev.ru>
parents: 1354
diff changeset
12 static ngx_int_t ngx_event_busy_lock_look_cacheable(ngx_event_busy_lock_t *bl,
563
9c2f3ed7a247 nginx-0.3.3-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 509
diff changeset
13 ngx_event_busy_lock_ctx_t *ctx);
276
a2d1ccc96111 nginx-0.0.2-2004-03-03-00:14:37 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
14 static void ngx_event_busy_lock_handler(ngx_event_t *ev);
a2d1ccc96111 nginx-0.0.2-2004-03-03-00:14:37 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
15 static void ngx_event_busy_lock_posted_handler(ngx_event_t *ev);
a2d1ccc96111 nginx-0.0.2-2004-03-03-00:14:37 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
16
a2d1ccc96111 nginx-0.0.2-2004-03-03-00:14:37 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
17
a2d1ccc96111 nginx-0.0.2-2004-03-03-00:14:37 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
18 /*
a2d1ccc96111 nginx-0.0.2-2004-03-03-00:14:37 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
19 * NGX_OK: the busy lock is held
a2d1ccc96111 nginx-0.0.2-2004-03-03-00:14:37 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
20 * NGX_AGAIN: the all busy locks are held but we will wait the specified time
297
ee394e997c77 nginx-0.0.3-2004-03-29-21:43:58 import
Igor Sysoev <igor@sysoev.ru>
parents: 277
diff changeset
21 * NGX_BUSY: ctx->timer == 0: there are many the busy locks
ee394e997c77 nginx-0.0.3-2004-03-29-21:43:58 import
Igor Sysoev <igor@sysoev.ru>
parents: 277
diff changeset
22 * ctx->timer != 0: there are many the waiting locks
276
a2d1ccc96111 nginx-0.0.2-2004-03-03-00:14:37 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
23 */
a2d1ccc96111 nginx-0.0.2-2004-03-03-00:14:37 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
24
563
9c2f3ed7a247 nginx-0.3.3-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 509
diff changeset
25 ngx_int_t
9c2f3ed7a247 nginx-0.3.3-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 509
diff changeset
26 ngx_event_busy_lock(ngx_event_busy_lock_t *bl, ngx_event_busy_lock_ctx_t *ctx)
276
a2d1ccc96111 nginx-0.0.2-2004-03-03-00:14:37 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
27 {
a2d1ccc96111 nginx-0.0.2-2004-03-03-00:14:37 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
28 ngx_int_t rc;
a2d1ccc96111 nginx-0.0.2-2004-03-03-00:14:37 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
29
563
9c2f3ed7a247 nginx-0.3.3-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 509
diff changeset
30 ngx_mutex_lock(bl->mutex);
276
a2d1ccc96111 nginx-0.0.2-2004-03-03-00:14:37 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
31
a2d1ccc96111 nginx-0.0.2-2004-03-03-00:14:37 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
32 ngx_log_debug2(NGX_LOG_DEBUG_EVENT, ctx->event->log, 0,
a2d1ccc96111 nginx-0.0.2-2004-03-03-00:14:37 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
33 "event busy lock: b:%d mb:%d",
a2d1ccc96111 nginx-0.0.2-2004-03-03-00:14:37 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
34 bl->busy, bl->max_busy);
a2d1ccc96111 nginx-0.0.2-2004-03-03-00:14:37 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
35
a2d1ccc96111 nginx-0.0.2-2004-03-03-00:14:37 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
36 if (bl->busy < bl->max_busy) {
a2d1ccc96111 nginx-0.0.2-2004-03-03-00:14:37 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
37 bl->busy++;
605
5dac8c7fb71b nginx-0.3.24-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 563
diff changeset
38
276
a2d1ccc96111 nginx-0.0.2-2004-03-03-00:14:37 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
39 rc = NGX_OK;
a2d1ccc96111 nginx-0.0.2-2004-03-03-00:14:37 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
40
a2d1ccc96111 nginx-0.0.2-2004-03-03-00:14:37 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
41 } else if (ctx->timer && bl->waiting < bl->max_waiting) {
a2d1ccc96111 nginx-0.0.2-2004-03-03-00:14:37 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
42 bl->waiting++;
a2d1ccc96111 nginx-0.0.2-2004-03-03-00:14:37 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
43 ngx_add_timer(ctx->event, ctx->timer);
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 444
diff changeset
44 ctx->event->handler = ngx_event_busy_lock_handler;
276
a2d1ccc96111 nginx-0.0.2-2004-03-03-00:14:37 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
45
351
af4c6b45a687 nginx-0.0.4-2004-06-10-22:36:57 import
Igor Sysoev <igor@sysoev.ru>
parents: 297
diff changeset
46 if (bl->events) {
af4c6b45a687 nginx-0.0.4-2004-06-10-22:36:57 import
Igor Sysoev <igor@sysoev.ru>
parents: 297
diff changeset
47 bl->last->next = ctx;
af4c6b45a687 nginx-0.0.4-2004-06-10-22:36:57 import
Igor Sysoev <igor@sysoev.ru>
parents: 297
diff changeset
48
276
a2d1ccc96111 nginx-0.0.2-2004-03-03-00:14:37 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
49 } else {
351
af4c6b45a687 nginx-0.0.4-2004-06-10-22:36:57 import
Igor Sysoev <igor@sysoev.ru>
parents: 297
diff changeset
50 bl->events = ctx;
276
a2d1ccc96111 nginx-0.0.2-2004-03-03-00:14:37 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
51 }
351
af4c6b45a687 nginx-0.0.4-2004-06-10-22:36:57 import
Igor Sysoev <igor@sysoev.ru>
parents: 297
diff changeset
52
276
a2d1ccc96111 nginx-0.0.2-2004-03-03-00:14:37 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
53 bl->last = ctx;
a2d1ccc96111 nginx-0.0.2-2004-03-03-00:14:37 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
54
a2d1ccc96111 nginx-0.0.2-2004-03-03-00:14:37 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
55 rc = NGX_AGAIN;
a2d1ccc96111 nginx-0.0.2-2004-03-03-00:14:37 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
56
a2d1ccc96111 nginx-0.0.2-2004-03-03-00:14:37 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
57 } else {
a2d1ccc96111 nginx-0.0.2-2004-03-03-00:14:37 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
58 rc = NGX_BUSY;
a2d1ccc96111 nginx-0.0.2-2004-03-03-00:14:37 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
59 }
a2d1ccc96111 nginx-0.0.2-2004-03-03-00:14:37 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
60
a2d1ccc96111 nginx-0.0.2-2004-03-03-00:14:37 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
61 ngx_mutex_unlock(bl->mutex);
a2d1ccc96111 nginx-0.0.2-2004-03-03-00:14:37 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
62
a2d1ccc96111 nginx-0.0.2-2004-03-03-00:14:37 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
63 return rc;
a2d1ccc96111 nginx-0.0.2-2004-03-03-00:14:37 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
64 }
a2d1ccc96111 nginx-0.0.2-2004-03-03-00:14:37 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
65
a2d1ccc96111 nginx-0.0.2-2004-03-03-00:14:37 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
66
563
9c2f3ed7a247 nginx-0.3.3-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 509
diff changeset
67 ngx_int_t
1565
4c43e25d11ea fix English grammar
Igor Sysoev <igor@sysoev.ru>
parents: 1354
diff changeset
68 ngx_event_busy_lock_cacheable(ngx_event_busy_lock_t *bl,
563
9c2f3ed7a247 nginx-0.3.3-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 509
diff changeset
69 ngx_event_busy_lock_ctx_t *ctx)
276
a2d1ccc96111 nginx-0.0.2-2004-03-03-00:14:37 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
70 {
a2d1ccc96111 nginx-0.0.2-2004-03-03-00:14:37 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
71 ngx_int_t rc;
a2d1ccc96111 nginx-0.0.2-2004-03-03-00:14:37 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
72
563
9c2f3ed7a247 nginx-0.3.3-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 509
diff changeset
73 ngx_mutex_lock(bl->mutex);
276
a2d1ccc96111 nginx-0.0.2-2004-03-03-00:14:37 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
74
1565
4c43e25d11ea fix English grammar
Igor Sysoev <igor@sysoev.ru>
parents: 1354
diff changeset
75 rc = ngx_event_busy_lock_look_cacheable(bl, ctx);
276
a2d1ccc96111 nginx-0.0.2-2004-03-03-00:14:37 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
76
a2d1ccc96111 nginx-0.0.2-2004-03-03-00:14:37 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
77 ngx_log_debug3(NGX_LOG_DEBUG_EVENT, ctx->event->log, 0,
a2d1ccc96111 nginx-0.0.2-2004-03-03-00:14:37 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
78 "event busy lock: %d w:%d mw:%d",
a2d1ccc96111 nginx-0.0.2-2004-03-03-00:14:37 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
79 rc, bl->waiting, bl->max_waiting);
a2d1ccc96111 nginx-0.0.2-2004-03-03-00:14:37 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
80
a2d1ccc96111 nginx-0.0.2-2004-03-03-00:14:37 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
81 /*
a2d1ccc96111 nginx-0.0.2-2004-03-03-00:14:37 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
82 * NGX_OK: no the same request, there is free slot and we locked it
a2d1ccc96111 nginx-0.0.2-2004-03-03-00:14:37 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
83 * NGX_BUSY: no the same request and there is no free slot
a2d1ccc96111 nginx-0.0.2-2004-03-03-00:14:37 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
84 * NGX_AGAIN: the same request is processing
a2d1ccc96111 nginx-0.0.2-2004-03-03-00:14:37 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
85 */
a2d1ccc96111 nginx-0.0.2-2004-03-03-00:14:37 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
86
a2d1ccc96111 nginx-0.0.2-2004-03-03-00:14:37 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
87 if (rc == NGX_AGAIN) {
a2d1ccc96111 nginx-0.0.2-2004-03-03-00:14:37 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
88
a2d1ccc96111 nginx-0.0.2-2004-03-03-00:14:37 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
89 if (ctx->timer && bl->waiting < bl->max_waiting) {
a2d1ccc96111 nginx-0.0.2-2004-03-03-00:14:37 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
90 bl->waiting++;
a2d1ccc96111 nginx-0.0.2-2004-03-03-00:14:37 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
91 ngx_add_timer(ctx->event, ctx->timer);
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 444
diff changeset
92 ctx->event->handler = ngx_event_busy_lock_handler;
276
a2d1ccc96111 nginx-0.0.2-2004-03-03-00:14:37 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
93
a2d1ccc96111 nginx-0.0.2-2004-03-03-00:14:37 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
94 if (bl->events == NULL) {
a2d1ccc96111 nginx-0.0.2-2004-03-03-00:14:37 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
95 bl->events = ctx;
a2d1ccc96111 nginx-0.0.2-2004-03-03-00:14:37 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
96 } else {
a2d1ccc96111 nginx-0.0.2-2004-03-03-00:14:37 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
97 bl->last->next = ctx;
a2d1ccc96111 nginx-0.0.2-2004-03-03-00:14:37 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
98 }
a2d1ccc96111 nginx-0.0.2-2004-03-03-00:14:37 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
99 bl->last = ctx;
a2d1ccc96111 nginx-0.0.2-2004-03-03-00:14:37 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
100
a2d1ccc96111 nginx-0.0.2-2004-03-03-00:14:37 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
101 } else {
a2d1ccc96111 nginx-0.0.2-2004-03-03-00:14:37 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
102 rc = NGX_BUSY;
a2d1ccc96111 nginx-0.0.2-2004-03-03-00:14:37 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
103 }
a2d1ccc96111 nginx-0.0.2-2004-03-03-00:14:37 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
104 }
a2d1ccc96111 nginx-0.0.2-2004-03-03-00:14:37 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
105
a2d1ccc96111 nginx-0.0.2-2004-03-03-00:14:37 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
106 ngx_mutex_unlock(bl->mutex);
a2d1ccc96111 nginx-0.0.2-2004-03-03-00:14:37 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
107
a2d1ccc96111 nginx-0.0.2-2004-03-03-00:14:37 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
108 return rc;
a2d1ccc96111 nginx-0.0.2-2004-03-03-00:14:37 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
109 }
a2d1ccc96111 nginx-0.0.2-2004-03-03-00:14:37 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
110
a2d1ccc96111 nginx-0.0.2-2004-03-03-00:14:37 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
111
563
9c2f3ed7a247 nginx-0.3.3-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 509
diff changeset
112 void
9c2f3ed7a247 nginx-0.3.3-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 509
diff changeset
113 ngx_event_busy_unlock(ngx_event_busy_lock_t *bl,
9c2f3ed7a247 nginx-0.3.3-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 509
diff changeset
114 ngx_event_busy_lock_ctx_t *ctx)
276
a2d1ccc96111 nginx-0.0.2-2004-03-03-00:14:37 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
115 {
a2d1ccc96111 nginx-0.0.2-2004-03-03-00:14:37 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
116 ngx_event_t *ev;
a2d1ccc96111 nginx-0.0.2-2004-03-03-00:14:37 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
117 ngx_event_busy_lock_ctx_t *wakeup;
a2d1ccc96111 nginx-0.0.2-2004-03-03-00:14:37 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
118
563
9c2f3ed7a247 nginx-0.3.3-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 509
diff changeset
119 ngx_mutex_lock(bl->mutex);
276
a2d1ccc96111 nginx-0.0.2-2004-03-03-00:14:37 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
120
a2d1ccc96111 nginx-0.0.2-2004-03-03-00:14:37 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
121 if (bl->events) {
a2d1ccc96111 nginx-0.0.2-2004-03-03-00:14:37 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
122 wakeup = bl->events;
a2d1ccc96111 nginx-0.0.2-2004-03-03-00:14:37 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
123 bl->events = bl->events->next;
a2d1ccc96111 nginx-0.0.2-2004-03-03-00:14:37 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
124
a2d1ccc96111 nginx-0.0.2-2004-03-03-00:14:37 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
125 } else {
a2d1ccc96111 nginx-0.0.2-2004-03-03-00:14:37 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
126 wakeup = NULL;
a2d1ccc96111 nginx-0.0.2-2004-03-03-00:14:37 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
127 bl->busy--;
a2d1ccc96111 nginx-0.0.2-2004-03-03-00:14:37 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
128 }
a2d1ccc96111 nginx-0.0.2-2004-03-03-00:14:37 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
129
a2d1ccc96111 nginx-0.0.2-2004-03-03-00:14:37 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
130 /*
277
e91499541410 nginx-0.0.2-2004-03-03-19:14:15 import
Igor Sysoev <igor@sysoev.ru>
parents: 276
diff changeset
131 * MP: all ctx's and their queue must be in shared memory,
e91499541410 nginx-0.0.2-2004-03-03-19:14:15 import
Igor Sysoev <igor@sysoev.ru>
parents: 276
diff changeset
132 * each ctx has pid to wake up
276
a2d1ccc96111 nginx-0.0.2-2004-03-03-00:14:37 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
133 */
a2d1ccc96111 nginx-0.0.2-2004-03-03-00:14:37 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
134
a2d1ccc96111 nginx-0.0.2-2004-03-03-00:14:37 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
135 if (wakeup == NULL) {
a2d1ccc96111 nginx-0.0.2-2004-03-03-00:14:37 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
136 ngx_mutex_unlock(bl->mutex);
563
9c2f3ed7a247 nginx-0.3.3-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 509
diff changeset
137 return;
276
a2d1ccc96111 nginx-0.0.2-2004-03-03-00:14:37 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
138 }
a2d1ccc96111 nginx-0.0.2-2004-03-03-00:14:37 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
139
a2d1ccc96111 nginx-0.0.2-2004-03-03-00:14:37 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
140 if (ctx->md5) {
a2d1ccc96111 nginx-0.0.2-2004-03-03-00:14:37 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
141 for (wakeup = bl->events; wakeup; wakeup = wakeup->next) {
277
e91499541410 nginx-0.0.2-2004-03-03-19:14:15 import
Igor Sysoev <igor@sysoev.ru>
parents: 276
diff changeset
142 if (wakeup->md5 == NULL || wakeup->slot != ctx->slot) {
276
a2d1ccc96111 nginx-0.0.2-2004-03-03-00:14:37 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
143 continue;
a2d1ccc96111 nginx-0.0.2-2004-03-03-00:14:37 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
144 }
a2d1ccc96111 nginx-0.0.2-2004-03-03-00:14:37 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
145
a2d1ccc96111 nginx-0.0.2-2004-03-03-00:14:37 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
146 wakeup->handler = ngx_event_busy_lock_posted_handler;
a2d1ccc96111 nginx-0.0.2-2004-03-03-00:14:37 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
147 wakeup->cache_updated = 1;
a2d1ccc96111 nginx-0.0.2-2004-03-03-00:14:37 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
148
a2d1ccc96111 nginx-0.0.2-2004-03-03-00:14:37 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
149 ev = wakeup->event;
a2d1ccc96111 nginx-0.0.2-2004-03-03-00:14:37 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
150
563
9c2f3ed7a247 nginx-0.3.3-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 509
diff changeset
151 ngx_post_event(ev, &ngx_posted_events);
276
a2d1ccc96111 nginx-0.0.2-2004-03-03-00:14:37 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
152 }
a2d1ccc96111 nginx-0.0.2-2004-03-03-00:14:37 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
153
a2d1ccc96111 nginx-0.0.2-2004-03-03-00:14:37 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
154 ngx_mutex_unlock(bl->mutex);
a2d1ccc96111 nginx-0.0.2-2004-03-03-00:14:37 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
155
a2d1ccc96111 nginx-0.0.2-2004-03-03-00:14:37 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
156 } else {
a2d1ccc96111 nginx-0.0.2-2004-03-03-00:14:37 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
157 bl->waiting--;
a2d1ccc96111 nginx-0.0.2-2004-03-03-00:14:37 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
158
a2d1ccc96111 nginx-0.0.2-2004-03-03-00:14:37 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
159 ngx_mutex_unlock(bl->mutex);
a2d1ccc96111 nginx-0.0.2-2004-03-03-00:14:37 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
160
a2d1ccc96111 nginx-0.0.2-2004-03-03-00:14:37 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
161 wakeup->handler = ngx_event_busy_lock_posted_handler;
a2d1ccc96111 nginx-0.0.2-2004-03-03-00:14:37 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
162 wakeup->locked = 1;
a2d1ccc96111 nginx-0.0.2-2004-03-03-00:14:37 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
163
a2d1ccc96111 nginx-0.0.2-2004-03-03-00:14:37 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
164 ev = wakeup->event;
a2d1ccc96111 nginx-0.0.2-2004-03-03-00:14:37 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
165
a2d1ccc96111 nginx-0.0.2-2004-03-03-00:14:37 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
166 if (ev->timer_set) {
a2d1ccc96111 nginx-0.0.2-2004-03-03-00:14:37 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
167 ngx_del_timer(ev);
a2d1ccc96111 nginx-0.0.2-2004-03-03-00:14:37 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
168 }
a2d1ccc96111 nginx-0.0.2-2004-03-03-00:14:37 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
169
563
9c2f3ed7a247 nginx-0.3.3-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 509
diff changeset
170 ngx_post_event(ev, &ngx_posted_events);
276
a2d1ccc96111 nginx-0.0.2-2004-03-03-00:14:37 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
171 }
a2d1ccc96111 nginx-0.0.2-2004-03-03-00:14:37 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
172 }
a2d1ccc96111 nginx-0.0.2-2004-03-03-00:14:37 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
173
a2d1ccc96111 nginx-0.0.2-2004-03-03-00:14:37 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
174
563
9c2f3ed7a247 nginx-0.3.3-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 509
diff changeset
175 void
9c2f3ed7a247 nginx-0.3.3-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 509
diff changeset
176 ngx_event_busy_lock_cancel(ngx_event_busy_lock_t *bl,
9c2f3ed7a247 nginx-0.3.3-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 509
diff changeset
177 ngx_event_busy_lock_ctx_t *ctx)
276
a2d1ccc96111 nginx-0.0.2-2004-03-03-00:14:37 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
178 {
a2d1ccc96111 nginx-0.0.2-2004-03-03-00:14:37 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
179 ngx_event_busy_lock_ctx_t *c, *p;
a2d1ccc96111 nginx-0.0.2-2004-03-03-00:14:37 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
180
563
9c2f3ed7a247 nginx-0.3.3-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 509
diff changeset
181 ngx_mutex_lock(bl->mutex);
276
a2d1ccc96111 nginx-0.0.2-2004-03-03-00:14:37 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
182
a2d1ccc96111 nginx-0.0.2-2004-03-03-00:14:37 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
183 bl->waiting--;
a2d1ccc96111 nginx-0.0.2-2004-03-03-00:14:37 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
184
a2d1ccc96111 nginx-0.0.2-2004-03-03-00:14:37 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
185 if (ctx == bl->events) {
a2d1ccc96111 nginx-0.0.2-2004-03-03-00:14:37 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
186 bl->events = ctx->next;
a2d1ccc96111 nginx-0.0.2-2004-03-03-00:14:37 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
187
a2d1ccc96111 nginx-0.0.2-2004-03-03-00:14:37 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
188 } else {
a2d1ccc96111 nginx-0.0.2-2004-03-03-00:14:37 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
189 p = bl->events;
a2d1ccc96111 nginx-0.0.2-2004-03-03-00:14:37 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
190 for (c = bl->events->next; c; c = c->next) {
a2d1ccc96111 nginx-0.0.2-2004-03-03-00:14:37 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
191 if (c == ctx) {
a2d1ccc96111 nginx-0.0.2-2004-03-03-00:14:37 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
192 p->next = ctx->next;
a2d1ccc96111 nginx-0.0.2-2004-03-03-00:14:37 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
193 break;
a2d1ccc96111 nginx-0.0.2-2004-03-03-00:14:37 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
194 }
a2d1ccc96111 nginx-0.0.2-2004-03-03-00:14:37 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
195 p = c;
a2d1ccc96111 nginx-0.0.2-2004-03-03-00:14:37 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
196 }
a2d1ccc96111 nginx-0.0.2-2004-03-03-00:14:37 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
197 }
a2d1ccc96111 nginx-0.0.2-2004-03-03-00:14:37 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
198
a2d1ccc96111 nginx-0.0.2-2004-03-03-00:14:37 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
199 ngx_mutex_unlock(bl->mutex);
a2d1ccc96111 nginx-0.0.2-2004-03-03-00:14:37 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
200 }
a2d1ccc96111 nginx-0.0.2-2004-03-03-00:14:37 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
201
a2d1ccc96111 nginx-0.0.2-2004-03-03-00:14:37 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
202
563
9c2f3ed7a247 nginx-0.3.3-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 509
diff changeset
203 static ngx_int_t
1565
4c43e25d11ea fix English grammar
Igor Sysoev <igor@sysoev.ru>
parents: 1354
diff changeset
204 ngx_event_busy_lock_look_cacheable(ngx_event_busy_lock_t *bl,
563
9c2f3ed7a247 nginx-0.3.3-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 509
diff changeset
205 ngx_event_busy_lock_ctx_t *ctx)
276
a2d1ccc96111 nginx-0.0.2-2004-03-03-00:14:37 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
206 {
a2d1ccc96111 nginx-0.0.2-2004-03-03-00:14:37 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
207 ngx_int_t free;
1565
4c43e25d11ea fix English grammar
Igor Sysoev <igor@sysoev.ru>
parents: 1354
diff changeset
208 ngx_uint_t i, bit, cacheable, mask;
276
a2d1ccc96111 nginx-0.0.2-2004-03-03-00:14:37 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
209
a2d1ccc96111 nginx-0.0.2-2004-03-03-00:14:37 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
210 bit = 0;
1565
4c43e25d11ea fix English grammar
Igor Sysoev <igor@sysoev.ru>
parents: 1354
diff changeset
211 cacheable = 0;
276
a2d1ccc96111 nginx-0.0.2-2004-03-03-00:14:37 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
212 free = -1;
a2d1ccc96111 nginx-0.0.2-2004-03-03-00:14:37 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
213
a2d1ccc96111 nginx-0.0.2-2004-03-03-00:14:37 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
214 #if (NGX_SUPPRESS_WARN)
a2d1ccc96111 nginx-0.0.2-2004-03-03-00:14:37 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
215 mask = 0;
a2d1ccc96111 nginx-0.0.2-2004-03-03-00:14:37 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
216 #endif
a2d1ccc96111 nginx-0.0.2-2004-03-03-00:14:37 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
217
a2d1ccc96111 nginx-0.0.2-2004-03-03-00:14:37 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
218 for (i = 0; i < bl->max_busy; i++) {
a2d1ccc96111 nginx-0.0.2-2004-03-03-00:14:37 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
219
a2d1ccc96111 nginx-0.0.2-2004-03-03-00:14:37 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
220 if ((bit & 7) == 0) {
a2d1ccc96111 nginx-0.0.2-2004-03-03-00:14:37 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
221 mask = bl->md5_mask[i / 8];
a2d1ccc96111 nginx-0.0.2-2004-03-03-00:14:37 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
222 }
a2d1ccc96111 nginx-0.0.2-2004-03-03-00:14:37 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
223
a2d1ccc96111 nginx-0.0.2-2004-03-03-00:14:37 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
224 if (mask & 1) {
a2d1ccc96111 nginx-0.0.2-2004-03-03-00:14:37 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
225 if (ngx_memcmp(&bl->md5[i * 16], ctx->md5, 16) == 0) {
277
e91499541410 nginx-0.0.2-2004-03-03-19:14:15 import
Igor Sysoev <igor@sysoev.ru>
parents: 276
diff changeset
226 ctx->waiting = 1;
e91499541410 nginx-0.0.2-2004-03-03-19:14:15 import
Igor Sysoev <igor@sysoev.ru>
parents: 276
diff changeset
227 ctx->slot = i;
276
a2d1ccc96111 nginx-0.0.2-2004-03-03-00:14:37 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
228 return NGX_AGAIN;
a2d1ccc96111 nginx-0.0.2-2004-03-03-00:14:37 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
229 }
1565
4c43e25d11ea fix English grammar
Igor Sysoev <igor@sysoev.ru>
parents: 1354
diff changeset
230 cacheable++;
276
a2d1ccc96111 nginx-0.0.2-2004-03-03-00:14:37 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
231
a2d1ccc96111 nginx-0.0.2-2004-03-03-00:14:37 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
232 } else if (free == -1) {
a2d1ccc96111 nginx-0.0.2-2004-03-03-00:14:37 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
233 free = i;
a2d1ccc96111 nginx-0.0.2-2004-03-03-00:14:37 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
234 }
a2d1ccc96111 nginx-0.0.2-2004-03-03-00:14:37 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
235
1565
4c43e25d11ea fix English grammar
Igor Sysoev <igor@sysoev.ru>
parents: 1354
diff changeset
236 if (cacheable == bl->cacheable) {
4c43e25d11ea fix English grammar
Igor Sysoev <igor@sysoev.ru>
parents: 1354
diff changeset
237 if (free == -1 && cacheable < bl->max_busy) {
276
a2d1ccc96111 nginx-0.0.2-2004-03-03-00:14:37 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
238 free = i + 1;
a2d1ccc96111 nginx-0.0.2-2004-03-03-00:14:37 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
239 }
a2d1ccc96111 nginx-0.0.2-2004-03-03-00:14:37 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
240
a2d1ccc96111 nginx-0.0.2-2004-03-03-00:14:37 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
241 break;
a2d1ccc96111 nginx-0.0.2-2004-03-03-00:14:37 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
242 }
a2d1ccc96111 nginx-0.0.2-2004-03-03-00:14:37 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
243
a2d1ccc96111 nginx-0.0.2-2004-03-03-00:14:37 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
244 mask >>= 1;
a2d1ccc96111 nginx-0.0.2-2004-03-03-00:14:37 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
245 bit++;
a2d1ccc96111 nginx-0.0.2-2004-03-03-00:14:37 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
246 }
a2d1ccc96111 nginx-0.0.2-2004-03-03-00:14:37 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
247
a2d1ccc96111 nginx-0.0.2-2004-03-03-00:14:37 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
248 if (free == -1) {
a2d1ccc96111 nginx-0.0.2-2004-03-03-00:14:37 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
249 return NGX_BUSY;
a2d1ccc96111 nginx-0.0.2-2004-03-03-00:14:37 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
250 }
a2d1ccc96111 nginx-0.0.2-2004-03-03-00:14:37 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
251
a2d1ccc96111 nginx-0.0.2-2004-03-03-00:14:37 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
252 #if 0
a2d1ccc96111 nginx-0.0.2-2004-03-03-00:14:37 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
253 if (bl->busy == bl->max_busy) {
a2d1ccc96111 nginx-0.0.2-2004-03-03-00:14:37 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
254 return NGX_BUSY;
a2d1ccc96111 nginx-0.0.2-2004-03-03-00:14:37 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
255 }
a2d1ccc96111 nginx-0.0.2-2004-03-03-00:14:37 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
256 #endif
a2d1ccc96111 nginx-0.0.2-2004-03-03-00:14:37 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
257
a2d1ccc96111 nginx-0.0.2-2004-03-03-00:14:37 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
258 ngx_memcpy(&bl->md5[free * 16], ctx->md5, 16);
a2d1ccc96111 nginx-0.0.2-2004-03-03-00:14:37 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
259 bl->md5_mask[free / 8] |= 1 << (free & 7);
a2d1ccc96111 nginx-0.0.2-2004-03-03-00:14:37 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
260 ctx->slot = free;
a2d1ccc96111 nginx-0.0.2-2004-03-03-00:14:37 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
261
1565
4c43e25d11ea fix English grammar
Igor Sysoev <igor@sysoev.ru>
parents: 1354
diff changeset
262 bl->cacheable++;
276
a2d1ccc96111 nginx-0.0.2-2004-03-03-00:14:37 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
263 bl->busy++;
a2d1ccc96111 nginx-0.0.2-2004-03-03-00:14:37 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
264
a2d1ccc96111 nginx-0.0.2-2004-03-03-00:14:37 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
265 return NGX_OK;
a2d1ccc96111 nginx-0.0.2-2004-03-03-00:14:37 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
266 }
a2d1ccc96111 nginx-0.0.2-2004-03-03-00:14:37 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
267
a2d1ccc96111 nginx-0.0.2-2004-03-03-00:14:37 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
268
563
9c2f3ed7a247 nginx-0.3.3-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 509
diff changeset
269 static void
9c2f3ed7a247 nginx-0.3.3-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 509
diff changeset
270 ngx_event_busy_lock_handler(ngx_event_t *ev)
276
a2d1ccc96111 nginx-0.0.2-2004-03-03-00:14:37 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
271 {
563
9c2f3ed7a247 nginx-0.3.3-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 509
diff changeset
272 ev->handler = ngx_event_busy_lock_posted_handler;
276
a2d1ccc96111 nginx-0.0.2-2004-03-03-00:14:37 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
273
563
9c2f3ed7a247 nginx-0.3.3-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 509
diff changeset
274 ngx_post_event(ev, &ngx_posted_events);
276
a2d1ccc96111 nginx-0.0.2-2004-03-03-00:14:37 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
275 }
a2d1ccc96111 nginx-0.0.2-2004-03-03-00:14:37 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
276
a2d1ccc96111 nginx-0.0.2-2004-03-03-00:14:37 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
277
563
9c2f3ed7a247 nginx-0.3.3-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 509
diff changeset
278 static void
9c2f3ed7a247 nginx-0.3.3-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 509
diff changeset
279 ngx_event_busy_lock_posted_handler(ngx_event_t *ev)
276
a2d1ccc96111 nginx-0.0.2-2004-03-03-00:14:37 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
280 {
a2d1ccc96111 nginx-0.0.2-2004-03-03-00:14:37 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
281 ngx_event_busy_lock_ctx_t *ctx;
a2d1ccc96111 nginx-0.0.2-2004-03-03-00:14:37 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
282
a2d1ccc96111 nginx-0.0.2-2004-03-03-00:14:37 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
283 ctx = ev->data;
a2d1ccc96111 nginx-0.0.2-2004-03-03-00:14:37 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
284 ctx->handler(ev);
a2d1ccc96111 nginx-0.0.2-2004-03-03-00:14:37 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
285 }