Mercurial > hg > nginx
diff src/event/ngx_event_busy_lock.c @ 277:e91499541410
nginx-0.0.2-2004-03-03-19:14:15 import
author | Igor Sysoev <igor@sysoev.ru> |
---|---|
date | Wed, 03 Mar 2004 16:14:15 +0000 |
parents | a2d1ccc96111 |
children | ee394e997c77 |
line wrap: on
line diff
--- a/src/event/ngx_event_busy_lock.c Tue Mar 02 21:14:37 2004 +0000 +++ b/src/event/ngx_event_busy_lock.c Wed Mar 03 16:14:15 2004 +0000 @@ -3,12 +3,6 @@ #include <ngx_core.h> #include <ngx_event.h> -/* - * TODO: eliminate mutex and use atomic_xchg(): - * ev->next = ev; ngx_atomic_xchg(ngx_posted_events, ev->next); - * in ngx_event_busy_unlock() and ngx_event_busy_lock_handler() - */ - static int ngx_event_busy_lock_look_cachable(ngx_event_busy_lock_t *bl, ngx_event_busy_lock_ctx_t *ctx); @@ -28,11 +22,9 @@ { ngx_int_t rc; -#if (NGX_THREADS) if (ngx_mutex_lock(bl->mutex) == NGX_ERROR) { return NGX_ERROR; } -#endif ngx_log_debug2(NGX_LOG_DEBUG_EVENT, ctx->event->log, 0, "event busy lock: b:%d mb:%d", @@ -60,9 +52,7 @@ rc = NGX_BUSY; } -#if (NGX_THREADS) ngx_mutex_unlock(bl->mutex); -#endif return rc; } @@ -73,11 +63,9 @@ { ngx_int_t rc; -#if (NGX_THREADS) if (ngx_mutex_lock(bl->mutex) == NGX_ERROR) { return NGX_ERROR; } -#endif rc = ngx_event_busy_lock_look_cachable(bl, ctx); @@ -110,9 +98,7 @@ } } -#if (NGX_THREADS) ngx_mutex_unlock(bl->mutex); -#endif return rc; } @@ -124,11 +110,9 @@ ngx_event_t *ev; ngx_event_busy_lock_ctx_t *wakeup; -#if (NGX_THREADS) if (ngx_mutex_lock(bl->mutex) == NGX_ERROR) { return NGX_ERROR; } -#endif if (bl->events) { wakeup = bl->events; @@ -140,57 +124,42 @@ } /* - * MP: - * nocachable (bl->md5 == NULL): ngx_shared_mutex_unlock(mutex, !wakeup) - * cachable (bl->md5): ??? + * MP: all ctx's and their queue must be in shared memory, + * each ctx has pid to wake up */ if (wakeup == NULL) { -#if (NGX_THREADS) ngx_mutex_unlock(bl->mutex); -#endif return NGX_OK; } if (ctx->md5) { for (wakeup = bl->events; wakeup; wakeup = wakeup->next) { - if (wakeup->md5 == NULL) { + if (wakeup->md5 == NULL || wakeup->slot != ctx->slot) { continue; } - if (ngx_memcmp(ctx->md5, wakeup->md5, 16) != 0) { - continue; - } - wakeup->handler = ngx_event_busy_lock_posted_handler; wakeup->cache_updated = 1; ev = wakeup->event; -#if (NGX_THREADS) if (ngx_mutex_lock(ngx_posted_events_mutex) == NGX_ERROR) { return NGX_ERROR; } -#endif ev->next = (ngx_event_t *) ngx_posted_events; ngx_posted_events = ev; -#if (NGX_THREADS) ngx_mutex_unlock(ngx_posted_events_mutex); -#endif } -#if (NGX_THREADS) ngx_mutex_unlock(bl->mutex); -#endif } else { bl->waiting--; -#if (NGX_THREADS) ngx_mutex_unlock(bl->mutex); -#endif wakeup->handler = ngx_event_busy_lock_posted_handler; wakeup->locked = 1; @@ -201,18 +170,14 @@ ngx_del_timer(ev); } -#if (NGX_THREADS) if (ngx_mutex_lock(ngx_posted_events_mutex) == NGX_ERROR) { return NGX_ERROR; } -#endif ev->next = (ngx_event_t *) ngx_posted_events; ngx_posted_events = ev; -#if (NGX_THREADS) ngx_mutex_unlock(ngx_posted_events_mutex); -#endif } return NGX_OK; @@ -224,11 +189,9 @@ { ngx_event_busy_lock_ctx_t *c, *p; -#if (NGX_THREADS) if (ngx_mutex_lock(bl->mutex) == NGX_ERROR) { return NGX_ERROR; } -#endif bl->waiting--; @@ -246,9 +209,7 @@ } } -#if (NGX_THREADS) ngx_mutex_unlock(bl->mutex); -#endif return NGX_OK; } @@ -276,6 +237,8 @@ if (mask & 1) { if (ngx_memcmp(&bl->md5[i * 16], ctx->md5, 16) == 0) { + ctx->waiting = 1; + ctx->slot = i; return NGX_AGAIN; } cachable++; @@ -319,20 +282,16 @@ static void ngx_event_busy_lock_handler(ngx_event_t *ev) { - ev->event_handler = ngx_event_busy_lock_posted_handler; - -#if (NGX_THREADS) if (ngx_mutex_lock(ngx_posted_events_mutex) == NGX_ERROR) { return; } -#endif ev->next = (ngx_event_t *) ngx_posted_events; ngx_posted_events = ev; -#if (NGX_THREADS) ngx_mutex_unlock(ngx_posted_events_mutex); -#endif + + ev->event_handler = ngx_event_busy_lock_posted_handler; }