nginxtra 1.6.3.9 → 1.8.0.9

Sign up to get free protection for your applications and to get access to all the features.
Files changed (181) hide show
  1. checksums.yaml +4 -4
  2. data/bin/nginxtra +1 -1
  3. data/bin/nginxtra_rails +1 -1
  4. data/lib/nginxtra/version.rb +1 -1
  5. data/vendor/nginx/CHANGES +358 -14
  6. data/vendor/nginx/CHANGES.ru +372 -18
  7. data/vendor/nginx/LICENSE +2 -2
  8. data/vendor/nginx/auto/cc/clang +5 -0
  9. data/vendor/nginx/auto/cc/gcc +5 -0
  10. data/vendor/nginx/auto/lib/google-perftools/conf +1 -1
  11. data/vendor/nginx/auto/lib/openssl/make +0 -5
  12. data/vendor/nginx/auto/lib/perl/conf +9 -1
  13. data/vendor/nginx/auto/make +1 -1
  14. data/vendor/nginx/auto/modules +11 -0
  15. data/vendor/nginx/auto/options +10 -2
  16. data/vendor/nginx/auto/os/darwin +0 -1
  17. data/vendor/nginx/auto/os/freebsd +6 -23
  18. data/vendor/nginx/auto/sources +16 -14
  19. data/vendor/nginx/auto/summary +3 -24
  20. data/vendor/nginx/auto/threads +20 -0
  21. data/vendor/nginx/auto/types/sizeof +2 -12
  22. data/vendor/nginx/auto/unix +50 -6
  23. data/vendor/nginx/configure +5 -0
  24. data/vendor/nginx/contrib/vim/syntax/nginx.vim +183 -50
  25. data/vendor/nginx/src/core/nginx.c +21 -9
  26. data/vendor/nginx/src/core/nginx.h +8 -2
  27. data/vendor/nginx/src/core/ngx_buf.c +88 -0
  28. data/vendor/nginx/src/core/ngx_buf.h +15 -1
  29. data/vendor/nginx/src/core/ngx_conf_file.c +4 -1
  30. data/vendor/nginx/src/core/ngx_connection.c +25 -66
  31. data/vendor/nginx/src/core/ngx_connection.h +1 -3
  32. data/vendor/nginx/src/core/ngx_core.h +11 -3
  33. data/vendor/nginx/src/core/ngx_crypt.c +1 -1
  34. data/vendor/nginx/src/core/ngx_cycle.c +7 -1
  35. data/vendor/nginx/src/core/ngx_cycle.h +6 -2
  36. data/vendor/nginx/src/core/ngx_file.c +13 -5
  37. data/vendor/nginx/src/core/ngx_file.h +6 -0
  38. data/vendor/nginx/src/core/ngx_log.c +215 -21
  39. data/vendor/nginx/src/core/ngx_log.h +9 -1
  40. data/vendor/nginx/src/core/ngx_output_chain.c +104 -15
  41. data/vendor/nginx/src/core/ngx_palloc.c +3 -7
  42. data/vendor/nginx/src/core/ngx_rbtree.c +2 -4
  43. data/vendor/nginx/src/core/ngx_rbtree.h +2 -4
  44. data/vendor/nginx/src/core/ngx_regex.c +14 -6
  45. data/vendor/nginx/src/core/ngx_resolver.c +16 -23
  46. data/vendor/nginx/src/core/ngx_resolver.h +8 -7
  47. data/vendor/nginx/src/core/ngx_shmtx.c +1 -1
  48. data/vendor/nginx/src/core/ngx_slab.c +89 -2
  49. data/vendor/nginx/src/core/ngx_slab.h +3 -0
  50. data/vendor/nginx/src/core/ngx_string.c +58 -2
  51. data/vendor/nginx/src/core/ngx_string.h +1 -0
  52. data/vendor/nginx/src/core/ngx_syslog.c +374 -0
  53. data/vendor/nginx/src/core/ngx_syslog.h +30 -0
  54. data/vendor/nginx/src/core/ngx_thread_pool.c +630 -0
  55. data/vendor/nginx/src/core/ngx_thread_pool.h +36 -0
  56. data/vendor/nginx/src/core/ngx_times.c +19 -2
  57. data/vendor/nginx/src/core/ngx_times.h +1 -0
  58. data/vendor/nginx/src/event/modules/ngx_aio_module.c +1 -1
  59. data/vendor/nginx/src/event/modules/ngx_devpoll_module.c +9 -24
  60. data/vendor/nginx/src/event/modules/ngx_epoll_module.c +152 -28
  61. data/vendor/nginx/src/event/modules/ngx_eventport_module.c +43 -25
  62. data/vendor/nginx/src/event/modules/ngx_kqueue_module.c +86 -156
  63. data/vendor/nginx/src/event/modules/ngx_poll_module.c +21 -37
  64. data/vendor/nginx/src/event/modules/ngx_rtsig_module.c +15 -27
  65. data/vendor/nginx/src/event/modules/ngx_select_module.c +10 -12
  66. data/vendor/nginx/src/event/modules/ngx_win32_select_module.c +7 -9
  67. data/vendor/nginx/src/event/ngx_event.c +5 -33
  68. data/vendor/nginx/src/event/ngx_event.h +15 -50
  69. data/vendor/nginx/src/event/ngx_event_accept.c +11 -10
  70. data/vendor/nginx/src/event/ngx_event_connect.c +0 -11
  71. data/vendor/nginx/src/event/ngx_event_connect.h +1 -4
  72. data/vendor/nginx/src/event/ngx_event_openssl.c +622 -38
  73. data/vendor/nginx/src/event/ngx_event_openssl.h +20 -2
  74. data/vendor/nginx/src/event/ngx_event_openssl_stapling.c +5 -1
  75. data/vendor/nginx/src/event/ngx_event_pipe.c +45 -19
  76. data/vendor/nginx/src/event/ngx_event_pipe.h +3 -0
  77. data/vendor/nginx/src/event/ngx_event_posted.c +7 -145
  78. data/vendor/nginx/src/event/ngx_event_posted.h +12 -39
  79. data/vendor/nginx/src/event/ngx_event_timer.c +50 -70
  80. data/vendor/nginx/src/event/ngx_event_timer.h +2 -14
  81. data/vendor/nginx/src/http/modules/ngx_http_addition_filter_module.c +1 -1
  82. data/vendor/nginx/src/http/modules/ngx_http_autoindex_module.c +416 -71
  83. data/vendor/nginx/src/http/modules/ngx_http_charset_filter_module.c +19 -15
  84. data/vendor/nginx/src/http/modules/ngx_http_dav_module.c +16 -4
  85. data/vendor/nginx/src/http/modules/ngx_http_fastcgi_module.c +601 -134
  86. data/vendor/nginx/src/http/modules/ngx_http_geo_module.c +1 -1
  87. data/vendor/nginx/src/http/modules/ngx_http_geoip_module.c +9 -3
  88. data/vendor/nginx/src/http/modules/ngx_http_gunzip_filter_module.c +9 -3
  89. data/vendor/nginx/src/http/modules/ngx_http_gzip_filter_module.c +9 -3
  90. data/vendor/nginx/src/http/modules/ngx_http_gzip_static_module.c +0 -2
  91. data/vendor/nginx/src/http/modules/ngx_http_headers_filter_module.c +197 -91
  92. data/vendor/nginx/src/http/modules/ngx_http_image_filter_module.c +1 -0
  93. data/vendor/nginx/src/http/modules/ngx_http_limit_conn_module.c +65 -162
  94. data/vendor/nginx/src/http/modules/ngx_http_limit_req_module.c +53 -67
  95. data/vendor/nginx/src/http/modules/ngx_http_log_module.c +128 -23
  96. data/vendor/nginx/src/http/modules/ngx_http_memcached_module.c +25 -6
  97. data/vendor/nginx/src/http/modules/ngx_http_mp4_module.c +1 -1
  98. data/vendor/nginx/src/http/modules/ngx_http_not_modified_filter_module.c +39 -13
  99. data/vendor/nginx/src/http/modules/ngx_http_proxy_module.c +697 -141
  100. data/vendor/nginx/src/http/modules/ngx_http_rewrite_module.c +5 -1
  101. data/vendor/nginx/src/http/modules/ngx_http_scgi_module.c +282 -125
  102. data/vendor/nginx/src/http/modules/ngx_http_ssi_filter_module.c +4 -1
  103. data/vendor/nginx/src/http/modules/ngx_http_ssl_module.c +44 -1
  104. data/vendor/nginx/src/http/modules/ngx_http_ssl_module.h +2 -0
  105. data/vendor/nginx/src/http/modules/ngx_http_stub_status_module.c +10 -8
  106. data/vendor/nginx/src/http/modules/ngx_http_sub_filter_module.c +18 -3
  107. data/vendor/nginx/src/http/modules/ngx_http_upstream_hash_module.c +641 -0
  108. data/vendor/nginx/src/http/modules/ngx_http_upstream_ip_hash_module.c +1 -1
  109. data/vendor/nginx/src/http/modules/ngx_http_upstream_keepalive_module.c +3 -21
  110. data/vendor/nginx/src/http/modules/ngx_http_upstream_least_conn_module.c +0 -5
  111. data/vendor/nginx/src/http/modules/ngx_http_uwsgi_module.c +449 -125
  112. data/vendor/nginx/src/http/modules/ngx_http_xslt_filter_module.c +4 -2
  113. data/vendor/nginx/src/http/modules/perl/ngx_http_perl_module.c +2 -1
  114. data/vendor/nginx/src/http/ngx_http.c +10 -5
  115. data/vendor/nginx/src/http/ngx_http.h +4 -4
  116. data/vendor/nginx/src/http/ngx_http_cache.h +26 -1
  117. data/vendor/nginx/src/http/ngx_http_copy_filter_module.c +109 -68
  118. data/vendor/nginx/src/http/ngx_http_core_module.c +191 -46
  119. data/vendor/nginx/src/http/ngx_http_core_module.h +16 -4
  120. data/vendor/nginx/src/http/ngx_http_file_cache.c +584 -67
  121. data/vendor/nginx/src/http/ngx_http_parse.c +55 -4
  122. data/vendor/nginx/src/http/ngx_http_request.c +14 -6
  123. data/vendor/nginx/src/http/ngx_http_request.h +12 -4
  124. data/vendor/nginx/src/http/ngx_http_request_body.c +114 -28
  125. data/vendor/nginx/src/http/ngx_http_spdy.c +383 -229
  126. data/vendor/nginx/src/http/ngx_http_spdy.h +8 -5
  127. data/vendor/nginx/src/http/ngx_http_spdy_filter_module.c +12 -4
  128. data/vendor/nginx/src/http/ngx_http_special_response.c +2 -2
  129. data/vendor/nginx/src/http/ngx_http_upstream.c +808 -132
  130. data/vendor/nginx/src/http/ngx_http_upstream.h +33 -3
  131. data/vendor/nginx/src/http/ngx_http_upstream_round_robin.c +72 -65
  132. data/vendor/nginx/src/http/ngx_http_upstream_round_robin.h +1 -2
  133. data/vendor/nginx/src/http/ngx_http_variables.c +47 -3
  134. data/vendor/nginx/src/http/ngx_http_write_filter_module.c +15 -6
  135. data/vendor/nginx/src/mail/ngx_mail.c +2 -3
  136. data/vendor/nginx/src/mail/ngx_mail.h +2 -0
  137. data/vendor/nginx/src/mail/ngx_mail_auth_http_module.c +140 -11
  138. data/vendor/nginx/src/mail/ngx_mail_core_module.c +3 -3
  139. data/vendor/nginx/src/mail/ngx_mail_handler.c +79 -2
  140. data/vendor/nginx/src/mail/ngx_mail_imap_module.c +3 -1
  141. data/vendor/nginx/src/mail/ngx_mail_pop3_module.c +3 -1
  142. data/vendor/nginx/src/mail/ngx_mail_smtp_module.c +3 -1
  143. data/vendor/nginx/src/mail/ngx_mail_ssl_module.c +125 -1
  144. data/vendor/nginx/src/mail/ngx_mail_ssl_module.h +8 -0
  145. data/vendor/nginx/src/misc/ngx_cpp_test_module.cpp +1 -1
  146. data/vendor/nginx/src/os/unix/ngx_aio_read_chain.c +1 -1
  147. data/vendor/nginx/src/os/unix/ngx_channel.c +0 -7
  148. data/vendor/nginx/src/os/unix/ngx_darwin_config.h +0 -3
  149. data/vendor/nginx/src/os/unix/ngx_darwin_sendfile_chain.c +44 -208
  150. data/vendor/nginx/src/os/unix/ngx_file_aio_read.c +25 -17
  151. data/vendor/nginx/src/os/unix/ngx_files.c +109 -0
  152. data/vendor/nginx/src/os/unix/ngx_files.h +6 -0
  153. data/vendor/nginx/src/os/unix/ngx_freebsd_config.h +0 -6
  154. data/vendor/nginx/src/os/unix/ngx_freebsd_sendfile_chain.c +78 -206
  155. data/vendor/nginx/src/os/unix/ngx_linux_aio_read.c +25 -14
  156. data/vendor/nginx/src/os/unix/ngx_linux_config.h +4 -1
  157. data/vendor/nginx/src/os/unix/ngx_linux_sendfile_chain.c +235 -194
  158. data/vendor/nginx/src/os/unix/ngx_os.h +25 -3
  159. data/vendor/nginx/src/os/unix/ngx_posix_init.c +4 -2
  160. data/vendor/nginx/src/os/unix/ngx_process_cycle.c +13 -195
  161. data/vendor/nginx/src/os/unix/ngx_process_cycle.h +0 -1
  162. data/vendor/nginx/src/os/unix/ngx_readv_chain.c +27 -108
  163. data/vendor/nginx/src/os/unix/ngx_setproctitle.h +2 -2
  164. data/vendor/nginx/src/os/unix/ngx_solaris_sendfilev_chain.c +12 -67
  165. data/vendor/nginx/src/os/unix/ngx_thread.h +26 -83
  166. data/vendor/nginx/src/os/unix/ngx_thread_cond.c +87 -0
  167. data/vendor/nginx/src/os/unix/ngx_thread_id.c +70 -0
  168. data/vendor/nginx/src/os/unix/ngx_thread_mutex.c +174 -0
  169. data/vendor/nginx/src/os/unix/ngx_user.c +2 -20
  170. data/vendor/nginx/src/os/unix/ngx_writev_chain.c +129 -98
  171. metadata +16 -17
  172. data/vendor/nginx/auto/lib/zlib/patch.zlib.h +0 -10
  173. data/vendor/nginx/src/event/ngx_event_busy_lock.c +0 -286
  174. data/vendor/nginx/src/event/ngx_event_busy_lock.h +0 -65
  175. data/vendor/nginx/src/event/ngx_event_mutex.c +0 -70
  176. data/vendor/nginx/src/http/ngx_http_busy_lock.c +0 -307
  177. data/vendor/nginx/src/http/ngx_http_busy_lock.h +0 -54
  178. data/vendor/nginx/src/os/unix/ngx_freebsd_rfork_thread.c +0 -756
  179. data/vendor/nginx/src/os/unix/ngx_freebsd_rfork_thread.h +0 -122
  180. data/vendor/nginx/src/os/unix/ngx_pthread_thread.c +0 -278
  181. data/vendor/nginx/src/os/unix/rfork_thread.S +0 -73
