From 5edf387f199efe5b67b2b81a00bc8404bea8365b Mon Sep 17 00:00:00 2001 From: Igor Sysoev Date: Wed, 3 Mar 2004 16:14:15 +0000 Subject: [PATCH] nginx-0.0.2-2004-03-03-19:14:15 import --- src/core/ngx_log.h | 71 ++++++--------------------------- src/event/ngx_event_busy_lock.c | 55 ++++--------------------- src/event/ngx_event_busy_lock.h | 1 + src/http/ngx_http_cache.c | 16 ++++++-- src/os/unix/ngx_thread.h | 2 +- 5 files changed, 34 insertions(+), 111 deletions(-) diff --git a/src/core/ngx_log.h b/src/core/ngx_log.h index 46fbf12ce..375acae73 100644 --- a/src/core/ngx_log.h +++ b/src/core/ngx_log.h @@ -126,131 +126,86 @@ void ngx_assert_core(ngx_log_t *log, const char *fmt, ...); /*********************************/ +#if (NGX_DEBUG) + #if (HAVE_VARIADIC_MACROS) -#if (NGX_DEBUG) #define ngx_log_debug0(level, log, err, fmt) \ if (log->log_level & level) \ ngx_log_error_core(NGX_LOG_DEBUG, log, err, fmt) -#else -#define ngx_log_debug0(level, log, err, fmt) -#endif -#if (NGX_DEBUG) #define ngx_log_debug1(level, log, err, fmt, arg1) \ if (log->log_level & level) \ ngx_log_error_core(NGX_LOG_DEBUG, log, err, fmt, arg1) -#else -#define ngx_log_debug1(level, log, err, fmt, arg1) -#endif -#if (NGX_DEBUG) #define ngx_log_debug2(level, log, err, fmt, arg1, arg2) \ if (log->log_level & level) \ ngx_log_error_core(NGX_LOG_DEBUG, log, err, fmt, arg1, arg2) -#else -#define ngx_log_debug2(level, log, err, fmt, arg1, arg2) -#endif -#if (NGX_DEBUG) #define ngx_log_debug3(level, log, err, fmt, arg1, arg2, arg3) \ if (log->log_level & level) \ ngx_log_error_core(NGX_LOG_DEBUG, log, err, fmt, arg1, arg2, arg3) -#else -#define ngx_log_debug3(level, log, err, fmt, arg1, arg2, arg3) -#endif -#if (NGX_DEBUG) #define ngx_log_debug4(level, log, err, fmt, arg1, arg2, arg3, arg4) \ if (log->log_level & level) \ ngx_log_error_core(NGX_LOG_DEBUG, log, err, fmt, arg1, arg2, arg3, arg4) -#else -#define ngx_log_debug4(level, log, err, fmt, arg1, arg2, arg3, arg4) -#endif -#if (NGX_DEBUG) #define ngx_log_debug5(level, log, err, fmt, arg1, arg2, arg3, arg4, arg5) \ if (log->log_level & level) \ ngx_log_error_core(NGX_LOG_DEBUG, log, err, fmt, \ arg1, arg2, arg3, arg4, arg5) -#else -#define ngx_log_debug5(level, log, err, fmt, arg1, arg2, arg3, arg4, arg5) -#endif -#if (NGX_DEBUG) #define ngx_log_debug6(level, log, err, fmt, \ arg1, arg2, arg3, arg4, arg5, arg6) \ if (log->log_level & level) \ ngx_log_error_core(NGX_LOG_DEBUG, log, err, fmt, \ arg1, arg2, arg3, arg4, arg5, arg6) -#else -#define ngx_log_debug6(level, log, err, fmt, arg1, arg2, arg3, arg4, arg5, arg6) -#endif - -/*********************************/ #else /* NO VARIADIC MACROS */ -#if (NGX_DEBUG) #define ngx_log_debug0(level, log, err, fmt) \ if (log->log_level & level) \ ngx_log_debug_core(log, err, fmt) -#else -#define ngx_log_debug0(level, log, err, fmt) -#endif -#if (NGX_DEBUG) #define ngx_log_debug1(level, log, err, fmt, arg1) \ if (log->log_level & level) \ ngx_log_debug_core(log, err, fmt, arg1) -#else -#define ngx_log_debug1(level, log, err, fmt, arg1) -#endif -#if (NGX_DEBUG) #define ngx_log_debug2(level, log, err, fmt, arg1, arg2) \ if (log->log_level & level) \ ngx_log_debug_core(log, err, fmt, arg1, arg2) -#else -#define ngx_log_debug2(level, log, err, fmt, arg1, arg2) -#endif -#if (NGX_DEBUG) #define ngx_log_debug3(level, log, err, fmt, arg1, arg2, arg3) \ if (log->log_level & level) \ ngx_log_debug_core(log, err, fmt, arg1, arg2, arg3) -#else -#define ngx_log_debug3(level, log, err, fmt, arg1, arg2, arg3) -#endif -#if (NGX_DEBUG) #define ngx_log_debug4(level, log, err, fmt, arg1, arg2, arg3, arg4) \ if (log->log_level & level) \ ngx_log_debug_core(log, err, fmt, arg1, arg2, arg3, arg4) -#else -#define ngx_log_debug4(level, log, err, fmt, arg1, arg2, arg3, arg4) -#endif -#if (NGX_DEBUG) #define ngx_log_debug5(level, log, err, fmt, arg1, arg2, arg3, arg4, arg5) \ if (log->log_level & level) \ ngx_log_debug_core(log, err, fmt, arg1, arg2, arg3, arg4, arg5) -#else -#define ngx_log_debug5(level, log, err, fmt, arg1, arg2, arg3, arg4, arg5) -#endif -#if (NGX_DEBUG) #define ngx_log_debug6(level, log, err, fmt, \ arg1, arg2, arg3, arg4, arg5, arg6) \ if (log->log_level & level) \ ngx_log_debug_core(log, err, fmt, arg1, arg2, arg3, arg4, arg5, arg6) -#else + +#endif + +#else /* NO NGX_DEBUG */ + +#define ngx_log_debug0(level, log, err, fmt) +#define ngx_log_debug1(level, log, err, fmt, arg1) +#define ngx_log_debug2(level, log, err, fmt, arg1, arg2) +#define ngx_log_debug3(level, log, err, fmt, arg1, arg2, arg3) +#define ngx_log_debug4(level, log, err, fmt, arg1, arg2, arg3, arg4) +#define ngx_log_debug5(level, log, err, fmt, arg1, arg2, arg3, arg4, arg5) #define ngx_log_debug6(level, log, err, fmt, arg1, arg2, arg3, arg4, arg5, arg6) -#endif #endif - /*********************************/ #define ngx_log_alloc_log(pool, log) ngx_palloc(pool, log, sizeof(ngx_log_t)) diff --git a/src/event/ngx_event_busy_lock.c b/src/event/ngx_event_busy_lock.c index e040ad243..f2244264d 100644 --- a/src/event/ngx_event_busy_lock.c +++ b/src/event/ngx_event_busy_lock.c @@ -3,12 +3,6 @@ #include #include -/* - * 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 ngx_event_busy_lock(ngx_event_busy_lock_t *bl, { 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 @@ ngx_int_t ngx_event_busy_lock(ngx_event_busy_lock_t *bl, rc = NGX_BUSY; } -#if (NGX_THREADS) ngx_mutex_unlock(bl->mutex); -#endif return rc; } @@ -73,11 +63,9 @@ ngx_int_t ngx_event_busy_lock_cachable(ngx_event_busy_lock_t *bl, { 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 @@ ngx_int_t ngx_event_busy_lock_cachable(ngx_event_busy_lock_t *bl, } } -#if (NGX_THREADS) ngx_mutex_unlock(bl->mutex); -#endif return rc; } @@ -124,11 +110,9 @@ ngx_int_t ngx_event_busy_unlock(ngx_event_busy_lock_t *bl, 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 @@ ngx_int_t ngx_event_busy_unlock(ngx_event_busy_lock_t *bl, } /* - * 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_int_t ngx_event_busy_unlock(ngx_event_busy_lock_t *bl, 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_int_t ngx_event_busy_lock_cancel(ngx_event_busy_lock_t *bl, { 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 @@ ngx_int_t ngx_event_busy_lock_cancel(ngx_event_busy_lock_t *bl, } } -#if (NGX_THREADS) ngx_mutex_unlock(bl->mutex); -#endif return NGX_OK; } @@ -276,6 +237,8 @@ static int ngx_event_busy_lock_look_cachable(ngx_event_busy_lock_t *bl, 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 int ngx_event_busy_lock_look_cachable(ngx_event_busy_lock_t *bl, 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; } diff --git a/src/event/ngx_event_busy_lock.h b/src/event/ngx_event_busy_lock.h index 061da65a9..3862c6f01 100644 --- a/src/event/ngx_event_busy_lock.h +++ b/src/event/ngx_event_busy_lock.h @@ -15,6 +15,7 @@ struct ngx_event_busy_lock_ctx_s { ngx_msec_t timer; unsigned locked:1; + unsigned waiting:1; unsigned cache_updated:1; char *md5; diff --git a/src/http/ngx_http_cache.c b/src/http/ngx_http_cache.c index 83d798258..479caeae9 100644 --- a/src/http/ngx_http_cache.c +++ b/src/http/ngx_http_cache.c @@ -40,7 +40,9 @@ ngx_http_cache_t *ngx_http_cache_get(ngx_http_cache_hash_t *hash, c = hash->elts + *crc % hash->hash * hash->nelts; - ngx_mutex_lock(&hash->mutex); + if (ngx_mutex_lock(&hash->mutex) == NGX_ERROR) { + return (void *) NGX_ERROR; + } for (i = 0; i < hash->nelts; i++) { if (c[i].crc == *crc @@ -95,7 +97,9 @@ ngx_http_cache_t *ngx_http_cache_alloc(ngx_http_cache_hash_t *hash, c = hash->elts + crc % hash->hash * hash->nelts; - ngx_mutex_lock(&hash->mutex); + if (ngx_mutex_lock(&hash->mutex) == NGX_ERROR) { + return (void *) NGX_ERROR; + } if (cache == NULL) { @@ -227,14 +231,18 @@ void ngx_http_cache_free(ngx_http_cache_t *cache, void ngx_http_cache_lock(ngx_http_cache_hash_t *hash, ngx_http_cache_t *cache) { - ngx_mutex_lock(&hash->mutex); + if (ngx_mutex_lock(&hash->mutex) == NGX_ERROR) { + return; + } } void ngx_http_cache_unlock(ngx_http_cache_hash_t *hash, ngx_http_cache_t *cache, ngx_log_t *log) { - ngx_mutex_lock(&hash->mutex); + if (ngx_mutex_lock(&hash->mutex) == NGX_ERROR) { + return; + } cache->refs--; diff --git a/src/os/unix/ngx_thread.h b/src/os/unix/ngx_thread.h index 0b065d8ec..a85750d47 100644 --- a/src/os/unix/ngx_thread.h +++ b/src/os/unix/ngx_thread.h @@ -103,7 +103,7 @@ extern ngx_int_t ngx_threaded; #define ngx_log_tid 0 #define TID_T_FMT "%d" -#define ngx_mutex_lock(m) +#define ngx_mutex_lock(m) NGX_OK #define ngx_mutex_unlock(m) #endif