aboutsummaryrefslogtreecommitdiff
path: root/src/event
diff options
context:
space:
mode:
Diffstat (limited to 'src/event')
-rw-r--r--src/event/modules/ngx_epoll_module.c1
-rw-r--r--src/event/modules/ngx_kqueue_module.c1
-rw-r--r--src/event/modules/ngx_rtsig_module.c7
-rw-r--r--src/event/ngx_event.h13
-rw-r--r--src/event/ngx_event_openssl.c9
-rw-r--r--src/event/ngx_event_timer.c62
-rw-r--r--src/event/ngx_event_timer.h27
7 files changed, 58 insertions, 62 deletions
diff --git a/src/event/modules/ngx_epoll_module.c b/src/event/modules/ngx_epoll_module.c
index 177c05da7..a53b8eb26 100644
--- a/src/event/modules/ngx_epoll_module.c
+++ b/src/event/modules/ngx_epoll_module.c
@@ -405,7 +405,6 @@ ngx_epoll_process_events(ngx_cycle_t *cycle)
if (timer == NGX_TIMER_INFINITE || timer > 500) {
timer = 500;
- break;
}
#endif
diff --git a/src/event/modules/ngx_kqueue_module.c b/src/event/modules/ngx_kqueue_module.c
index ee55915d6..99342ab1f 100644
--- a/src/event/modules/ngx_kqueue_module.c
+++ b/src/event/modules/ngx_kqueue_module.c
@@ -462,7 +462,6 @@ ngx_kqueue_process_events(ngx_cycle_t *cycle)
if (timer == NGX_TIMER_INFINITE || timer > 500) {
timer = 500;
- break;
}
#endif
diff --git a/src/event/modules/ngx_rtsig_module.c b/src/event/modules/ngx_rtsig_module.c
index fdbbb2fe4..f88dd5d6f 100644
--- a/src/event/modules/ngx_rtsig_module.c
+++ b/src/event/modules/ngx_rtsig_module.c
@@ -307,7 +307,6 @@ ngx_rtsig_process_events(ngx_cycle_t *cycle)
if (timer == NGX_TIMER_INFINITE || timer > 500) {
timer = 500;
- break;
}
#endif
@@ -578,7 +577,7 @@ ngx_rtsig_process_overflow(ngx_cycle_t *cycle)
c = cycle->files[overflow_current++];
- if (c->fd == -1) {
+ if (c == NULL || c->fd == -1) {
continue;
}
@@ -634,6 +633,10 @@ ngx_rtsig_process_overflow(ngx_cycle_t *cycle)
for (i = 0; i < n; i++) {
c = cycle->files[overflow_list[i].fd];
+ if (c == NULL) {
+ continue;
+ }
+
rev = c->read;
if (rev->active
diff --git a/src/event/ngx_event.h b/src/event/ngx_event.h
index 308d460c5..9d917ea7b 100644
--- a/src/event/ngx_event.h
+++ b/src/event/ngx_event.h
@@ -130,18 +130,7 @@ struct ngx_event_s {
ngx_log_t *log;
- /* TODO: threads: padding to cache line */
-
- /*
- * STUB: The inline of "ngx_rbtree_t rbtree;"
- */
-
- ngx_rbtree_key_t rbtree_key;
- void *rbtree_left;
- void *rbtree_right;
- void *rbtree_parent;
- char rbtree_color;
-
+ ngx_rbtree_node_t timer;
unsigned closed:1;
diff --git a/src/event/ngx_event_openssl.c b/src/event/ngx_event_openssl.c
index 49640faa6..48a03a17a 100644
--- a/src/event/ngx_event_openssl.c
+++ b/src/event/ngx_event_openssl.c
@@ -144,6 +144,10 @@ ngx_ssl_certificate(ngx_ssl_t *ssl, u_char *cert, u_char *key)
ngx_int_t
ngx_ssl_generate_rsa512_key(ngx_ssl_t *ssl)
{
+ if (SSL_CTX_need_tmp_RSA(ssl->ctx) == 0) {
+ return NGX_OK;
+ }
+
ssl->rsa512_key = RSA_generate_key(512, RSA_F4, NULL, NULL);
if (ssl->rsa512_key) {
@@ -851,7 +855,10 @@ ngx_ssl_cleanup_ctx(void *data)
{
ngx_ssl_t *ssl = data;
- RSA_free(ssl->rsa512_key);
+ if (ssl->rsa512_key) {
+ RSA_free(ssl->rsa512_key);
+ }
+
SSL_CTX_free(ssl->ctx);
}
diff --git a/src/event/ngx_event_timer.c b/src/event/ngx_event_timer.c
index c3d3c7ee8..656f62b15 100644
--- a/src/event/ngx_event_timer.c
+++ b/src/event/ngx_event_timer.c
@@ -14,27 +14,28 @@ ngx_mutex_t *ngx_event_timer_mutex;
#endif
-ngx_thread_volatile ngx_rbtree_t *ngx_event_timer_rbtree;
-ngx_rbtree_t ngx_event_timer_sentinel;
+ngx_thread_volatile ngx_rbtree_t ngx_event_timer_rbtree;
+static ngx_rbtree_node_t ngx_event_timer_sentinel;
ngx_int_t
ngx_event_timer_init(ngx_log_t *log)
{
- if (ngx_event_timer_rbtree) {
+ ngx_event_timer_rbtree.root = &ngx_event_timer_sentinel;
+ ngx_event_timer_rbtree.sentinel = &ngx_event_timer_sentinel;
+
#if (NGX_THREADS)
+
+ if (ngx_event_timer_mutex) {
ngx_event_timer_mutex->log = log;
-#endif
return NGX_OK;
}
- ngx_event_timer_rbtree = &ngx_event_timer_sentinel;
-
-#if (NGX_THREADS)
ngx_event_timer_mutex = ngx_mutex_init(log, 0);
if (ngx_event_timer_mutex == NULL) {
return NGX_ERROR;
}
+
#endif
return NGX_OK;
@@ -44,10 +45,10 @@ ngx_event_timer_init(ngx_log_t *log)
ngx_msec_t
ngx_event_find_timer(void)
{
- ngx_msec_t timer;
- ngx_rbtree_t *node;
+ ngx_rbtree_key_int_t timer;
+ ngx_rbtree_node_t *node, *root, *sentinel;
- if (ngx_event_timer_rbtree == &ngx_event_timer_sentinel) {
+ if (ngx_event_timer_rbtree.root == &ngx_event_timer_sentinel) {
return NGX_TIMER_INFINITE;
}
@@ -55,35 +56,41 @@ ngx_event_find_timer(void)
return NGX_TIMER_ERROR;
}
- node = ngx_rbtree_min((ngx_rbtree_t *) ngx_event_timer_rbtree,
- &ngx_event_timer_sentinel);
+ root = ngx_event_timer_rbtree.root;
+ sentinel = ngx_event_timer_rbtree.sentinel;
+
+ node = ngx_rbtree_min(root, sentinel);
ngx_mutex_unlock(ngx_event_timer_mutex);
- timer = (ngx_msec_t) node->key - ngx_current_time;
+ timer = (ngx_rbtree_key_int_t) node->key
+ - (ngx_rbtree_key_int_t) ngx_current_time;
- return timer > 0 ? timer : 0 ;
+ return (ngx_msec_t) (timer > 0 ? timer : 0);
}
void
ngx_event_expire_timers(void)
{
- ngx_event_t *ev;
- ngx_rbtree_t *node;
+ ngx_event_t *ev;
+ ngx_rbtree_node_t *node, *root, *sentinel;
+
+ sentinel = ngx_event_timer_rbtree.sentinel;
for ( ;; ) {
- if (ngx_event_timer_rbtree == &ngx_event_timer_sentinel) {
+ if (ngx_mutex_lock(ngx_event_timer_mutex) == NGX_ERROR) {
return;
}
- if (ngx_mutex_lock(ngx_event_timer_mutex) == NGX_ERROR) {
+ root = ngx_event_timer_rbtree.root;
+
+ if (root == sentinel) {
return;
}
- node = ngx_rbtree_min((ngx_rbtree_t *) ngx_event_timer_rbtree,
- &ngx_event_timer_sentinel);
+ node = ngx_rbtree_min(root, sentinel);
/* node->key <= ngx_current_time */
@@ -91,8 +98,7 @@ ngx_event_expire_timers(void)
- (ngx_rbtree_key_int_t) ngx_current_time
<= 0)
{
- ev = (ngx_event_t *)
- ((char *) node - offsetof(ngx_event_t, rbtree_key));
+ ev = (ngx_event_t *) ((char *) node - offsetof(ngx_event_t, timer));
#if (NGX_THREADS)
@@ -114,18 +120,16 @@ ngx_event_expire_timers(void)
ngx_log_debug2(NGX_LOG_DEBUG_EVENT, ev->log, 0,
"event timer del: %d: %M",
- ngx_event_ident(ev->data), ev->rbtree_key);
+ ngx_event_ident(ev->data), ev->timer.key);
- ngx_rbtree_delete((ngx_rbtree_t **) &ngx_event_timer_rbtree,
- &ngx_event_timer_sentinel,
- (ngx_rbtree_t *) &ev->rbtree_key);
+ ngx_rbtree_delete(&ngx_event_timer_rbtree, &ev->timer);
ngx_mutex_unlock(ngx_event_timer_mutex);
#if (NGX_DEBUG)
- ev->rbtree_left = NULL;
- ev->rbtree_right = NULL;
- ev->rbtree_parent = NULL;
+ ev->timer.left = NULL;
+ ev->timer.right = NULL;
+ ev->timer.parent = NULL;
#endif
ev->timer_set = 0;
diff --git a/src/event/ngx_event_timer.h b/src/event/ngx_event_timer.h
index a9d3176c1..13b5c0a39 100644
--- a/src/event/ngx_event_timer.h
+++ b/src/event/ngx_event_timer.h
@@ -29,8 +29,7 @@ extern ngx_mutex_t *ngx_event_timer_mutex;
#endif
-extern ngx_thread_volatile ngx_rbtree_t *ngx_event_timer_rbtree;
-extern ngx_rbtree_t ngx_event_timer_sentinel;
+extern ngx_thread_volatile ngx_rbtree_t ngx_event_timer_rbtree;
static ngx_inline void
@@ -38,22 +37,20 @@ ngx_event_del_timer(ngx_event_t *ev)
{
ngx_log_debug2(NGX_LOG_DEBUG_EVENT, ev->log, 0,
"event timer del: %d: %M",
- ngx_event_ident(ev->data), ev->rbtree_key);
+ ngx_event_ident(ev->data), ev->timer.key);
if (ngx_mutex_lock(ngx_event_timer_mutex) == NGX_ERROR) {
return;
}
- ngx_rbtree_delete((ngx_rbtree_t **) &ngx_event_timer_rbtree,
- &ngx_event_timer_sentinel,
- (ngx_rbtree_t *) &ev->rbtree_key);
+ ngx_rbtree_delete(&ngx_event_timer_rbtree, &ev->timer);
ngx_mutex_unlock(ngx_event_timer_mutex);
#if (NGX_DEBUG)
- ev->rbtree_left = NULL;
- ev->rbtree_right = NULL;
- ev->rbtree_parent = NULL;
+ ev->timer.left = NULL;
+ ev->timer.right = NULL;
+ ev->timer.parent = NULL;
#endif
ev->timer_set = 0;
@@ -76,31 +73,29 @@ ngx_event_add_timer(ngx_event_t *ev, ngx_msec_t timer)
* the rbtree operations for the fast connections.
*/
- diff = (ngx_rbtree_key_int_t) (key - ev->rbtree_key);
+ diff = (ngx_rbtree_key_int_t) (key - ev->timer.key);
if (ngx_abs(diff) < NGX_TIMER_LAZY_DELAY) {
ngx_log_debug3(NGX_LOG_DEBUG_EVENT, ev->log, 0,
"event timer: %d, old: %M, new: %M",
- ngx_event_ident(ev->data), ev->rbtree_key, key);
+ ngx_event_ident(ev->data), ev->timer.key, key);
return;
}
ngx_del_timer(ev);
}
- ev->rbtree_key = key;
+ ev->timer.key = key;
ngx_log_debug3(NGX_LOG_DEBUG_EVENT, ev->log, 0,
"event timer add: %d: %M:%M",
- ngx_event_ident(ev->data), timer, ev->rbtree_key);
+ ngx_event_ident(ev->data), timer, ev->timer.key);
if (ngx_mutex_lock(ngx_event_timer_mutex) == NGX_ERROR) {
return;
}
- ngx_rbtree_insert((ngx_rbtree_t **) &ngx_event_timer_rbtree,
- &ngx_event_timer_sentinel,
- (ngx_rbtree_t *) &ev->rbtree_key);
+ ngx_rbtree_insert(&ngx_event_timer_rbtree, &ev->timer);
ngx_mutex_unlock(ngx_event_timer_mutex);