Mercurial > hg > nginx
comparison src/event/ngx_event_posted.c @ 5820:3377f9459e99
Events: removed broken thread support from posted events.
It's mostly dead code. And the idea of thread support for this task has
been deprecated.
author | Valentin Bartenev <vbart@nginx.com> |
---|---|
date | Mon, 01 Sep 2014 18:20:03 +0400 |
parents | d620f497c50f |
children | 3f5f0ab59b35 |
comparison
equal
deleted
inserted
replaced
5819:8e7ee4c70a3c | 5820:3377f9459e99 |
---|---|
8 #include <ngx_config.h> | 8 #include <ngx_config.h> |
9 #include <ngx_core.h> | 9 #include <ngx_core.h> |
10 #include <ngx_event.h> | 10 #include <ngx_event.h> |
11 | 11 |
12 | 12 |
13 ngx_thread_volatile ngx_event_t *ngx_posted_accept_events; | 13 ngx_event_t *ngx_posted_accept_events; |
14 ngx_thread_volatile ngx_event_t *ngx_posted_events; | 14 ngx_event_t *ngx_posted_events; |
15 | |
16 #if (NGX_THREADS) | |
17 ngx_mutex_t *ngx_posted_events_mutex; | |
18 #endif | |
19 | 15 |
20 | 16 |
21 void | 17 void |
22 ngx_event_process_posted(ngx_cycle_t *cycle, | 18 ngx_event_process_posted(ngx_cycle_t *cycle, ngx_event_t **posted) |
23 ngx_thread_volatile ngx_event_t **posted) | |
24 { | 19 { |
25 ngx_event_t *ev; | 20 ngx_event_t *ev; |
26 | 21 |
27 for ( ;; ) { | 22 for ( ;; ) { |
28 | 23 |
29 ev = (ngx_event_t *) *posted; | 24 ev = *posted; |
30 | 25 |
31 ngx_log_debug1(NGX_LOG_DEBUG_EVENT, cycle->log, 0, | 26 ngx_log_debug1(NGX_LOG_DEBUG_EVENT, cycle->log, 0, |
32 "posted event %p", ev); | 27 "posted event %p", ev); |
33 | 28 |
34 if (ev == NULL) { | 29 if (ev == NULL) { |
38 ngx_delete_posted_event(ev); | 33 ngx_delete_posted_event(ev); |
39 | 34 |
40 ev->handler(ev); | 35 ev->handler(ev); |
41 } | 36 } |
42 } | 37 } |
43 | |
44 | |
45 #if (NGX_THREADS) && !(NGX_WIN32) | |
46 | |
47 void | |
48 ngx_wakeup_worker_thread(ngx_cycle_t *cycle) | |
49 { | |
50 ngx_int_t i; | |
51 #if 0 | |
52 ngx_uint_t busy; | |
53 ngx_event_t *ev; | |
54 | |
55 busy = 1; | |
56 | |
57 if (ngx_mutex_lock(ngx_posted_events_mutex) == NGX_ERROR) { | |
58 return; | |
59 } | |
60 | |
61 for (ev = (ngx_event_t *) ngx_posted_events; ev; ev = ev->next) { | |
62 if (*(ev->lock) == 0) { | |
63 busy = 0; | |
64 break; | |
65 } | |
66 } | |
67 | |
68 ngx_mutex_unlock(ngx_posted_events_mutex); | |
69 | |
70 if (busy) { | |
71 return; | |
72 } | |
73 #endif | |
74 | |
75 for (i = 0; i < ngx_threads_n; i++) { | |
76 if (ngx_threads[i].state == NGX_THREAD_FREE) { | |
77 ngx_cond_signal(ngx_threads[i].cv); | |
78 return; | |
79 } | |
80 } | |
81 } | |
82 | |
83 | |
84 ngx_int_t | |
85 ngx_event_thread_process_posted(ngx_cycle_t *cycle) | |
86 { | |
87 ngx_event_t *ev; | |
88 | |
89 for ( ;; ) { | |
90 | |
91 ev = (ngx_event_t *) ngx_posted_events; | |
92 | |
93 for ( ;; ) { | |
94 | |
95 ngx_log_debug1(NGX_LOG_DEBUG_EVENT, cycle->log, 0, | |
96 "posted event %p", ev); | |
97 | |
98 if (ev == NULL) { | |
99 return NGX_OK; | |
100 } | |
101 | |
102 if (ngx_trylock(ev->lock) == 0) { | |
103 | |
104 ngx_log_debug1(NGX_LOG_DEBUG_EVENT, cycle->log, 0, | |
105 "posted event %p is busy", ev); | |
106 | |
107 ev = ev->next; | |
108 continue; | |
109 } | |
110 | |
111 if (ev->lock != ev->own_lock) { | |
112 if (*(ev->own_lock)) { | |
113 ngx_log_error(NGX_LOG_ALERT, cycle->log, 0, | |
114 "the own lock of the posted event %p is busy", ev); | |
115 ngx_unlock(ev->lock); | |
116 ev = ev->next; | |
117 continue; | |
118 } | |
119 *(ev->own_lock) = 1; | |
120 } | |
121 | |
122 ngx_delete_posted_event(ev); | |
123 | |
124 ev->locked = 1; | |
125 | |
126 ev->ready |= ev->posted_ready; | |
127 ev->timedout |= ev->posted_timedout; | |
128 ev->pending_eof |= ev->posted_eof; | |
129 #if (NGX_HAVE_KQUEUE) | |
130 ev->kq_errno |= ev->posted_errno; | |
131 #endif | |
132 if (ev->posted_available) { | |
133 ev->available = ev->posted_available; | |
134 } | |
135 | |
136 ev->posted_ready = 0; | |
137 ev->posted_timedout = 0; | |
138 ev->posted_eof = 0; | |
139 #if (NGX_HAVE_KQUEUE) | |
140 ev->posted_errno = 0; | |
141 #endif | |
142 ev->posted_available = 0; | |
143 | |
144 ngx_mutex_unlock(ngx_posted_events_mutex); | |
145 | |
146 ev->handler(ev); | |
147 | |
148 ngx_mutex_lock(ngx_posted_events_mutex); | |
149 | |
150 if (ev->locked) { | |
151 ngx_unlock(ev->lock); | |
152 | |
153 if (ev->lock != ev->own_lock) { | |
154 ngx_unlock(ev->own_lock); | |
155 } | |
156 } | |
157 | |
158 ngx_log_debug1(NGX_LOG_DEBUG_EVENT, cycle->log, 0, | |
159 "posted event %p is done", ev); | |
160 | |
161 break; | |
162 } | |
163 } | |
164 } | |
165 | |
166 #else | |
167 | |
168 void | |
169 ngx_wakeup_worker_thread(ngx_cycle_t *cycle) | |
170 { | |
171 } | |
172 | |
173 #endif |