[nginx] Thread pools: keep waiting tasks mutex in ngx_thread_poo...
Valentin Bartenev
vbart at nginx.com
Mon Mar 23 14:54:29 UTC 2015
details: http://hg.nginx.org/nginx/rev/adaedab1e662
branches:
changeset: 6040:adaedab1e662
user: Valentin Bartenev <vbart at nginx.com>
date: Mon Mar 23 17:51:21 2015 +0300
description:
Thread pools: keep waiting tasks mutex in ngx_thread_pool_t.
It's not needed for completed tasks queue since the previous change.
No functional changes.
diffstat:
src/core/ngx_thread_pool.c | 65 ++++++++++++++-------------------------------
1 files changed, 20 insertions(+), 45 deletions(-)
diffs (174 lines):
diff -r fc36690e7f44 -r adaedab1e662 src/core/ngx_thread_pool.c
--- a/src/core/ngx_thread_pool.c Mon Mar 23 17:51:21 2015 +0300
+++ b/src/core/ngx_thread_pool.c Mon Mar 23 17:51:21 2015 +0300
@@ -17,13 +17,17 @@ typedef struct {
typedef struct {
- ngx_thread_mutex_t mtx;
ngx_thread_task_t *first;
ngx_thread_task_t **last;
} ngx_thread_pool_queue_t;
+#define ngx_thread_pool_queue_init(q) \
+ (q)->first = NULL; \
+ (q)->last = &(q)->first
+
struct ngx_thread_pool_s {
+ ngx_thread_mutex_t mtx;
ngx_thread_pool_queue_t queue;
ngx_int_t waiting;
ngx_thread_cond_t cond;
@@ -42,10 +46,6 @@ struct ngx_thread_pool_s {
static ngx_int_t ngx_thread_pool_init(ngx_thread_pool_t *tp, ngx_log_t *log,
ngx_pool_t *pool);
-static ngx_int_t ngx_thread_pool_queue_init(ngx_thread_pool_queue_t *queue,
- ngx_log_t *log);
-static ngx_int_t ngx_thread_pool_queue_destroy(ngx_thread_pool_queue_t *queue,
- ngx_log_t *log);
static void ngx_thread_pool_destroy(ngx_thread_pool_t *tp);
static void *ngx_thread_pool_cycle(void *data);
@@ -117,12 +117,14 @@ ngx_thread_pool_init(ngx_thread_pool_t *
return NGX_ERROR;
}
- if (ngx_thread_pool_queue_init(&tp->queue, log) != NGX_OK) {
+ ngx_thread_pool_queue_init(&tp->queue);
+
+ if (ngx_thread_mutex_create(&tp->mtx, log) != NGX_OK) {
return NGX_ERROR;
}
if (ngx_thread_cond_create(&tp->cond, log) != NGX_OK) {
- (void) ngx_thread_pool_queue_destroy(&tp->queue, log);
+ (void) ngx_thread_mutex_destroy(&tp->mtx, log);
return NGX_ERROR;
}
@@ -160,27 +162,6 @@ ngx_thread_pool_init(ngx_thread_pool_t *
}
-static ngx_int_t
-ngx_thread_pool_queue_init(ngx_thread_pool_queue_t *queue, ngx_log_t *log)
-{
- queue->first = NULL;
- queue->last = &queue->first;
-
- return ngx_thread_mutex_create(&queue->mtx, log);
-}
-
-
-static ngx_int_t
-ngx_thread_pool_queue_destroy(ngx_thread_pool_queue_t *queue, ngx_log_t *log)
-{
-#if 0
- return ngx_thread_mutex_destroy(&queue->mtx, log);
-#else
- return NGX_OK;
-#endif
-}
-
-
static void
ngx_thread_pool_destroy(ngx_thread_pool_t *tp)
{
@@ -188,9 +169,9 @@ ngx_thread_pool_destroy(ngx_thread_pool_
#if 0
(void) ngx_thread_cond_destroy(&tp->cond, tp->log);
-#endif
- (void) ngx_thread_pool_queue_destroy(&tp->queue, tp->log);
+ (void) ngx_thread_mutex_destroy(&tp->mtx, tp->log);
+ #endif
}
@@ -219,12 +200,12 @@ ngx_thread_task_post(ngx_thread_pool_t *
return NGX_ERROR;
}
- if (ngx_thread_mutex_lock(&tp->queue.mtx, tp->log) != NGX_OK) {
+ if (ngx_thread_mutex_lock(&tp->mtx, tp->log) != NGX_OK) {
return NGX_ERROR;
}
if (tp->waiting >= tp->max_queue) {
- (void) ngx_thread_mutex_unlock(&tp->queue.mtx, tp->log);
+ (void) ngx_thread_mutex_unlock(&tp->mtx, tp->log);
ngx_log_error(NGX_LOG_ERR, tp->log, 0,
"thread pool \"%V\" queue overflow: %i tasks waiting",
@@ -238,7 +219,7 @@ ngx_thread_task_post(ngx_thread_pool_t *
task->next = NULL;
if (ngx_thread_cond_signal(&tp->cond, tp->log) != NGX_OK) {
- (void) ngx_thread_mutex_unlock(&tp->queue.mtx, tp->log);
+ (void) ngx_thread_mutex_unlock(&tp->mtx, tp->log);
return NGX_ERROR;
}
@@ -247,7 +228,7 @@ ngx_thread_task_post(ngx_thread_pool_t *
tp->waiting++;
- (void) ngx_thread_mutex_unlock(&tp->queue.mtx, tp->log);
+ (void) ngx_thread_mutex_unlock(&tp->mtx, tp->log);
ngx_log_debug2(NGX_LOG_DEBUG_CORE, tp->log, 0,
"task #%ui added to thread pool \"%V\"",
@@ -287,7 +268,7 @@ ngx_thread_pool_cycle(void *data)
}
for ( ;; ) {
- if (ngx_thread_mutex_lock(&tp->queue.mtx, tp->log) != NGX_OK) {
+ if (ngx_thread_mutex_lock(&tp->mtx, tp->log) != NGX_OK) {
return NULL;
}
@@ -295,10 +276,10 @@ ngx_thread_pool_cycle(void *data)
tp->waiting--;
while (tp->queue.first == NULL) {
- if (ngx_thread_cond_wait(&tp->cond, &tp->queue.mtx, tp->log)
+ if (ngx_thread_cond_wait(&tp->cond, &tp->mtx, tp->log)
!= NGX_OK)
{
- (void) ngx_thread_mutex_unlock(&tp->queue.mtx, tp->log);
+ (void) ngx_thread_mutex_unlock(&tp->mtx, tp->log);
return NULL;
}
}
@@ -310,7 +291,7 @@ ngx_thread_pool_cycle(void *data)
tp->queue.last = &tp->queue.first;
}
- if (ngx_thread_mutex_unlock(&tp->queue.mtx, tp->log) != NGX_OK) {
+ if (ngx_thread_mutex_unlock(&tp->mtx, tp->log) != NGX_OK) {
return NULL;
}
@@ -578,11 +559,7 @@ ngx_thread_pool_init_worker(ngx_cycle_t
return NGX_OK;
}
- if (ngx_thread_pool_queue_init(&ngx_thread_pool_done, cycle->log)
- != NGX_OK)
- {
- return NGX_ERROR;
- }
+ ngx_thread_pool_queue_init(&ngx_thread_pool_done);
tpp = tcf->pools.elts;
@@ -621,6 +598,4 @@ ngx_thread_pool_exit_worker(ngx_cycle_t
for (i = 0; i < tcf->pools.nelts; i++) {
ngx_thread_pool_destroy(tpp[i]);
}
-
- (void) ngx_thread_pool_queue_destroy(&ngx_thread_pool_done, cycle->log);
}
More information about the nginx-devel
mailing list