comparison src/event/ngx_event_posted.c @ 375:744ccb59062d

nginx-0.0.7-2004-07-02-19:54:34 import
author Igor Sysoev <igor@sysoev.ru>
date Fri, 02 Jul 2004 15:54:34 +0000
parents 213f17e9f776
children d0451e402e27
comparison
equal deleted inserted replaced
374:213f17e9f776 375:744ccb59062d
25 25
26 if (ev == NULL) { 26 if (ev == NULL) {
27 return; 27 return;
28 } 28 }
29 29
30 ngx_posted_events = ev->next; 30 ngx_delete_posted_event(ev);
31
32 #if 0
33 /* do not check instance ??? */
31 34
32 if (ev->accept) { 35 if (ev->accept) {
33 continue; 36 continue;
34 } 37 }
38 #endif
35 39
36 if ((!ev->posted && !ev->active) 40 if (ev->closed
37 || (ev->use_instance && ev->instance != ev->returned_instance)) 41 || (ev->use_instance && ev->instance != ev->returned_instance))
38 { 42 {
39 /* 43 /*
40 * the stale event from a file descriptor 44 * the stale event from a file descriptor
41 * that was just closed in this iteration 45 * that was just closed in this iteration
44 ngx_log_debug1(NGX_LOG_DEBUG_EVENT, cycle->log, 0, 48 ngx_log_debug1(NGX_LOG_DEBUG_EVENT, cycle->log, 0,
45 "stale posted event " PTR_FMT, ev); 49 "stale posted event " PTR_FMT, ev);
46 continue; 50 continue;
47 } 51 }
48 52
49 if (ev->posted) {
50 ev->posted = 0;
51 }
52
53 ev->event_handler(ev); 53 ev->event_handler(ev);
54 } 54 }
55 } 55 }
56 56
57 57
58 #if (NGX_THREADS) 58 #if (NGX_THREADS)
59 59
60 ngx_int_t ngx_event_thread_process_posted(ngx_cycle_t *cycle) 60 ngx_int_t ngx_event_thread_process_posted(ngx_cycle_t *cycle)
61 { 61 {
62 ngx_event_t *ev, **ep; 62 ngx_event_t *ev;
63 63
64 for ( ;; ) { 64 for ( ;; ) {
65 65
66 ev = (ngx_event_t *) ngx_posted_events; 66 ev = (ngx_event_t *) ngx_posted_events;
67 ep = (ngx_event_t **) &ngx_posted_events;
68 67
69 for ( ;; ) { 68 for ( ;; ) {
70 69
71 ngx_log_debug1(NGX_LOG_DEBUG_EVENT, cycle->log, 0, 70 ngx_log_debug1(NGX_LOG_DEBUG_EVENT, cycle->log, 0,
72 "posted event " PTR_FMT, ev); 71 "posted event " PTR_FMT, ev);
74 if (ev == NULL) { 73 if (ev == NULL) {
75 ngx_mutex_unlock(ngx_posted_events_mutex); 74 ngx_mutex_unlock(ngx_posted_events_mutex);
76 return NGX_OK; 75 return NGX_OK;
77 } 76 }
78 77
79 ngx_log_debug2(NGX_LOG_DEBUG_EVENT, cycle->log, 0,
80 "posted event lock:%d " PTR_FMT,
81 *(ev->lock), ev->lock);
82
83 if (ngx_trylock(ev->lock) == 0) { 78 if (ngx_trylock(ev->lock) == 0) {
84 79
85 ngx_log_debug1(NGX_LOG_DEBUG_EVENT, cycle->log, 0, 80 ngx_log_debug1(NGX_LOG_DEBUG_EVENT, cycle->log, 0,
86 "posted event " PTR_FMT " is busy", ev); 81 "posted event " PTR_FMT " is busy", ev);
87 82
88 ep = &ev->next;
89 ev = ev->next; 83 ev = ev->next;
90 continue; 84 continue;
91 } 85 }
92 86
93 *ep = ev->next; 87 ngx_delete_posted_event(ev);
94 88
95 if ((!ev->posted && !ev->active) 89 ngx_log_debug3(NGX_LOG_DEBUG_EVENT, cycle->log, 0,
90 "event instance: c:%d i:%d r:%d",
91 ev->closed, ev->instance, ev->returned_instance);
92
93 if (ev->closed
96 || (ev->use_instance && ev->instance != ev->returned_instance)) 94 || (ev->use_instance && ev->instance != ev->returned_instance))
97 { 95 {
98 /* 96 /*
99 * The stale event from a file descriptor that was just 97 * The stale event from a file descriptor that was just
100 * closed in this iteration. We use ngx_cycle->log 98 * closed in this iteration. We use ngx_cycle->log
101 * because ev->log may be already destoyed. 99 * because ev->log may be already destoyed.
102 */ 100 */
103 101
104 ngx_log_debug1(NGX_LOG_DEBUG_EVENT, ngx_cycle->log, 0, 102 ngx_log_debug1(NGX_LOG_DEBUG_EVENT, ngx_cycle->log, 0,
105 "kevent: stale event " PTR_FMT, ev); 103 "stale posted event " PTR_FMT, ev);
106 104
107 ngx_unlock(ev->lock); 105 ngx_unlock(ev->lock);
108 106
109 ev = ev->next; 107 ev = ev->next;
110 108
111 continue; 109 continue;
112 } 110 }
113 111
114 ev->locked = 1; 112 ev->locked = 1;
115 113
116 if (ev->posted) { 114 ev->ready |= ev->posted_ready;
117 ev->ready = ev->posted_ready; 115 ev->timedout |= ev->posted_timedout;
118 ev->timedout = ev->posted_timedout; 116 ev->available |= ev->posted_available;
119 ev->available = ev->posted_available; 117 ev->pending_eof |= ev->posted_eof;
120 ev->kq_eof = ev->posted_eof;
121 #if (HAVE_KQUEUE) 118 #if (HAVE_KQUEUE)
122 ev->kq_errno = ev->posted_errno; 119 ev->kq_errno |= ev->posted_errno;
123 #endif 120 #endif
124 ev->posted = 0; 121
125 } 122 ev->posted_ready = 0;
123 ev->posted_timedout = 0;
124 ev->posted_available = 0;
125 ev->posted_eof = 0;
126 #if (HAVE_KQUEUE)
127 ev->posted_errno = 0;
128 #endif
126 129
127 ngx_mutex_unlock(ngx_posted_events_mutex); 130 ngx_mutex_unlock(ngx_posted_events_mutex);
128 131
129 ev->event_handler(ev); 132 ev->event_handler(ev);
130 133