# HG changeset patch # User Igor Sysoev # Date 1078330455 0 # Node ID e9149954141083396511d1f2570ca9c93e21739d # Parent a2d1ccc96111ea05963822899b15dff65aa8a2f1 nginx-0.0.2-2004-03-03-19:14:15 import diff --git a/src/core/ngx_log.h b/src/core/ngx_log.h --- a/src/core/ngx_log.h +++ b/src/core/ngx_log.h @@ -126,130 +126,85 @@ void ngx_assert_core(ngx_log_t *log, con /*********************************/ +#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 -#define ngx_log_debug6(level, log, err, fmt, arg1, arg2, arg3, arg4, arg5, arg6) -#endif #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 /*********************************/ diff --git a/src/event/ngx_event_busy_lock.c b/src/event/ngx_event_busy_lock.c --- 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_ { 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_ 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(n { 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(n } } -#if (NGX_THREADS) ngx_mutex_unlock(bl->mutex); -#endif return rc; } @@ -124,11 +110,9 @@ ngx_int_t ngx_event_busy_unlock(ngx_even 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_even } /* - * 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_even 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 { 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 } } -#if (NGX_THREADS) ngx_mutex_unlock(bl->mutex); -#endif return NGX_OK; } @@ -276,6 +237,8 @@ static int ngx_event_busy_lock_look_cach 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_cach 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 --- 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 --- 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 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(n 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_ 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 --- 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