comparison src/event/ngx_event_posted.c @ 374:213f17e9f776

nginx-0.0.7-2004-07-02-09:47:00 import
author Igor Sysoev <igor@sysoev.ru>
date Fri, 02 Jul 2004 05:47:00 +0000
parents 018569a8f09c
children 744ccb59062d
comparison
equal deleted inserted replaced
373:018569a8f09c 374:213f17e9f776
74 if (ev == NULL) { 74 if (ev == NULL) {
75 ngx_mutex_unlock(ngx_posted_events_mutex); 75 ngx_mutex_unlock(ngx_posted_events_mutex);
76 return NGX_OK; 76 return NGX_OK;
77 } 77 }
78 78
79 ngx_log_debug2(NGX_LOG_DEBUG_EVENT, cycle->log, 0,
80 "posted event lock:%d " PTR_FMT,
81 *(ev->lock), ev->lock);
82
79 if (ngx_trylock(ev->lock) == 0) { 83 if (ngx_trylock(ev->lock) == 0) {
80 84
81 ngx_log_debug1(NGX_LOG_DEBUG_EVENT, cycle->log, 0, 85 ngx_log_debug1(NGX_LOG_DEBUG_EVENT, cycle->log, 0,
82 "posted event " PTR_FMT " is busy", ev); 86 "posted event " PTR_FMT " is busy", ev);
83 87
105 ev = ev->next; 109 ev = ev->next;
106 110
107 continue; 111 continue;
108 } 112 }
109 113
110 ngx_mutex_unlock(ngx_posted_events_mutex); 114 ev->locked = 1;
111 115
112 if (ev->posted) { 116 if (ev->posted) {
117 ev->ready = ev->posted_ready;
118 ev->timedout = ev->posted_timedout;
119 ev->available = ev->posted_available;
120 ev->kq_eof = ev->posted_eof;
121 #if (HAVE_KQUEUE)
122 ev->kq_errno = ev->posted_errno;
123 #endif
113 ev->posted = 0; 124 ev->posted = 0;
114 if (!ev->timedout) {
115 ev->ready = 1;
116 }
117 } 125 }
126
127 ngx_mutex_unlock(ngx_posted_events_mutex);
118 128
119 ev->event_handler(ev); 129 ev->event_handler(ev);
120 130
121 ngx_unlock(ev->lock);
122
123 if (ngx_mutex_lock(ngx_posted_events_mutex) == NGX_ERROR) { 131 if (ngx_mutex_lock(ngx_posted_events_mutex) == NGX_ERROR) {
124 return NGX_ERROR; 132 return NGX_ERROR;
133 }
134
135 if (ev->locked) {
136 ngx_unlock(ev->lock);
125 } 137 }
126 138
127 break; 139 break;
128 } 140 }
129 } 141 }