aboutsummaryrefslogtreecommitdiff
path: root/src/event/ngx_event_posted.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/event/ngx_event_posted.c')
-rw-r--r--src/event/ngx_event_posted.c75
1 files changed, 28 insertions, 47 deletions
diff --git a/src/event/ngx_event_posted.c b/src/event/ngx_event_posted.c
index 71853edf4..41be0406f 100644
--- a/src/event/ngx_event_posted.c
+++ b/src/event/ngx_event_posted.c
@@ -28,27 +28,6 @@ void ngx_event_process_posted(ngx_cycle_t *cycle)
ngx_delete_posted_event(ev);
-#if 0
- /* do not check instance ??? */
-
- if (ev->accept) {
- continue;
- }
-#endif
-
- if (ev->closed
- || (ev->use_instance && ev->instance != ev->returned_instance))
- {
- /*
- * the stale event from a file descriptor
- * that was just closed in this iteration
- */
-
- ngx_log_debug1(NGX_LOG_DEBUG_EVENT, cycle->log, 0,
- "stale posted event " PTR_FMT, ev);
- continue;
- }
-
ev->event_handler(ev);
}
}
@@ -58,7 +37,30 @@ void ngx_event_process_posted(ngx_cycle_t *cycle)
void ngx_wakeup_worker_thread(ngx_cycle_t *cycle)
{
- ngx_int_t i;
+ ngx_int_t i;
+ ngx_uint_t busy;
+ ngx_event_t *ev;
+
+#if 0
+ busy = 1;
+
+ if (ngx_mutex_lock(ngx_posted_events_mutex) == NGX_ERROR) {
+ return;
+ }
+
+ for (ev = (ngx_event_t *) ngx_posted_events; ev; ev = ev->next) {
+ if (*(ev->lock) == 0) {
+ busy = 0;
+ break;
+ }
+ }
+
+ ngx_mutex_unlock(ngx_posted_events_mutex);
+
+ if (busy) {
+ return;
+ }
+#endif
for (i = 0; i < ngx_threads_n; i++) {
if (ngx_threads[i].state == NGX_THREAD_FREE) {
@@ -97,46 +99,25 @@ ngx_int_t ngx_event_thread_process_posted(ngx_cycle_t *cycle)
ngx_delete_posted_event(ev);
- ngx_log_debug3(NGX_LOG_DEBUG_EVENT, cycle->log, 0,
- "event instance: c:%d i:%d r:%d",
- ev->closed, ev->instance, ev->returned_instance);
-
- if (ev->closed
- || (ev->use_instance && ev->instance != ev->returned_instance))
- {
- /*
- * The stale event from a file descriptor that was just
- * closed in this iteration. We use ngx_cycle->log
- * because ev->log may be already destoyed.
- */
-
- ngx_log_debug1(NGX_LOG_DEBUG_EVENT, ngx_cycle->log, 0,
- "stale posted event " PTR_FMT, ev);
-
- ngx_unlock(ev->lock);
-
- ev = ev->next;
-
- continue;
- }
-
ev->locked = 1;
ev->ready |= ev->posted_ready;
ev->timedout |= ev->posted_timedout;
- ev->available |= ev->posted_available;
ev->pending_eof |= ev->posted_eof;
#if (HAVE_KQUEUE)
ev->kq_errno |= ev->posted_errno;
#endif
+ if (ev->posted_available) {
+ ev->available = ev->posted_available;
+ }
ev->posted_ready = 0;
ev->posted_timedout = 0;
- ev->posted_available = 0;
ev->posted_eof = 0;
#if (HAVE_KQUEUE)
ev->posted_errno = 0;
#endif
+ ev->posted_available = 0;
ngx_mutex_unlock(ngx_posted_events_mutex);