comparison src/os/unix/ngx_thread_cond.c @ 6018:466bd63b63d1

Thread pools implementation.
author Valentin Bartenev <vbart@nginx.com>
date Sat, 14 Mar 2015 17:37:07 +0300
parents
children 022ea0d17177
comparison
equal deleted inserted replaced
6017:83d54192e97b 6018:466bd63b63d1
1
2 /*
3 * Copyright (C) Igor Sysoev
4 * Copyright (C) Nginx, Inc.
5 */
6
7
8 #include <ngx_config.h>
9 #include <ngx_core.h>
10
11
12 ngx_int_t
13 ngx_thread_cond_create(ngx_thread_cond_t *cond, ngx_log_t *log)
14 {
15 ngx_err_t err;
16
17 err = pthread_cond_init(cond, NULL);
18 if (err == 0) {
19 ngx_log_debug1(NGX_LOG_DEBUG_CORE, log, 0,
20 "pthread_cond_init(%p)", cond);
21 return NGX_OK;
22 }
23
24 ngx_log_error(NGX_LOG_EMERG, log, err, "pthread_cond_init() failed");
25 return NGX_ERROR;
26 }
27
28
29 ngx_int_t
30 ngx_thread_cond_destroy(ngx_thread_cond_t *cond, ngx_log_t *log)
31 {
32 ngx_err_t err;
33
34 err = pthread_cond_destroy(cond);
35 if (err == 0) {
36 ngx_log_debug1(NGX_LOG_DEBUG_CORE, log, 0,
37 "pthread_cond_destroy(%p)", cond);
38 return NGX_OK;
39 }
40
41 ngx_log_error(NGX_LOG_EMERG, log, err, "pthread_cond_destroy() failed");
42 return NGX_ERROR;
43 }
44
45
46 ngx_int_t
47 ngx_thread_cond_signal(ngx_thread_cond_t *cond, ngx_log_t *log)
48 {
49 ngx_err_t err;
50
51 err = pthread_cond_signal(cond);
52 if (err == 0) {
53 ngx_log_debug1(NGX_LOG_DEBUG_CORE, log, 0,
54 "pthread_cond_signal(%p)", cond);
55 return NGX_OK;
56 }
57
58 ngx_log_error(NGX_LOG_EMERG, log, err, "pthread_cond_signal() failed");
59 return NGX_ERROR;
60 }
61
62
63 ngx_int_t
64 ngx_thread_cond_wait(ngx_thread_cond_t *cond, ngx_thread_mutex_t *mtx,
65 ngx_log_t *log)
66 {
67 ngx_err_t err;
68
69 ngx_log_debug1(NGX_LOG_DEBUG_CORE, log, 0,
70 "pthread_cond_wait(%p) enter", cond);
71
72 err = pthread_cond_wait(cond, mtx);
73
74 #if 0
75 ngx_time_update();
76 #endif
77
78 if (err == 0) {
79 ngx_log_debug1(NGX_LOG_DEBUG_CORE, log, 0,
80 "pthread_cond_wait(%p) exit", cond);
81 return NGX_OK;
82 }
83
84 ngx_log_error(NGX_LOG_ALERT, log, err, "pthread_cond_wait() failed");
85
86 return NGX_ERROR;
87 }