comparison src/event/ngx_event_posted.c @ 370:54f76b0b8dca

nginx-0.0.7-2004-06-27-22:01:57 import
author Igor Sysoev <igor@sysoev.ru>
date Sun, 27 Jun 2004 18:01:57 +0000
parents 7b96b7f8a6af
children 780e93985b93
comparison
equal deleted inserted replaced
369:9c2515d70489 370:54f76b0b8dca
3 #include <ngx_core.h> 3 #include <ngx_core.h>
4 #include <ngx_event.h> 4 #include <ngx_event.h>
5 5
6 6
7 ngx_thread_volatile ngx_event_t *ngx_posted_events; 7 ngx_thread_volatile ngx_event_t *ngx_posted_events;
8
8 #if (NGX_THREADS) 9 #if (NGX_THREADS)
9 ngx_mutex_t *ngx_posted_events_mutex; 10 ngx_mutex_t *ngx_posted_events_mutex;
11 ngx_cv_t *ngx_posted_events_cv;
10 #endif 12 #endif
11 13
12 14
13 void ngx_event_process_posted(ngx_cycle_t *cycle) 15 void ngx_event_process_posted(ngx_cycle_t *cycle)
14 { 16 {
53 } 55 }
54 56
55 57
56 #if (NGX_THREADS) 58 #if (NGX_THREADS)
57 59
58 void ngx_event_thread_handler(ngx_event_t *ev) 60 ngx_int_t ngx_event_thread_process_posted(ngx_cycle_t *cycle)
59 { 61 {
60 if ((!ev->posted && !ev->active) 62 ngx_event_t *ev, **ep;
61 || (ev->use_instance && ev->instance != ev->returned_instance))
62 {
63 /*
64 * the stale event from a file descriptor
65 * that was just closed in this iteration
66 */
67 63
68 ngx_log_debug1(NGX_LOG_DEBUG_EVENT, ev->log, 0, 64 for ( ;; ) {
69 "kevent: stale event " PTR_FMT, ev); 65
70 return; 66 ev = (ngx_event_t *) ngx_posted_events;
67 ep = (ngx_event_t **) &ngx_posted_events;
68
69 for ( ;; ) {
70
71 ngx_log_debug1(NGX_LOG_DEBUG_EVENT, cycle->log, 0,
72 "posted event " PTR_FMT, ev);
73
74 if (ev == NULL) {
75 ngx_mutex_unlock(ngx_posted_events_mutex);
76 return NGX_OK;
77 }
78
79 if (ngx_trylock(ev->lock) == NGX_BUSY) {
80
81 ngx_log_debug1(NGX_LOG_DEBUG_EVENT, cycle->log, 0,
82 "posted event " PTR_FMT " is busy", ev);
83
84 ep = &ev->next;
85 ev = ev->next;
86 continue;
87 }
88
89 *ep = ev->next;
90
91 if ((!ev->posted && !ev->active)
92 || (ev->use_instance && ev->instance != ev->returned_instance))
93 {
94 /*
95 * the stale event from a file descriptor
96 * that was just closed in this iteration
97 */
98
99 ngx_log_debug1(NGX_LOG_DEBUG_EVENT, ev->log, 0,
100 "kevent: stale event " PTR_FMT, ev);
101
102 ev = ev->next;
103
104 continue;
105 }
106
107 ngx_mutex_unlock(ngx_posted_events_mutex);
108
109 if (ev->posted) {
110 ev->posted = 0;
111 }
112
113 ev->event_handler(ev);
114
115 *(ev->lock) = 0;
116
117 if (ngx_mutex_lock(ngx_posted_events_mutex) == NGX_ERROR) {
118 return NGX_ERROR;
119 }
120
121 break;
122 }
71 } 123 }
72
73 if (ev->posted) {
74 ev->posted = 0;
75 }
76
77 ev->event_handler(ev);
78 } 124 }
79 125
80 #endif 126 #endif