@@ -13,7 +13,7 @@
13
13
 
14
14
  /* FreeBSD, NetBSD, OpenBSD */
15
15
 
16
- #define ngx_init_setproctitle(log)
16
+ #define ngx_init_setproctitle(log) NGX_OK
17
17
  #define ngx_setproctitle(title) setproctitle("%s", title)
18
18
 
19
19
 
@@ -39,7 +39,7 @@ void ngx_setproctitle(char *title);
39
39
 
40
40
  #else
41
41
 
42
- #define ngx_init_setproctitle(log)
42
+ #define ngx_init_setproctitle(log) NGX_OK
43
43
  #define ngx_setproctitle(title)
44
44
 
45
45
  #endif /* OSes */
@@ -35,12 +35,7 @@ ngx_chain_t *ngx_solaris_sendfilev_chain(ngx_connection_t *c, ngx_chain_t *in,
35
35
  #endif
36
36
 
37
37
 
38
- #if (IOV_MAX > 64)
39
- #define NGX_SENDFILEVECS 64
40
- #else
41
- #define NGX_SENDFILEVECS IOV_MAX
42
- #endif
43
-
38
+ #define NGX_SENDFILEVECS NGX_IOVS_PREALLOCATE
44
39
 
45
40
 
46
41
  ngx_chain_t *
@@ -51,10 +46,10 @@ ngx_solaris_sendfilev_chain(ngx_connection_t *c, ngx_chain_t *in, off_t limit)
51
46
  off_t size, send, prev_send, aligned, fprev;
52
47
  size_t sent;
53
48
  ssize_t n;
54
- ngx_int_t eintr, complete;
49
+ ngx_int_t eintr;
55
50
  ngx_err_t err;
51
+ ngx_uint_t nsfv;
56
52
  sendfilevec_t *sfv, sfvs[NGX_SENDFILEVECS];
57
- ngx_array_t vec;
58
53
  ngx_event_t *wev;
59
54
  ngx_chain_t *cl;
60
55
 
@@ -78,22 +73,16 @@ ngx_solaris_sendfilev_chain(ngx_connection_t *c, ngx_chain_t *in, off_t limit)
78
73
 
79
74
  send = 0;
80
75
 
81
- vec.elts = sfvs;
82
- vec.size = sizeof(sendfilevec_t);
83
- vec.nalloc = NGX_SENDFILEVECS;
84
- vec.pool = c->pool;
85
-
86
76
  for ( ;; ) {
87
77
  fd = SFV_FD_SELF;
88
78
  prev = NULL;
89
79
  fprev = 0;
90
80
  sfv = NULL;
91
81
  eintr = 0;
92
- complete = 0;
93
82
  sent = 0;
94
83
  prev_send = send;
95
84
 
96
- vec.nelts = 0;
85
+ nsfv = 0;
97
86
 
98
87
  /* create the sendfilevec and coalesce the neighbouring bufs */
99
88
 
@@ -116,14 +105,11 @@ ngx_solaris_sendfilev_chain(ngx_connection_t *c, ngx_chain_t *in, off_t limit)
116
105
  sfv->sfv_len += (size_t) size;
117
106
 
118
107
  } else {
119
- if (vec.nelts >= IOV_MAX) {
108
+ if (nsfv == NGX_SENDFILEVECS) {
120
109
  break;
121
110
  }
122
111
 
123
- sfv = ngx_array_push(&vec);
124
- if (sfv == NULL) {
125
- return NGX_CHAIN_ERROR;
126
- }
112
+ sfv = &sfvs[nsfv++];
127
113
 
128
114
  sfv->sfv_fd = SFV_FD_SELF;
129
115
  sfv->sfv_flag = 0;
@@ -154,14 +140,11 @@ ngx_solaris_sendfilev_chain(ngx_connection_t *c, ngx_chain_t *in, off_t limit)
154
140
  sfv->sfv_len += (size_t) size;
155
141
 
156
142
  } else {
157
- if (vec.nelts >= IOV_MAX) {
143
+ if (nsfv == NGX_SENDFILEVECS) {
158
144
  break;
159
145
  }
160
146
 
161
- sfv = ngx_array_push(&vec);
162
- if (sfv == NULL) {
163
- return NGX_CHAIN_ERROR;
164
- }
147
+ sfv = &sfvs[nsfv++];
165
148
 
166
149
  fd = cl->buf->file->fd;
167
150
  sfv->sfv_fd = fd;
@@ -175,7 +158,7 @@ ngx_solaris_sendfilev_chain(ngx_connection_t *c, ngx_chain_t *in, off_t limit)
175
158
  }
176
159
  }
177
160
 
178
- n = sendfilev(c->fd, vec.elts, vec.nelts, &sent);
161
+ n = sendfilev(c->fd, sfvs, nsfv, &sent);
179
162
 
180
163
  if (n == -1) {
181
164
  err = ngx_errno;
@@ -201,54 +184,16 @@ ngx_solaris_sendfilev_chain(ngx_connection_t *c, ngx_chain_t *in, off_t limit)
201
184
  ngx_log_debug2(NGX_LOG_DEBUG_EVENT, c->log, 0,
202
185
  "sendfilev: %z %z", n, sent);
203
186
 
204
- if (send - prev_send == (off_t) sent) {
205
- complete = 1;
206
- }
207
-
208
187
  c->sent += sent;
209
188
 
210
- for ( /* void */ ; in; in = in->next) {
211
-
212
- if (ngx_buf_special(in->buf)) {
213
- continue;
214
- }
215
-
216
- if (sent == 0) {
217
- break;
218
- }
219
-
220
- size = ngx_buf_size(in->buf);
221
-
222
- if ((off_t) sent >= size) {
223
- sent = (size_t) ((off_t) sent - size);
224
-
225
- if (ngx_buf_in_memory(in->buf)) {
226
- in->buf->pos = in->buf->last;
227
- }
228
-
229
- if (in->buf->in_file) {
230
- in->buf->file_pos = in->buf->file_last;
231
- }
232
-
233
- continue;
234
- }
235
-
236
- if (ngx_buf_in_memory(in->buf)) {
237
- in->buf->pos += sent;
238
- }
239
-
240
- if (in->buf->in_file) {
241
- in->buf->file_pos += sent;
242
- }
243
-
244
- break;
245
- }
189
+ in = ngx_chain_update_sent(in, sent);
246
190
 
247
191
  if (eintr) {
192
+ send = prev_send + sent;
248
193
  continue;
249
194
  }
250
195
 
251
- if (!complete) {
196
+ if (send - prev_send != (off_t) sent) {
252
197
  wev->ready = 0;
253
198
  return in;
254
199
  }
@@ -14,114 +14,57 @@
14
14
 
15
15
  #if (NGX_THREADS)
16
16
 
17
- #define NGX_MAX_THREADS 128
18
-
19
- #if (NGX_USE_RFORK)
20
- #include <ngx_freebsd_rfork_thread.h>
21
-
22
-
23
- #else /* use pthreads */
24
-
25
17
  #include <pthread.h>
26
18
 
27
- typedef pthread_t ngx_tid_t;
28
-
29
- #define ngx_thread_self() pthread_self()
30
- #define ngx_log_tid (int) ngx_thread_self()
31
19
 
32
- #if (NGX_FREEBSD) && !(NGX_LINUXTHREADS)
33
- #define NGX_TID_T_FMT "%p"
34
- #else
35
- #define NGX_TID_T_FMT "%d"
36
- #endif
20
+ typedef pthread_mutex_t ngx_thread_mutex_t;
37
21
 
22
+ ngx_int_t ngx_thread_mutex_create(ngx_thread_mutex_t *mtx, ngx_log_t *log);
23
+ ngx_int_t ngx_thread_mutex_destroy(ngx_thread_mutex_t *mtx, ngx_log_t *log);
24
+ ngx_int_t ngx_thread_mutex_lock(ngx_thread_mutex_t *mtx, ngx_log_t *log);
25
+ ngx_int_t ngx_thread_mutex_unlock(ngx_thread_mutex_t *mtx, ngx_log_t *log);
38
26
 
39
- typedef pthread_key_t ngx_tls_key_t;
40
27
 
41
- #define ngx_thread_key_create(key) pthread_key_create(key, NULL)
42
- #define ngx_thread_key_create_n "pthread_key_create()"
43
- #define ngx_thread_set_tls pthread_setspecific
44
- #define ngx_thread_set_tls_n "pthread_setspecific()"
45
- #define ngx_thread_get_tls pthread_getspecific
28
+ typedef pthread_cond_t ngx_thread_cond_t;
46
29
 
30
+ ngx_int_t ngx_thread_cond_create(ngx_thread_cond_t *cond, ngx_log_t *log);
31
+ ngx_int_t ngx_thread_cond_destroy(ngx_thread_cond_t *cond, ngx_log_t *log);
32
+ ngx_int_t ngx_thread_cond_signal(ngx_thread_cond_t *cond, ngx_log_t *log);
33
+ ngx_int_t ngx_thread_cond_wait(ngx_thread_cond_t *cond, ngx_thread_mutex_t *mtx,
34
+ ngx_log_t *log);
47
35
 
48
- #define NGX_MUTEX_LIGHT 0
49
36
 
50
- typedef struct {
51
- pthread_mutex_t mutex;
52
- ngx_log_t *log;
53
- } ngx_mutex_t;
37
+ #if (NGX_LINUX)
54
38
 
55
- typedef struct {
56
- pthread_cond_t cond;
57
- ngx_log_t *log;
58
- } ngx_cond_t;
39
+ typedef pid_t ngx_tid_t;
40
+ #define NGX_TID_T_FMT "%P"
59
41
 
60
- #define ngx_thread_sigmask pthread_sigmask
61
- #define ngx_thread_sigmask_n "pthread_sigmask()"
42
+ #elif (NGX_FREEBSD)
62
43
 
63
- #define ngx_thread_join(t, p) pthread_join(t, p)
44
+ typedef uint32_t ngx_tid_t;
45
+ #define NGX_TID_T_FMT "%uD"
64
46
 
65
- #define ngx_setthrtitle(n)
47
+ #elif (NGX_DARWIN)
66
48
 
49
+ typedef uint64_t ngx_tid_t;
50
+ #define NGX_TID_T_FMT "%uA"
67
51
 
52
+ #else
68
53
 
69
- ngx_int_t ngx_mutex_trylock(ngx_mutex_t *m);
70
- void ngx_mutex_lock(ngx_mutex_t *m);
71
- void ngx_mutex_unlock(ngx_mutex_t *m);
54
+ typedef uint64_t ngx_tid_t;
55
+ #define NGX_TID_T_FMT "%uA"
72
56
 
73
57
  #endif
74
58
 
59
+ ngx_tid_t ngx_thread_tid(void);
75
60
 
76
- #define ngx_thread_volatile volatile
77
-
78
-
79
- typedef struct {
80
- ngx_tid_t tid;
81
- ngx_cond_t *cv;
82
- ngx_uint_t state;
83
- } ngx_thread_t;
84
-
85
- #define NGX_THREAD_FREE 1
86
- #define NGX_THREAD_BUSY 2
87
- #define NGX_THREAD_EXIT 3
88
- #define NGX_THREAD_DONE 4
89
-
90
- extern ngx_int_t ngx_threads_n;
91
- extern volatile ngx_thread_t ngx_threads[NGX_MAX_THREADS];
61
+ #define ngx_log_tid ngx_thread_tid()
92
62
 
93
-
94
- typedef void * ngx_thread_value_t;
95
-
96
- ngx_int_t ngx_init_threads(int n, size_t size, ngx_cycle_t *cycle);
97
- ngx_err_t ngx_create_thread(ngx_tid_t *tid,
98
- ngx_thread_value_t (*func)(void *arg), void *arg, ngx_log_t *log);
99
-
100
- ngx_mutex_t *ngx_mutex_init(ngx_log_t *log, ngx_uint_t flags);
101
- void ngx_mutex_destroy(ngx_mutex_t *m);
102
-
103
-
104
- ngx_cond_t *ngx_cond_init(ngx_log_t *log);
105
- void ngx_cond_destroy(ngx_cond_t *cv);
106
- ngx_int_t ngx_cond_wait(ngx_cond_t *cv, ngx_mutex_t *m);
107
- ngx_int_t ngx_cond_signal(ngx_cond_t *cv);
108
-
109
-
110
- #else /* !NGX_THREADS */
111
-
112
- #define ngx_thread_volatile
63
+ #else
113
64
 
114
65
  #define ngx_log_tid 0
115
66
  #define NGX_TID_T_FMT "%d"
116
67
 
117
- #define ngx_mutex_trylock(m) NGX_OK
118
- #define ngx_mutex_lock(m)
119
- #define ngx_mutex_unlock(m)
120
-
121
- #define ngx_cond_signal(cv)
122
-
123
- #define ngx_thread_main() 1
124
-
125
68
  #endif
126
69
 
127
70
 
@@ -0,0 +1,87 @@
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
+ }
@@ -0,0 +1,70 @@
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
+ #include <ngx_thread_pool.h>
11
+
12
+
13
+ #if (NGX_LINUX)
14
+
15
+ /*
16
+ * Linux thread id is a pid of thread created by clone(2),
17
+ * glibc does not provide a wrapper for gettid().
18
+ */
19
+
20
+ ngx_tid_t
21
+ ngx_thread_tid(void)
22
+ {
23
+ return syscall(SYS_gettid);
24
+ }
25
+
26
+ #elif (NGX_FREEBSD) && (__FreeBSD_version >= 900031)
27
+
28
+ #include <pthread_np.h>
29
+
30
+ ngx_tid_t
31
+ ngx_thread_tid(void)
32
+ {
33
+ return pthread_getthreadid_np();
34
+ }
35
+
36
+ #elif (NGX_DARWIN)
37
+
38
+ /*
39
+ * MacOSX thread has two thread ids:
40
+ *
41
+ * 1) MacOSX 10.6 (Snow Leoprad) has pthread_threadid_np() returning
42
+ * an uint64_t value, which is obtained using the __thread_selfid()
43
+ * syscall. It is a number above 300,000.
44
+ */
45
+
46
+ ngx_tid_t
47
+ ngx_thread_tid(void)
48
+ {
49
+ uint64_t tid;
50
+
51
+ (void) pthread_threadid_np(NULL, &tid);
52
+ return tid;
53
+ }
54
+
55
+ /*
56
+ * 2) Kernel thread mach_port_t returned by pthread_mach_thread_np().
57
+ * It is a number in range 100-100,000.
58
+ *
59
+ * return pthread_mach_thread_np(pthread_self());
60
+ */
61
+
62
+ #else
63
+
64
+ ngx_tid_t
65
+ ngx_thread_tid(void)
66
+ {
67
+ return (uint64_t) (uintptr_t) pthread_self();
68
+ }
69
+
70
+ #endif