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
ngx_thread_cond_create(ngx_thread_cond_t * cond,ngx_log_t * log)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         return NGX_OK;
20     }
21 
22     ngx_log_error(NGX_LOG_EMERG, log, err, "pthread_cond_init() failed");
23     return NGX_ERROR;
24 }
25 
26 
27 ngx_int_t
ngx_thread_cond_destroy(ngx_thread_cond_t * cond,ngx_log_t * log)28 ngx_thread_cond_destroy(ngx_thread_cond_t *cond, ngx_log_t *log)
29 {
30     ngx_err_t  err;
31 
32     err = pthread_cond_destroy(cond);
33     if (err == 0) {
34         return NGX_OK;
35     }
36 
37     ngx_log_error(NGX_LOG_EMERG, log, err, "pthread_cond_destroy() failed");
38     return NGX_ERROR;
39 }
40 
41 
42 ngx_int_t
ngx_thread_cond_signal(ngx_thread_cond_t * cond,ngx_log_t * log)43 ngx_thread_cond_signal(ngx_thread_cond_t *cond, ngx_log_t *log)
44 {
45     ngx_err_t  err;
46 
47     err = pthread_cond_signal(cond);
48     if (err == 0) {
49         return NGX_OK;
50     }
51 
52     ngx_log_error(NGX_LOG_EMERG, log, err, "pthread_cond_signal() failed");
53     return NGX_ERROR;
54 }
55 
56 
57 ngx_int_t
ngx_thread_cond_wait(ngx_thread_cond_t * cond,ngx_thread_mutex_t * mtx,ngx_log_t * log)58 ngx_thread_cond_wait(ngx_thread_cond_t *cond, ngx_thread_mutex_t *mtx,
59     ngx_log_t *log)
60 {
61     ngx_err_t  err;
62 
63     err = pthread_cond_wait(cond, mtx);
64 
65 #if 0
66     ngx_time_update();
67 #endif
68 
69     if (err == 0) {
70         return NGX_OK;
71     }
72 
73     ngx_log_error(NGX_LOG_ALERT, log, err, "pthread_cond_wait() failed");
74 
75     return NGX_ERROR;
76 }
77