summaryrefslogtreecommitdiffhomepage
path: root/src/event
diff options
context:
space:
mode:
authorRuslan Ermilov <ru@nginx.com>2015-03-20 06:45:32 +0300
committerRuslan Ermilov <ru@nginx.com>2015-03-20 06:45:32 +0300
commitbabd64e344331ec4751dcb191eb4e847e3b36a4a (patch)
tree2cca995413d2fd21804f4b1c4b7ff2fb231c0887 /src/event
parentf8d10849adcac3cbae03aa520660e7b80433bb7a (diff)
downloadnginx-babd64e344331ec4751dcb191eb4e847e3b36a4a.tar.gz
nginx-babd64e344331ec4751dcb191eb4e847e3b36a4a.tar.bz2
Removed busy locks.
Diffstat (limited to 'src/event')
-rw-r--r--src/event/ngx_event.h9
-rw-r--r--src/event/ngx_event_busy_lock.c286
-rw-r--r--src/event/ngx_event_busy_lock.h65
-rw-r--r--src/event/ngx_event_mutex.c70
4 files changed, 0 insertions, 430 deletions
diff --git a/src/event/ngx_event.h b/src/event/ngx_event.h
index fbd91fb0d..b7009a3d3 100644
--- a/src/event/ngx_event.h
+++ b/src/event/ngx_event.h
@@ -27,14 +27,6 @@ typedef struct {
#endif
-typedef struct {
- ngx_uint_t lock;
-
- ngx_event_t *events;
- ngx_event_t *last;
-} ngx_event_mutex_t;
-
-
struct ngx_event_s {
void *data;
@@ -533,7 +525,6 @@ ngx_int_t ngx_send_lowat(ngx_connection_t *c, size_t lowat);
#include <ngx_event_timer.h>
#include <ngx_event_posted.h>
-#include <ngx_event_busy_lock.h>
#if (NGX_WIN32)
#include <ngx_iocp_module.h>
diff --git a/src/event/ngx_event_busy_lock.c b/src/event/ngx_event_busy_lock.c
deleted file mode 100644
index fdac0da8f..000000000
--- a/src/event/ngx_event_busy_lock.c
+++ /dev/null
@@ -1,286 +0,0 @@
-
-/*
- * Copyright (C) Igor Sysoev
- * Copyright (C) Nginx, Inc.
- */
-
-
-#include <ngx_config.h>
-#include <ngx_core.h>
-#include <ngx_event.h>
-
-
-static ngx_int_t ngx_event_busy_lock_look_cacheable(ngx_event_busy_lock_t *bl,
- ngx_event_busy_lock_ctx_t *ctx);
-static void ngx_event_busy_lock_handler(ngx_event_t *ev);
-static void ngx_event_busy_lock_posted_handler(ngx_event_t *ev);
-
-
-/*
- * NGX_OK: the busy lock is held
- * NGX_AGAIN: the all busy locks are held but we will wait the specified time
- * NGX_BUSY: ctx->timer == 0: there are many the busy locks
- * ctx->timer != 0: there are many the waiting locks
- */
-
-ngx_int_t
-ngx_event_busy_lock(ngx_event_busy_lock_t *bl, ngx_event_busy_lock_ctx_t *ctx)
-{
- ngx_int_t rc;
-
- ngx_mutex_lock(bl->mutex);
-
- ngx_log_debug2(NGX_LOG_DEBUG_EVENT, ctx->event->log, 0,
- "event busy lock: b:%d mb:%d",
- bl->busy, bl->max_busy);
-
- if (bl->busy < bl->max_busy) {
- bl->busy++;
-
- rc = NGX_OK;
-
- } else if (ctx->timer && bl->waiting < bl->max_waiting) {
- bl->waiting++;
- ngx_add_timer(ctx->event, ctx->timer);
- ctx->event->handler = ngx_event_busy_lock_handler;
-
- if (bl->events) {
- bl->last->next = ctx;
-
- } else {
- bl->events = ctx;
- }
-
- bl->last = ctx;
-
- rc = NGX_AGAIN;
-
- } else {
- rc = NGX_BUSY;
- }
-
- ngx_mutex_unlock(bl->mutex);
-
- return rc;
-}
-
-
-ngx_int_t
-ngx_event_busy_lock_cacheable(ngx_event_busy_lock_t *bl,
- ngx_event_busy_lock_ctx_t *ctx)
-{
- ngx_int_t rc;
-
- ngx_mutex_lock(bl->mutex);
-
- rc = ngx_event_busy_lock_look_cacheable(bl, ctx);
-
- ngx_log_debug3(NGX_LOG_DEBUG_EVENT, ctx->event->log, 0,
- "event busy lock: %d w:%d mw:%d",
- rc, bl->waiting, bl->max_waiting);
-
- /*
- * NGX_OK: no the same request, there is free slot and we locked it
- * NGX_BUSY: no the same request and there is no free slot
- * NGX_AGAIN: the same request is processing
- */
-
- if (rc == NGX_AGAIN) {
-
- if (ctx->timer && bl->waiting < bl->max_waiting) {
- bl->waiting++;
- ngx_add_timer(ctx->event, ctx->timer);
- ctx->event->handler = ngx_event_busy_lock_handler;
-
- if (bl->events == NULL) {
- bl->events = ctx;
- } else {
- bl->last->next = ctx;
- }
- bl->last = ctx;
-
- } else {
- rc = NGX_BUSY;
- }
- }
-
- ngx_mutex_unlock(bl->mutex);
-
- return rc;
-}
-
-
-void
-ngx_event_busy_unlock(ngx_event_busy_lock_t *bl,
- ngx_event_busy_lock_ctx_t *ctx)
-{
- ngx_event_t *ev;
- ngx_event_busy_lock_ctx_t *wakeup;
-
- ngx_mutex_lock(bl->mutex);
-
- if (bl->events) {
- wakeup = bl->events;
- bl->events = bl->events->next;
-
- } else {
- wakeup = NULL;
- bl->busy--;
- }
-
- /*
- * MP: all ctx's and their queue must be in shared memory,
- * each ctx has pid to wake up
- */
-
- if (wakeup == NULL) {
- ngx_mutex_unlock(bl->mutex);
- return;
- }
-
- if (ctx->md5) {
- for (wakeup = bl->events; wakeup; wakeup = wakeup->next) {
- if (wakeup->md5 == NULL || wakeup->slot != ctx->slot) {
- continue;
- }
-
- wakeup->handler = ngx_event_busy_lock_posted_handler;
- wakeup->cache_updated = 1;
-
- ev = wakeup->event;
-
- ngx_post_event(ev, &ngx_posted_events);
- }
-
- ngx_mutex_unlock(bl->mutex);
-
- } else {
- bl->waiting--;
-
- ngx_mutex_unlock(bl->mutex);
-
- wakeup->handler = ngx_event_busy_lock_posted_handler;
- wakeup->locked = 1;
-
- ev = wakeup->event;
-
- if (ev->timer_set) {
- ngx_del_timer(ev);
- }
-
- ngx_post_event(ev, &ngx_posted_events);
- }
-}
-
-
-void
-ngx_event_busy_lock_cancel(ngx_event_busy_lock_t *bl,
- ngx_event_busy_lock_ctx_t *ctx)
-{
- ngx_event_busy_lock_ctx_t *c, *p;
-
- ngx_mutex_lock(bl->mutex);
-
- bl->waiting--;
-
- if (ctx == bl->events) {
- bl->events = ctx->next;
-
- } else {
- p = bl->events;
- for (c = bl->events->next; c; c = c->next) {
- if (c == ctx) {
- p->next = ctx->next;
- break;
- }
- p = c;
- }
- }
-
- ngx_mutex_unlock(bl->mutex);
-}
-
-
-static ngx_int_t
-ngx_event_busy_lock_look_cacheable(ngx_event_busy_lock_t *bl,
- ngx_event_busy_lock_ctx_t *ctx)
-{
- ngx_int_t free;
- ngx_uint_t i, bit, cacheable, mask;
-
- bit = 0;
- cacheable = 0;
- free = -1;
-
-#if (NGX_SUPPRESS_WARN)
- mask = 0;
-#endif
-
- for (i = 0; i < bl->max_busy; i++) {
-
- if ((bit & 7) == 0) {
- mask = bl->md5_mask[i / 8];
- }
-
- if (mask & 1) {
- if (ngx_memcmp(&bl->md5[i * 16], ctx->md5, 16) == 0) {
- ctx->waiting = 1;
- ctx->slot = i;
- return NGX_AGAIN;
- }
- cacheable++;
-
- } else if (free == -1) {
- free = i;
- }
-
- if (cacheable == bl->cacheable) {
- if (free == -1 && cacheable < bl->max_busy) {
- free = i + 1;
- }
-
- break;
- }
-
- mask >>= 1;
- bit++;
- }
-
- if (free == -1) {
- return NGX_BUSY;
- }
-
-#if 0
- if (bl->busy == bl->max_busy) {
- return NGX_BUSY;
- }
-#endif
-
- ngx_memcpy(&bl->md5[free * 16], ctx->md5, 16);
- bl->md5_mask[free / 8] |= 1 << (free & 7);
- ctx->slot = free;
-
- bl->cacheable++;
- bl->busy++;
-
- return NGX_OK;
-}
-
-
-static void
-ngx_event_busy_lock_handler(ngx_event_t *ev)
-{
- ev->handler = ngx_event_busy_lock_posted_handler;
-
- ngx_post_event(ev, &ngx_posted_events);
-}
-
-
-static void
-ngx_event_busy_lock_posted_handler(ngx_event_t *ev)
-{
- ngx_event_busy_lock_ctx_t *ctx;
-
- ctx = ev->data;
- ctx->handler(ev);
-}
diff --git a/src/event/ngx_event_busy_lock.h b/src/event/ngx_event_busy_lock.h
deleted file mode 100644
index a7e556cf6..000000000
--- a/src/event/ngx_event_busy_lock.h
+++ /dev/null
@@ -1,65 +0,0 @@
-
-/*
- * Copyright (C) Igor Sysoev
- * Copyright (C) Nginx, Inc.
- */
-
-
-#ifndef _NGX_EVENT_BUSY_LOCK_H_INCLUDED_
-#define _NGX_EVENT_BUSY_LOCK_H_INCLUDED_
-
-
-#include <ngx_config.h>
-#include <ngx_core.h>
-#include <ngx_event.h>
-
-typedef struct ngx_event_busy_lock_ctx_s ngx_event_busy_lock_ctx_t;
-
-struct ngx_event_busy_lock_ctx_s {
- ngx_event_t *event;
- ngx_event_handler_pt handler;
- void *data;
- ngx_msec_t timer;
-
- unsigned locked:1;
- unsigned waiting:1;
- unsigned cache_updated:1;
-
- char *md5;
- ngx_int_t slot;
-
- ngx_event_busy_lock_ctx_t *next;
-};
-
-
-typedef struct {
- u_char *md5_mask;
- char *md5;
- ngx_uint_t cacheable;
-
- ngx_uint_t busy;
- ngx_uint_t max_busy;
-
- ngx_uint_t waiting;
- ngx_uint_t max_waiting;
-
- ngx_event_busy_lock_ctx_t *events;
- ngx_event_busy_lock_ctx_t *last;
-
-#if (NGX_OLD_THREADS)
- ngx_mutex_t *mutex;
-#endif
-} ngx_event_busy_lock_t;
-
-
-ngx_int_t ngx_event_busy_lock(ngx_event_busy_lock_t *bl,
- ngx_event_busy_lock_ctx_t *ctx);
-ngx_int_t ngx_event_busy_lock_cacheable(ngx_event_busy_lock_t *bl,
- ngx_event_busy_lock_ctx_t *ctx);
-void ngx_event_busy_unlock(ngx_event_busy_lock_t *bl,
- ngx_event_busy_lock_ctx_t *ctx);
-void ngx_event_busy_lock_cancel(ngx_event_busy_lock_t *bl,
- ngx_event_busy_lock_ctx_t *ctx);
-
-
-#endif /* _NGX_EVENT_BUSY_LOCK_H_INCLUDED_ */
diff --git a/src/event/ngx_event_mutex.c b/src/event/ngx_event_mutex.c
deleted file mode 100644
index 66befe3b6..000000000
--- a/src/event/ngx_event_mutex.c
+++ /dev/null
@@ -1,70 +0,0 @@
-
-/*
- * Copyright (C) Igor Sysoev
- * Copyright (C) Nginx, Inc.
- */
-
-
-#include <ngx_config.h>
-#include <ngx_core.h>
-#include <ngx_event.h>
-
-
-ngx_int_t ngx_event_mutex_timedlock(ngx_event_mutex_t *m, ngx_msec_t timer,
- ngx_event_t *ev)
-{
- ngx_log_debug2(NGX_LOG_DEBUG_EVENT, ev->log, 0,
- "lock event mutex %p lock:%XD", m, m->lock);
-
- if (m->lock) {
-
- if (m->events == NULL) {
- m->events = ev;
-
- } else {
- m->last->next = ev;
- }
-
- m->last = ev;
- ev->next = NULL;
-
-#if (NGX_OLD_THREADS0)
- ev->light = 1;
-#endif
-
- ngx_add_timer(ev, timer);
-
- return NGX_AGAIN;
- }
-
- m->lock = 1;
-
- return NGX_OK;
-}
-
-
-ngx_int_t ngx_event_mutex_unlock(ngx_event_mutex_t *m, ngx_log_t *log)
-{
- ngx_event_t *ev;
-
- if (m->lock == 0) {
- ngx_log_error(NGX_LOG_ALERT, log, 0,
- "tring to unlock the free event mutex %p", m);
- return NGX_ERROR;
- }
-
- ngx_log_debug2(NGX_LOG_DEBUG_EVENT, log, 0,
- "unlock event mutex %p, next event: %p", m, m->events);
-
- m->lock = 0;
-
- if (m->events) {
- ev = m->events;
- m->events = ev->next;
-
- ev->next = ngx_posted_events;
- ngx_posted_events = ev;
- }
-
- return NGX_OK;
-}