annotate src/event/modules/ngx_rtsig_module.c @ 485:4ebe09b07e30 release-0.1.17

nginx-0.1.17-RELEASE import *) Change: the ngx_http_rewrite_module was rewritten from the scratch. Now it is possible to redirect, to return the error codes, to check the variables and referrers. The directives can be used inside locations. The redirect directive was canceled. *) Feature: the ngx_http_geo_module. *) Feature: the proxy_set_x_var and fastcgi_set_var directives. *) Bugfix: the location configuration with "=" modifier may be used in another location. *) Bugfix: the correct content type was set only for requests that use small caps letters in extension. *) Bugfix: if the proxy_pass or fastcgi_pass directives were set in the location, and access was denied, and the error was redirected to a static page, then the segmentation fault occurred. *) Bugfix: if in a proxied "Location" header was a relative URL, then a host name and a slash were added to them; the bug had appeared in 0.1.14. *) Bugfix: the system error message was not logged on Linux.
author Igor Sysoev <igor@sysoev.ru>
date Thu, 03 Feb 2005 19:33:37 +0000
parents 2ff194b74f1e
children 975f62e77f02
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
246
6753e8cdaa2c nginx-0.0.1-2004-01-30-20:39:00 import
Igor Sysoev <igor@sysoev.ru>
parents: 60
diff changeset
1
6753e8cdaa2c nginx-0.0.1-2004-01-30-20:39:00 import
Igor Sysoev <igor@sysoev.ru>
parents: 60
diff changeset
2 /*
444
42d11f017717 nginx-0.1.0-2004-09-29-20:00:49 import; remove years from copyright
Igor Sysoev <igor@sysoev.ru>
parents: 441
diff changeset
3 * Copyright (C) Igor Sysoev
246
6753e8cdaa2c nginx-0.0.1-2004-01-30-20:39:00 import
Igor Sysoev <igor@sysoev.ru>
parents: 60
diff changeset
4 */
6753e8cdaa2c nginx-0.0.1-2004-01-30-20:39:00 import
Igor Sysoev <igor@sysoev.ru>
parents: 60
diff changeset
5
6753e8cdaa2c nginx-0.0.1-2004-01-30-20:39:00 import
Igor Sysoev <igor@sysoev.ru>
parents: 60
diff changeset
6
6753e8cdaa2c nginx-0.0.1-2004-01-30-20:39:00 import
Igor Sysoev <igor@sysoev.ru>
parents: 60
diff changeset
7 #include <ngx_config.h>
6753e8cdaa2c nginx-0.0.1-2004-01-30-20:39:00 import
Igor Sysoev <igor@sysoev.ru>
parents: 60
diff changeset
8 #include <ngx_core.h>
6753e8cdaa2c nginx-0.0.1-2004-01-30-20:39:00 import
Igor Sysoev <igor@sysoev.ru>
parents: 60
diff changeset
9 #include <ngx_event.h>
6753e8cdaa2c nginx-0.0.1-2004-01-30-20:39:00 import
Igor Sysoev <igor@sysoev.ru>
parents: 60
diff changeset
10
6753e8cdaa2c nginx-0.0.1-2004-01-30-20:39:00 import
Igor Sysoev <igor@sysoev.ru>
parents: 60
diff changeset
11
469
2ff194b74f1e nginx-0.1.9-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 461
diff changeset
12 #if (NGX_TEST_BUILD_RTSIG)
246
6753e8cdaa2c nginx-0.0.1-2004-01-30-20:39:00 import
Igor Sysoev <igor@sysoev.ru>
parents: 60
diff changeset
13
348
68ff8000a974 nginx-0.0.3-2004-06-09-11:45:27 import
Igor Sysoev <igor@sysoev.ru>
parents: 346
diff changeset
14 #define F_SETSIG 10
68ff8000a974 nginx-0.0.3-2004-06-09-11:45:27 import
Igor Sysoev <igor@sysoev.ru>
parents: 346
diff changeset
15 #define SIGRTMIN 33
68ff8000a974 nginx-0.0.3-2004-06-09-11:45:27 import
Igor Sysoev <igor@sysoev.ru>
parents: 346
diff changeset
16 #define si_fd __spare__[0]
68ff8000a974 nginx-0.0.3-2004-06-09-11:45:27 import
Igor Sysoev <igor@sysoev.ru>
parents: 346
diff changeset
17 #define KERN_RTSIGNR 30
68ff8000a974 nginx-0.0.3-2004-06-09-11:45:27 import
Igor Sysoev <igor@sysoev.ru>
parents: 346
diff changeset
18 #define KERN_RTSIGMAX 31
246
6753e8cdaa2c nginx-0.0.1-2004-01-30-20:39:00 import
Igor Sysoev <igor@sysoev.ru>
parents: 60
diff changeset
19
260
5dacbb4daaf6 nginx-0.0.2-2004-02-17-20:53:12 import
Igor Sysoev <igor@sysoev.ru>
parents: 247
diff changeset
20 int sigtimedwait(const sigset_t *set, siginfo_t *info,
5dacbb4daaf6 nginx-0.0.2-2004-02-17-20:53:12 import
Igor Sysoev <igor@sysoev.ru>
parents: 247
diff changeset
21 const struct timespec *timeout)
5dacbb4daaf6 nginx-0.0.2-2004-02-17-20:53:12 import
Igor Sysoev <igor@sysoev.ru>
parents: 247
diff changeset
22 {
5dacbb4daaf6 nginx-0.0.2-2004-02-17-20:53:12 import
Igor Sysoev <igor@sysoev.ru>
parents: 247
diff changeset
23 return -1;
5dacbb4daaf6 nginx-0.0.2-2004-02-17-20:53:12 import
Igor Sysoev <igor@sysoev.ru>
parents: 247
diff changeset
24 }
247
008276b9e061 nginx-0.0.1-2004-02-01-11:10:52 import
Igor Sysoev <igor@sysoev.ru>
parents: 246
diff changeset
25
391
b670db10cbbd nginx-0.0.7-2004-07-14-20:01:42 import
Igor Sysoev <igor@sysoev.ru>
parents: 390
diff changeset
26 int ngx_linux_rtsig_max;
b670db10cbbd nginx-0.0.7-2004-07-14-20:01:42 import
Igor Sysoev <igor@sysoev.ru>
parents: 390
diff changeset
27
246
6753e8cdaa2c nginx-0.0.1-2004-01-30-20:39:00 import
Igor Sysoev <igor@sysoev.ru>
parents: 60
diff changeset
28 #endif
6753e8cdaa2c nginx-0.0.1-2004-01-30-20:39:00 import
Igor Sysoev <igor@sysoev.ru>
parents: 60
diff changeset
29
6753e8cdaa2c nginx-0.0.1-2004-01-30-20:39:00 import
Igor Sysoev <igor@sysoev.ru>
parents: 60
diff changeset
30
6753e8cdaa2c nginx-0.0.1-2004-01-30-20:39:00 import
Igor Sysoev <igor@sysoev.ru>
parents: 60
diff changeset
31 typedef struct {
351
af4c6b45a687 nginx-0.0.4-2004-06-10-22:36:57 import
Igor Sysoev <igor@sysoev.ru>
parents: 350
diff changeset
32 int signo;
af4c6b45a687 nginx-0.0.4-2004-06-10-22:36:57 import
Igor Sysoev <igor@sysoev.ru>
parents: 350
diff changeset
33 ngx_int_t overflow_events;
af4c6b45a687 nginx-0.0.4-2004-06-10-22:36:57 import
Igor Sysoev <igor@sysoev.ru>
parents: 350
diff changeset
34 ngx_int_t overflow_test;
af4c6b45a687 nginx-0.0.4-2004-06-10-22:36:57 import
Igor Sysoev <igor@sysoev.ru>
parents: 350
diff changeset
35 ngx_int_t overflow_threshold;
260
5dacbb4daaf6 nginx-0.0.2-2004-02-17-20:53:12 import
Igor Sysoev <igor@sysoev.ru>
parents: 247
diff changeset
36 } ngx_rtsig_conf_t;
246
6753e8cdaa2c nginx-0.0.1-2004-01-30-20:39:00 import
Igor Sysoev <igor@sysoev.ru>
parents: 60
diff changeset
37
6753e8cdaa2c nginx-0.0.1-2004-01-30-20:39:00 import
Igor Sysoev <igor@sysoev.ru>
parents: 60
diff changeset
38
261
bdd631bf1a1c nginx-0.0.2-2004-02-18-00:11:27 import
Igor Sysoev <igor@sysoev.ru>
parents: 260
diff changeset
39 extern ngx_event_module_t ngx_poll_module_ctx;
bdd631bf1a1c nginx-0.0.2-2004-02-18-00:11:27 import
Igor Sysoev <igor@sysoev.ru>
parents: 260
diff changeset
40
348
68ff8000a974 nginx-0.0.3-2004-06-09-11:45:27 import
Igor Sysoev <igor@sysoev.ru>
parents: 346
diff changeset
41 static ngx_int_t ngx_rtsig_init(ngx_cycle_t *cycle);
260
5dacbb4daaf6 nginx-0.0.2-2004-02-17-20:53:12 import
Igor Sysoev <igor@sysoev.ru>
parents: 247
diff changeset
42 static void ngx_rtsig_done(ngx_cycle_t *cycle);
348
68ff8000a974 nginx-0.0.3-2004-06-09-11:45:27 import
Igor Sysoev <igor@sysoev.ru>
parents: 346
diff changeset
43 static ngx_int_t ngx_rtsig_add_connection(ngx_connection_t *c);
68ff8000a974 nginx-0.0.3-2004-06-09-11:45:27 import
Igor Sysoev <igor@sysoev.ru>
parents: 346
diff changeset
44 static ngx_int_t ngx_rtsig_del_connection(ngx_connection_t *c, u_int flags);
68ff8000a974 nginx-0.0.3-2004-06-09-11:45:27 import
Igor Sysoev <igor@sysoev.ru>
parents: 346
diff changeset
45 static ngx_int_t ngx_rtsig_process_events(ngx_cycle_t *cycle);
68ff8000a974 nginx-0.0.3-2004-06-09-11:45:27 import
Igor Sysoev <igor@sysoev.ru>
parents: 346
diff changeset
46 static ngx_int_t ngx_rtsig_process_overflow(ngx_cycle_t *cycle);
246
6753e8cdaa2c nginx-0.0.1-2004-01-30-20:39:00 import
Igor Sysoev <igor@sysoev.ru>
parents: 60
diff changeset
47
260
5dacbb4daaf6 nginx-0.0.2-2004-02-17-20:53:12 import
Igor Sysoev <igor@sysoev.ru>
parents: 247
diff changeset
48 static void *ngx_rtsig_create_conf(ngx_cycle_t *cycle);
5dacbb4daaf6 nginx-0.0.2-2004-02-17-20:53:12 import
Igor Sysoev <igor@sysoev.ru>
parents: 247
diff changeset
49 static char *ngx_rtsig_init_conf(ngx_cycle_t *cycle, void *conf);
391
b670db10cbbd nginx-0.0.7-2004-07-14-20:01:42 import
Igor Sysoev <igor@sysoev.ru>
parents: 390
diff changeset
50 static char *ngx_check_ngx_overflow_threshold_bounds(ngx_conf_t *cf,
b670db10cbbd nginx-0.0.7-2004-07-14-20:01:42 import
Igor Sysoev <igor@sysoev.ru>
parents: 390
diff changeset
51 void *post, void *data);
246
6753e8cdaa2c nginx-0.0.1-2004-01-30-20:39:00 import
Igor Sysoev <igor@sysoev.ru>
parents: 60
diff changeset
52
6753e8cdaa2c nginx-0.0.1-2004-01-30-20:39:00 import
Igor Sysoev <igor@sysoev.ru>
parents: 60
diff changeset
53
351
af4c6b45a687 nginx-0.0.4-2004-06-10-22:36:57 import
Igor Sysoev <igor@sysoev.ru>
parents: 350
diff changeset
54 static sigset_t set;
af4c6b45a687 nginx-0.0.4-2004-06-10-22:36:57 import
Igor Sysoev <igor@sysoev.ru>
parents: 350
diff changeset
55 static ngx_uint_t overflow, overflow_current;
af4c6b45a687 nginx-0.0.4-2004-06-10-22:36:57 import
Igor Sysoev <igor@sysoev.ru>
parents: 350
diff changeset
56 static struct pollfd *overflow_list;
246
6753e8cdaa2c nginx-0.0.1-2004-01-30-20:39:00 import
Igor Sysoev <igor@sysoev.ru>
parents: 60
diff changeset
57
6753e8cdaa2c nginx-0.0.1-2004-01-30-20:39:00 import
Igor Sysoev <igor@sysoev.ru>
parents: 60
diff changeset
58
260
5dacbb4daaf6 nginx-0.0.2-2004-02-17-20:53:12 import
Igor Sysoev <igor@sysoev.ru>
parents: 247
diff changeset
59 static ngx_str_t rtsig_name = ngx_string("rtsig");
246
6753e8cdaa2c nginx-0.0.1-2004-01-30-20:39:00 import
Igor Sysoev <igor@sysoev.ru>
parents: 60
diff changeset
60
351
af4c6b45a687 nginx-0.0.4-2004-06-10-22:36:57 import
Igor Sysoev <igor@sysoev.ru>
parents: 350
diff changeset
61 static ngx_conf_num_bounds_t ngx_overflow_threshold_bounds = {
391
b670db10cbbd nginx-0.0.7-2004-07-14-20:01:42 import
Igor Sysoev <igor@sysoev.ru>
parents: 390
diff changeset
62 ngx_check_ngx_overflow_threshold_bounds, 2, 10
351
af4c6b45a687 nginx-0.0.4-2004-06-10-22:36:57 import
Igor Sysoev <igor@sysoev.ru>
parents: 350
diff changeset
63 };
af4c6b45a687 nginx-0.0.4-2004-06-10-22:36:57 import
Igor Sysoev <igor@sysoev.ru>
parents: 350
diff changeset
64
af4c6b45a687 nginx-0.0.4-2004-06-10-22:36:57 import
Igor Sysoev <igor@sysoev.ru>
parents: 350
diff changeset
65
260
5dacbb4daaf6 nginx-0.0.2-2004-02-17-20:53:12 import
Igor Sysoev <igor@sysoev.ru>
parents: 247
diff changeset
66 static ngx_command_t ngx_rtsig_commands[] = {
246
6753e8cdaa2c nginx-0.0.1-2004-01-30-20:39:00 import
Igor Sysoev <igor@sysoev.ru>
parents: 60
diff changeset
67
260
5dacbb4daaf6 nginx-0.0.2-2004-02-17-20:53:12 import
Igor Sysoev <igor@sysoev.ru>
parents: 247
diff changeset
68 {ngx_string("rtsig_signo"),
246
6753e8cdaa2c nginx-0.0.1-2004-01-30-20:39:00 import
Igor Sysoev <igor@sysoev.ru>
parents: 60
diff changeset
69 NGX_EVENT_CONF|NGX_CONF_TAKE1,
6753e8cdaa2c nginx-0.0.1-2004-01-30-20:39:00 import
Igor Sysoev <igor@sysoev.ru>
parents: 60
diff changeset
70 ngx_conf_set_num_slot,
6753e8cdaa2c nginx-0.0.1-2004-01-30-20:39:00 import
Igor Sysoev <igor@sysoev.ru>
parents: 60
diff changeset
71 0,
260
5dacbb4daaf6 nginx-0.0.2-2004-02-17-20:53:12 import
Igor Sysoev <igor@sysoev.ru>
parents: 247
diff changeset
72 offsetof(ngx_rtsig_conf_t, signo),
246
6753e8cdaa2c nginx-0.0.1-2004-01-30-20:39:00 import
Igor Sysoev <igor@sysoev.ru>
parents: 60
diff changeset
73 NULL},
6753e8cdaa2c nginx-0.0.1-2004-01-30-20:39:00 import
Igor Sysoev <igor@sysoev.ru>
parents: 60
diff changeset
74
351
af4c6b45a687 nginx-0.0.4-2004-06-10-22:36:57 import
Igor Sysoev <igor@sysoev.ru>
parents: 350
diff changeset
75 {ngx_string("rtsig_overflow_events"),
af4c6b45a687 nginx-0.0.4-2004-06-10-22:36:57 import
Igor Sysoev <igor@sysoev.ru>
parents: 350
diff changeset
76 NGX_EVENT_CONF|NGX_CONF_TAKE1,
af4c6b45a687 nginx-0.0.4-2004-06-10-22:36:57 import
Igor Sysoev <igor@sysoev.ru>
parents: 350
diff changeset
77 ngx_conf_set_num_slot,
af4c6b45a687 nginx-0.0.4-2004-06-10-22:36:57 import
Igor Sysoev <igor@sysoev.ru>
parents: 350
diff changeset
78 0,
af4c6b45a687 nginx-0.0.4-2004-06-10-22:36:57 import
Igor Sysoev <igor@sysoev.ru>
parents: 350
diff changeset
79 offsetof(ngx_rtsig_conf_t, overflow_events),
af4c6b45a687 nginx-0.0.4-2004-06-10-22:36:57 import
Igor Sysoev <igor@sysoev.ru>
parents: 350
diff changeset
80 NULL},
af4c6b45a687 nginx-0.0.4-2004-06-10-22:36:57 import
Igor Sysoev <igor@sysoev.ru>
parents: 350
diff changeset
81
af4c6b45a687 nginx-0.0.4-2004-06-10-22:36:57 import
Igor Sysoev <igor@sysoev.ru>
parents: 350
diff changeset
82 {ngx_string("rtsig_overflow_test"),
af4c6b45a687 nginx-0.0.4-2004-06-10-22:36:57 import
Igor Sysoev <igor@sysoev.ru>
parents: 350
diff changeset
83 NGX_EVENT_CONF|NGX_CONF_TAKE1,
af4c6b45a687 nginx-0.0.4-2004-06-10-22:36:57 import
Igor Sysoev <igor@sysoev.ru>
parents: 350
diff changeset
84 ngx_conf_set_num_slot,
af4c6b45a687 nginx-0.0.4-2004-06-10-22:36:57 import
Igor Sysoev <igor@sysoev.ru>
parents: 350
diff changeset
85 0,
af4c6b45a687 nginx-0.0.4-2004-06-10-22:36:57 import
Igor Sysoev <igor@sysoev.ru>
parents: 350
diff changeset
86 offsetof(ngx_rtsig_conf_t, overflow_test),
af4c6b45a687 nginx-0.0.4-2004-06-10-22:36:57 import
Igor Sysoev <igor@sysoev.ru>
parents: 350
diff changeset
87 NULL},
af4c6b45a687 nginx-0.0.4-2004-06-10-22:36:57 import
Igor Sysoev <igor@sysoev.ru>
parents: 350
diff changeset
88
af4c6b45a687 nginx-0.0.4-2004-06-10-22:36:57 import
Igor Sysoev <igor@sysoev.ru>
parents: 350
diff changeset
89 {ngx_string("rtsig_overflow_threshold"),
af4c6b45a687 nginx-0.0.4-2004-06-10-22:36:57 import
Igor Sysoev <igor@sysoev.ru>
parents: 350
diff changeset
90 NGX_EVENT_CONF|NGX_CONF_TAKE1,
af4c6b45a687 nginx-0.0.4-2004-06-10-22:36:57 import
Igor Sysoev <igor@sysoev.ru>
parents: 350
diff changeset
91 ngx_conf_set_num_slot,
af4c6b45a687 nginx-0.0.4-2004-06-10-22:36:57 import
Igor Sysoev <igor@sysoev.ru>
parents: 350
diff changeset
92 0,
af4c6b45a687 nginx-0.0.4-2004-06-10-22:36:57 import
Igor Sysoev <igor@sysoev.ru>
parents: 350
diff changeset
93 offsetof(ngx_rtsig_conf_t, overflow_threshold),
af4c6b45a687 nginx-0.0.4-2004-06-10-22:36:57 import
Igor Sysoev <igor@sysoev.ru>
parents: 350
diff changeset
94 &ngx_overflow_threshold_bounds},
af4c6b45a687 nginx-0.0.4-2004-06-10-22:36:57 import
Igor Sysoev <igor@sysoev.ru>
parents: 350
diff changeset
95
246
6753e8cdaa2c nginx-0.0.1-2004-01-30-20:39:00 import
Igor Sysoev <igor@sysoev.ru>
parents: 60
diff changeset
96 ngx_null_command
6753e8cdaa2c nginx-0.0.1-2004-01-30-20:39:00 import
Igor Sysoev <igor@sysoev.ru>
parents: 60
diff changeset
97 };
60
50186b49f2ad nginx-0.0.1-2003-02-11-10:14:40 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
98
50186b49f2ad nginx-0.0.1-2003-02-11-10:14:40 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
99
260
5dacbb4daaf6 nginx-0.0.2-2004-02-17-20:53:12 import
Igor Sysoev <igor@sysoev.ru>
parents: 247
diff changeset
100 ngx_event_module_t ngx_rtsig_module_ctx = {
5dacbb4daaf6 nginx-0.0.2-2004-02-17-20:53:12 import
Igor Sysoev <igor@sysoev.ru>
parents: 247
diff changeset
101 &rtsig_name,
5dacbb4daaf6 nginx-0.0.2-2004-02-17-20:53:12 import
Igor Sysoev <igor@sysoev.ru>
parents: 247
diff changeset
102 ngx_rtsig_create_conf, /* create configuration */
5dacbb4daaf6 nginx-0.0.2-2004-02-17-20:53:12 import
Igor Sysoev <igor@sysoev.ru>
parents: 247
diff changeset
103 ngx_rtsig_init_conf, /* init configuration */
246
6753e8cdaa2c nginx-0.0.1-2004-01-30-20:39:00 import
Igor Sysoev <igor@sysoev.ru>
parents: 60
diff changeset
104
6753e8cdaa2c nginx-0.0.1-2004-01-30-20:39:00 import
Igor Sysoev <igor@sysoev.ru>
parents: 60
diff changeset
105 {
260
5dacbb4daaf6 nginx-0.0.2-2004-02-17-20:53:12 import
Igor Sysoev <igor@sysoev.ru>
parents: 247
diff changeset
106 NULL, /* add an event */
5dacbb4daaf6 nginx-0.0.2-2004-02-17-20:53:12 import
Igor Sysoev <igor@sysoev.ru>
parents: 247
diff changeset
107 NULL, /* delete an event */
5dacbb4daaf6 nginx-0.0.2-2004-02-17-20:53:12 import
Igor Sysoev <igor@sysoev.ru>
parents: 247
diff changeset
108 NULL, /* enable an event */
5dacbb4daaf6 nginx-0.0.2-2004-02-17-20:53:12 import
Igor Sysoev <igor@sysoev.ru>
parents: 247
diff changeset
109 NULL, /* disable an event */
5dacbb4daaf6 nginx-0.0.2-2004-02-17-20:53:12 import
Igor Sysoev <igor@sysoev.ru>
parents: 247
diff changeset
110 ngx_rtsig_add_connection, /* add an connection */
5dacbb4daaf6 nginx-0.0.2-2004-02-17-20:53:12 import
Igor Sysoev <igor@sysoev.ru>
parents: 247
diff changeset
111 ngx_rtsig_del_connection, /* delete an connection */
380
5ce6561246a5 nginx-0.0.7-2004-07-07-10:15:04 import
Igor Sysoev <igor@sysoev.ru>
parents: 375
diff changeset
112 NULL, /* process the changes */
260
5dacbb4daaf6 nginx-0.0.2-2004-02-17-20:53:12 import
Igor Sysoev <igor@sysoev.ru>
parents: 247
diff changeset
113 ngx_rtsig_process_events, /* process the events */
5dacbb4daaf6 nginx-0.0.2-2004-02-17-20:53:12 import
Igor Sysoev <igor@sysoev.ru>
parents: 247
diff changeset
114 ngx_rtsig_init, /* init the events */
5dacbb4daaf6 nginx-0.0.2-2004-02-17-20:53:12 import
Igor Sysoev <igor@sysoev.ru>
parents: 247
diff changeset
115 ngx_rtsig_done, /* done the events */
246
6753e8cdaa2c nginx-0.0.1-2004-01-30-20:39:00 import
Igor Sysoev <igor@sysoev.ru>
parents: 60
diff changeset
116 }
6753e8cdaa2c nginx-0.0.1-2004-01-30-20:39:00 import
Igor Sysoev <igor@sysoev.ru>
parents: 60
diff changeset
117
6753e8cdaa2c nginx-0.0.1-2004-01-30-20:39:00 import
Igor Sysoev <igor@sysoev.ru>
parents: 60
diff changeset
118 };
6753e8cdaa2c nginx-0.0.1-2004-01-30-20:39:00 import
Igor Sysoev <igor@sysoev.ru>
parents: 60
diff changeset
119
260
5dacbb4daaf6 nginx-0.0.2-2004-02-17-20:53:12 import
Igor Sysoev <igor@sysoev.ru>
parents: 247
diff changeset
120 ngx_module_t ngx_rtsig_module = {
246
6753e8cdaa2c nginx-0.0.1-2004-01-30-20:39:00 import
Igor Sysoev <igor@sysoev.ru>
parents: 60
diff changeset
121 NGX_MODULE,
260
5dacbb4daaf6 nginx-0.0.2-2004-02-17-20:53:12 import
Igor Sysoev <igor@sysoev.ru>
parents: 247
diff changeset
122 &ngx_rtsig_module_ctx, /* module context */
5dacbb4daaf6 nginx-0.0.2-2004-02-17-20:53:12 import
Igor Sysoev <igor@sysoev.ru>
parents: 247
diff changeset
123 ngx_rtsig_commands, /* module directives */
246
6753e8cdaa2c nginx-0.0.1-2004-01-30-20:39:00 import
Igor Sysoev <igor@sysoev.ru>
parents: 60
diff changeset
124 NGX_EVENT_MODULE, /* module type */
6753e8cdaa2c nginx-0.0.1-2004-01-30-20:39:00 import
Igor Sysoev <igor@sysoev.ru>
parents: 60
diff changeset
125 NULL, /* init module */
380
5ce6561246a5 nginx-0.0.7-2004-07-07-10:15:04 import
Igor Sysoev <igor@sysoev.ru>
parents: 375
diff changeset
126 NULL /* init process */
246
6753e8cdaa2c nginx-0.0.1-2004-01-30-20:39:00 import
Igor Sysoev <igor@sysoev.ru>
parents: 60
diff changeset
127 };
6753e8cdaa2c nginx-0.0.1-2004-01-30-20:39:00 import
Igor Sysoev <igor@sysoev.ru>
parents: 60
diff changeset
128
6753e8cdaa2c nginx-0.0.1-2004-01-30-20:39:00 import
Igor Sysoev <igor@sysoev.ru>
parents: 60
diff changeset
129
348
68ff8000a974 nginx-0.0.3-2004-06-09-11:45:27 import
Igor Sysoev <igor@sysoev.ru>
parents: 346
diff changeset
130 static ngx_int_t ngx_rtsig_init(ngx_cycle_t *cycle)
60
50186b49f2ad nginx-0.0.1-2003-02-11-10:14:40 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
131 {
260
5dacbb4daaf6 nginx-0.0.2-2004-02-17-20:53:12 import
Igor Sysoev <igor@sysoev.ru>
parents: 247
diff changeset
132 ngx_rtsig_conf_t *rtscf;
246
6753e8cdaa2c nginx-0.0.1-2004-01-30-20:39:00 import
Igor Sysoev <igor@sysoev.ru>
parents: 60
diff changeset
133
260
5dacbb4daaf6 nginx-0.0.2-2004-02-17-20:53:12 import
Igor Sysoev <igor@sysoev.ru>
parents: 247
diff changeset
134 rtscf = ngx_event_get_conf(cycle->conf_ctx, ngx_rtsig_module);
246
6753e8cdaa2c nginx-0.0.1-2004-01-30-20:39:00 import
Igor Sysoev <igor@sysoev.ru>
parents: 60
diff changeset
135
6753e8cdaa2c nginx-0.0.1-2004-01-30-20:39:00 import
Igor Sysoev <igor@sysoev.ru>
parents: 60
diff changeset
136 sigemptyset(&set);
260
5dacbb4daaf6 nginx-0.0.2-2004-02-17-20:53:12 import
Igor Sysoev <igor@sysoev.ru>
parents: 247
diff changeset
137 sigaddset(&set, rtscf->signo);
344
e366ba5db8f8 nginx-0.0.3-2004-06-01-10:04:46 import
Igor Sysoev <igor@sysoev.ru>
parents: 328
diff changeset
138 sigaddset(&set, rtscf->signo + 1);
246
6753e8cdaa2c nginx-0.0.1-2004-01-30-20:39:00 import
Igor Sysoev <igor@sysoev.ru>
parents: 60
diff changeset
139 sigaddset(&set, SIGIO);
6753e8cdaa2c nginx-0.0.1-2004-01-30-20:39:00 import
Igor Sysoev <igor@sysoev.ru>
parents: 60
diff changeset
140
6753e8cdaa2c nginx-0.0.1-2004-01-30-20:39:00 import
Igor Sysoev <igor@sysoev.ru>
parents: 60
diff changeset
141 if (sigprocmask(SIG_BLOCK, &set, NULL) == -1) {
6753e8cdaa2c nginx-0.0.1-2004-01-30-20:39:00 import
Igor Sysoev <igor@sysoev.ru>
parents: 60
diff changeset
142 ngx_log_error(NGX_LOG_EMERG, cycle->log, ngx_errno,
6753e8cdaa2c nginx-0.0.1-2004-01-30-20:39:00 import
Igor Sysoev <igor@sysoev.ru>
parents: 60
diff changeset
143 "sigprocmask() failed");
6753e8cdaa2c nginx-0.0.1-2004-01-30-20:39:00 import
Igor Sysoev <igor@sysoev.ru>
parents: 60
diff changeset
144 return NGX_ERROR;
6753e8cdaa2c nginx-0.0.1-2004-01-30-20:39:00 import
Igor Sysoev <igor@sysoev.ru>
parents: 60
diff changeset
145 }
6753e8cdaa2c nginx-0.0.1-2004-01-30-20:39:00 import
Igor Sysoev <igor@sysoev.ru>
parents: 60
diff changeset
146
351
af4c6b45a687 nginx-0.0.4-2004-06-10-22:36:57 import
Igor Sysoev <igor@sysoev.ru>
parents: 350
diff changeset
147 if (overflow_list) {
af4c6b45a687 nginx-0.0.4-2004-06-10-22:36:57 import
Igor Sysoev <igor@sysoev.ru>
parents: 350
diff changeset
148 ngx_free(overflow_list);
af4c6b45a687 nginx-0.0.4-2004-06-10-22:36:57 import
Igor Sysoev <igor@sysoev.ru>
parents: 350
diff changeset
149 }
af4c6b45a687 nginx-0.0.4-2004-06-10-22:36:57 import
Igor Sysoev <igor@sysoev.ru>
parents: 350
diff changeset
150
af4c6b45a687 nginx-0.0.4-2004-06-10-22:36:57 import
Igor Sysoev <igor@sysoev.ru>
parents: 350
diff changeset
151 overflow_list = ngx_alloc(sizeof(struct pollfd) * rtscf->overflow_events,
af4c6b45a687 nginx-0.0.4-2004-06-10-22:36:57 import
Igor Sysoev <igor@sysoev.ru>
parents: 350
diff changeset
152 cycle->log);
af4c6b45a687 nginx-0.0.4-2004-06-10-22:36:57 import
Igor Sysoev <igor@sysoev.ru>
parents: 350
diff changeset
153 if (overflow_list == NULL) {
af4c6b45a687 nginx-0.0.4-2004-06-10-22:36:57 import
Igor Sysoev <igor@sysoev.ru>
parents: 350
diff changeset
154 return NGX_ERROR;
af4c6b45a687 nginx-0.0.4-2004-06-10-22:36:57 import
Igor Sysoev <igor@sysoev.ru>
parents: 350
diff changeset
155 }
af4c6b45a687 nginx-0.0.4-2004-06-10-22:36:57 import
Igor Sysoev <igor@sysoev.ru>
parents: 350
diff changeset
156
246
6753e8cdaa2c nginx-0.0.1-2004-01-30-20:39:00 import
Igor Sysoev <igor@sysoev.ru>
parents: 60
diff changeset
157 ngx_io = ngx_os_io;
6753e8cdaa2c nginx-0.0.1-2004-01-30-20:39:00 import
Igor Sysoev <igor@sysoev.ru>
parents: 60
diff changeset
158
260
5dacbb4daaf6 nginx-0.0.2-2004-02-17-20:53:12 import
Igor Sysoev <igor@sysoev.ru>
parents: 247
diff changeset
159 ngx_event_actions = ngx_rtsig_module_ctx.actions;
246
6753e8cdaa2c nginx-0.0.1-2004-01-30-20:39:00 import
Igor Sysoev <igor@sysoev.ru>
parents: 60
diff changeset
160
455
295d97d70c69 nginx-0.1.2-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 452
diff changeset
161 ngx_event_flags = NGX_USE_RTSIG_EVENT|NGX_USE_GREEDY_EVENT;
246
6753e8cdaa2c nginx-0.0.1-2004-01-30-20:39:00 import
Igor Sysoev <igor@sysoev.ru>
parents: 60
diff changeset
162
6753e8cdaa2c nginx-0.0.1-2004-01-30-20:39:00 import
Igor Sysoev <igor@sysoev.ru>
parents: 60
diff changeset
163 return NGX_OK;
6753e8cdaa2c nginx-0.0.1-2004-01-30-20:39:00 import
Igor Sysoev <igor@sysoev.ru>
parents: 60
diff changeset
164 }
6753e8cdaa2c nginx-0.0.1-2004-01-30-20:39:00 import
Igor Sysoev <igor@sysoev.ru>
parents: 60
diff changeset
165
6753e8cdaa2c nginx-0.0.1-2004-01-30-20:39:00 import
Igor Sysoev <igor@sysoev.ru>
parents: 60
diff changeset
166
260
5dacbb4daaf6 nginx-0.0.2-2004-02-17-20:53:12 import
Igor Sysoev <igor@sysoev.ru>
parents: 247
diff changeset
167 static void ngx_rtsig_done(ngx_cycle_t *cycle)
246
6753e8cdaa2c nginx-0.0.1-2004-01-30-20:39:00 import
Igor Sysoev <igor@sysoev.ru>
parents: 60
diff changeset
168 {
452
23fb87bddda1 nginx-0.1.1-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 444
diff changeset
169 ngx_free(overflow_list);
23fb87bddda1 nginx-0.1.1-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 444
diff changeset
170
23fb87bddda1 nginx-0.1.1-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 444
diff changeset
171 overflow_list = NULL;
246
6753e8cdaa2c nginx-0.0.1-2004-01-30-20:39:00 import
Igor Sysoev <igor@sysoev.ru>
parents: 60
diff changeset
172 }
6753e8cdaa2c nginx-0.0.1-2004-01-30-20:39:00 import
Igor Sysoev <igor@sysoev.ru>
parents: 60
diff changeset
173
60
50186b49f2ad nginx-0.0.1-2003-02-11-10:14:40 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
174
348
68ff8000a974 nginx-0.0.3-2004-06-09-11:45:27 import
Igor Sysoev <igor@sysoev.ru>
parents: 346
diff changeset
175 static ngx_int_t ngx_rtsig_add_connection(ngx_connection_t *c)
246
6753e8cdaa2c nginx-0.0.1-2004-01-30-20:39:00 import
Igor Sysoev <igor@sysoev.ru>
parents: 60
diff changeset
176 {
344
e366ba5db8f8 nginx-0.0.3-2004-06-01-10:04:46 import
Igor Sysoev <igor@sysoev.ru>
parents: 328
diff changeset
177 int signo;
260
5dacbb4daaf6 nginx-0.0.2-2004-02-17-20:53:12 import
Igor Sysoev <igor@sysoev.ru>
parents: 247
diff changeset
178 ngx_rtsig_conf_t *rtscf;
246
6753e8cdaa2c nginx-0.0.1-2004-01-30-20:39:00 import
Igor Sysoev <igor@sysoev.ru>
parents: 60
diff changeset
179
349
a958aa92f9a5 nginx-0.0.4-2004-06-09-20:36:55 import
Igor Sysoev <igor@sysoev.ru>
parents: 348
diff changeset
180 if (c->read->accept && c->read->disabled) {
354
eaf1f651cf86 nginx-0.0.7-2004-06-15-11:55:11 import
Igor Sysoev <igor@sysoev.ru>
parents: 352
diff changeset
181
eaf1f651cf86 nginx-0.0.7-2004-06-15-11:55:11 import
Igor Sysoev <igor@sysoev.ru>
parents: 352
diff changeset
182 ngx_log_debug1(NGX_LOG_DEBUG_EVENT, c->log, 0,
eaf1f651cf86 nginx-0.0.7-2004-06-15-11:55:11 import
Igor Sysoev <igor@sysoev.ru>
parents: 352
diff changeset
183 "rtsig enable connection: fd:%d", c->fd);
eaf1f651cf86 nginx-0.0.7-2004-06-15-11:55:11 import
Igor Sysoev <igor@sysoev.ru>
parents: 352
diff changeset
184
349
a958aa92f9a5 nginx-0.0.4-2004-06-09-20:36:55 import
Igor Sysoev <igor@sysoev.ru>
parents: 348
diff changeset
185 if (fcntl(c->fd, F_SETOWN, ngx_pid) == -1) {
a958aa92f9a5 nginx-0.0.4-2004-06-09-20:36:55 import
Igor Sysoev <igor@sysoev.ru>
parents: 348
diff changeset
186 ngx_log_error(NGX_LOG_ALERT, c->log, ngx_errno,
a958aa92f9a5 nginx-0.0.4-2004-06-09-20:36:55 import
Igor Sysoev <igor@sysoev.ru>
parents: 348
diff changeset
187 "fcntl(F_SETOWN) failed");
a958aa92f9a5 nginx-0.0.4-2004-06-09-20:36:55 import
Igor Sysoev <igor@sysoev.ru>
parents: 348
diff changeset
188 return NGX_ERROR;
a958aa92f9a5 nginx-0.0.4-2004-06-09-20:36:55 import
Igor Sysoev <igor@sysoev.ru>
parents: 348
diff changeset
189 }
a958aa92f9a5 nginx-0.0.4-2004-06-09-20:36:55 import
Igor Sysoev <igor@sysoev.ru>
parents: 348
diff changeset
190
a958aa92f9a5 nginx-0.0.4-2004-06-09-20:36:55 import
Igor Sysoev <igor@sysoev.ru>
parents: 348
diff changeset
191 c->read->active = 1;
a958aa92f9a5 nginx-0.0.4-2004-06-09-20:36:55 import
Igor Sysoev <igor@sysoev.ru>
parents: 348
diff changeset
192 c->read->disabled = 0;
a958aa92f9a5 nginx-0.0.4-2004-06-09-20:36:55 import
Igor Sysoev <igor@sysoev.ru>
parents: 348
diff changeset
193 }
a958aa92f9a5 nginx-0.0.4-2004-06-09-20:36:55 import
Igor Sysoev <igor@sysoev.ru>
parents: 348
diff changeset
194
260
5dacbb4daaf6 nginx-0.0.2-2004-02-17-20:53:12 import
Igor Sysoev <igor@sysoev.ru>
parents: 247
diff changeset
195 rtscf = ngx_event_get_conf(ngx_cycle->conf_ctx, ngx_rtsig_module);
246
6753e8cdaa2c nginx-0.0.1-2004-01-30-20:39:00 import
Igor Sysoev <igor@sysoev.ru>
parents: 60
diff changeset
196
344
e366ba5db8f8 nginx-0.0.3-2004-06-01-10:04:46 import
Igor Sysoev <igor@sysoev.ru>
parents: 328
diff changeset
197 signo = rtscf->signo + c->read->instance;
e366ba5db8f8 nginx-0.0.3-2004-06-01-10:04:46 import
Igor Sysoev <igor@sysoev.ru>
parents: 328
diff changeset
198
246
6753e8cdaa2c nginx-0.0.1-2004-01-30-20:39:00 import
Igor Sysoev <igor@sysoev.ru>
parents: 60
diff changeset
199 ngx_log_debug2(NGX_LOG_DEBUG_EVENT, c->log, 0,
344
e366ba5db8f8 nginx-0.0.3-2004-06-01-10:04:46 import
Igor Sysoev <igor@sysoev.ru>
parents: 328
diff changeset
200 "rtsig add connection: fd:%d signo:%d", c->fd, signo);
60
50186b49f2ad nginx-0.0.1-2003-02-11-10:14:40 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
201
50186b49f2ad nginx-0.0.1-2003-02-11-10:14:40 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
202 if (fcntl(c->fd, F_SETFL, O_RDWR|O_NONBLOCK|O_ASYNC) == -1) {
246
6753e8cdaa2c nginx-0.0.1-2004-01-30-20:39:00 import
Igor Sysoev <igor@sysoev.ru>
parents: 60
diff changeset
203 ngx_log_error(NGX_LOG_ALERT, c->log, ngx_errno,
60
50186b49f2ad nginx-0.0.1-2003-02-11-10:14:40 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
204 "fcntl(O_RDWR|O_NONBLOCK|O_ASYNC) failed");
50186b49f2ad nginx-0.0.1-2003-02-11-10:14:40 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
205 return NGX_ERROR;
50186b49f2ad nginx-0.0.1-2003-02-11-10:14:40 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
206 }
50186b49f2ad nginx-0.0.1-2003-02-11-10:14:40 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
207
344
e366ba5db8f8 nginx-0.0.3-2004-06-01-10:04:46 import
Igor Sysoev <igor@sysoev.ru>
parents: 328
diff changeset
208 if (fcntl(c->fd, F_SETSIG, signo) == -1) {
246
6753e8cdaa2c nginx-0.0.1-2004-01-30-20:39:00 import
Igor Sysoev <igor@sysoev.ru>
parents: 60
diff changeset
209 ngx_log_error(NGX_LOG_ALERT, c->log, ngx_errno,
60
50186b49f2ad nginx-0.0.1-2003-02-11-10:14:40 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
210 "fcntl(F_SETSIG) failed");
50186b49f2ad nginx-0.0.1-2003-02-11-10:14:40 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
211 return NGX_ERROR;
50186b49f2ad nginx-0.0.1-2003-02-11-10:14:40 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
212 }
50186b49f2ad nginx-0.0.1-2003-02-11-10:14:40 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
213
344
e366ba5db8f8 nginx-0.0.3-2004-06-01-10:04:46 import
Igor Sysoev <igor@sysoev.ru>
parents: 328
diff changeset
214 if (fcntl(c->fd, F_SETOWN, ngx_pid) == -1) {
246
6753e8cdaa2c nginx-0.0.1-2004-01-30-20:39:00 import
Igor Sysoev <igor@sysoev.ru>
parents: 60
diff changeset
215 ngx_log_error(NGX_LOG_ALERT, c->log, ngx_errno,
60
50186b49f2ad nginx-0.0.1-2003-02-11-10:14:40 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
216 "fcntl(F_SETOWN) failed");
50186b49f2ad nginx-0.0.1-2003-02-11-10:14:40 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
217 return NGX_ERROR;
50186b49f2ad nginx-0.0.1-2003-02-11-10:14:40 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
218 }
50186b49f2ad nginx-0.0.1-2003-02-11-10:14:40 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
219
469
2ff194b74f1e nginx-0.1.9-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 461
diff changeset
220 #if (NGX_HAVE_ONESIGFD)
60
50186b49f2ad nginx-0.0.1-2003-02-11-10:14:40 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
221 if (fcntl(c->fd, F_SETAUXFL, O_ONESIGFD) == -1) {
246
6753e8cdaa2c nginx-0.0.1-2004-01-30-20:39:00 import
Igor Sysoev <igor@sysoev.ru>
parents: 60
diff changeset
222 ngx_log_error(NGX_LOG_ALERT, c->log, ngx_errno,
60
50186b49f2ad nginx-0.0.1-2003-02-11-10:14:40 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
223 "fcntl(F_SETAUXFL) failed");
50186b49f2ad nginx-0.0.1-2003-02-11-10:14:40 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
224 return NGX_ERROR;
50186b49f2ad nginx-0.0.1-2003-02-11-10:14:40 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
225 }
50186b49f2ad nginx-0.0.1-2003-02-11-10:14:40 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
226 #endif
50186b49f2ad nginx-0.0.1-2003-02-11-10:14:40 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
227
246
6753e8cdaa2c nginx-0.0.1-2004-01-30-20:39:00 import
Igor Sysoev <igor@sysoev.ru>
parents: 60
diff changeset
228 c->read->active = 1;
6753e8cdaa2c nginx-0.0.1-2004-01-30-20:39:00 import
Igor Sysoev <igor@sysoev.ru>
parents: 60
diff changeset
229 c->write->active = 1;
6753e8cdaa2c nginx-0.0.1-2004-01-30-20:39:00 import
Igor Sysoev <igor@sysoev.ru>
parents: 60
diff changeset
230
60
50186b49f2ad nginx-0.0.1-2003-02-11-10:14:40 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
231 return NGX_OK;
50186b49f2ad nginx-0.0.1-2003-02-11-10:14:40 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
232 }
50186b49f2ad nginx-0.0.1-2003-02-11-10:14:40 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
233
246
6753e8cdaa2c nginx-0.0.1-2004-01-30-20:39:00 import
Igor Sysoev <igor@sysoev.ru>
parents: 60
diff changeset
234
348
68ff8000a974 nginx-0.0.3-2004-06-09-11:45:27 import
Igor Sysoev <igor@sysoev.ru>
parents: 346
diff changeset
235 static ngx_int_t ngx_rtsig_del_connection(ngx_connection_t *c, u_int flags)
246
6753e8cdaa2c nginx-0.0.1-2004-01-30-20:39:00 import
Igor Sysoev <igor@sysoev.ru>
parents: 60
diff changeset
236 {
344
e366ba5db8f8 nginx-0.0.3-2004-06-01-10:04:46 import
Igor Sysoev <igor@sysoev.ru>
parents: 328
diff changeset
237 ngx_log_debug1(NGX_LOG_DEBUG_EVENT, c->log, 0,
e366ba5db8f8 nginx-0.0.3-2004-06-01-10:04:46 import
Igor Sysoev <igor@sysoev.ru>
parents: 328
diff changeset
238 "rtsig del connection: fd:%d", c->fd);
e366ba5db8f8 nginx-0.0.3-2004-06-01-10:04:46 import
Igor Sysoev <igor@sysoev.ru>
parents: 328
diff changeset
239
349
a958aa92f9a5 nginx-0.0.4-2004-06-09-20:36:55 import
Igor Sysoev <igor@sysoev.ru>
parents: 348
diff changeset
240 if ((flags & NGX_DISABLE_EVENT) && c->read->accept) {
354
eaf1f651cf86 nginx-0.0.7-2004-06-15-11:55:11 import
Igor Sysoev <igor@sysoev.ru>
parents: 352
diff changeset
241
eaf1f651cf86 nginx-0.0.7-2004-06-15-11:55:11 import
Igor Sysoev <igor@sysoev.ru>
parents: 352
diff changeset
242 ngx_log_debug1(NGX_LOG_DEBUG_EVENT, c->log, 0,
eaf1f651cf86 nginx-0.0.7-2004-06-15-11:55:11 import
Igor Sysoev <igor@sysoev.ru>
parents: 352
diff changeset
243 "rtsig disable connection: fd:%d", c->fd);
eaf1f651cf86 nginx-0.0.7-2004-06-15-11:55:11 import
Igor Sysoev <igor@sysoev.ru>
parents: 352
diff changeset
244
349
a958aa92f9a5 nginx-0.0.4-2004-06-09-20:36:55 import
Igor Sysoev <igor@sysoev.ru>
parents: 348
diff changeset
245 c->read->active = 0;
354
eaf1f651cf86 nginx-0.0.7-2004-06-15-11:55:11 import
Igor Sysoev <igor@sysoev.ru>
parents: 352
diff changeset
246 c->read->disabled = 1;
349
a958aa92f9a5 nginx-0.0.4-2004-06-09-20:36:55 import
Igor Sysoev <igor@sysoev.ru>
parents: 348
diff changeset
247 return NGX_OK;
a958aa92f9a5 nginx-0.0.4-2004-06-09-20:36:55 import
Igor Sysoev <igor@sysoev.ru>
parents: 348
diff changeset
248 }
a958aa92f9a5 nginx-0.0.4-2004-06-09-20:36:55 import
Igor Sysoev <igor@sysoev.ru>
parents: 348
diff changeset
249
a958aa92f9a5 nginx-0.0.4-2004-06-09-20:36:55 import
Igor Sysoev <igor@sysoev.ru>
parents: 348
diff changeset
250 if (flags & NGX_CLOSE_EVENT) {
a958aa92f9a5 nginx-0.0.4-2004-06-09-20:36:55 import
Igor Sysoev <igor@sysoev.ru>
parents: 348
diff changeset
251 c->read->active = 0;
a958aa92f9a5 nginx-0.0.4-2004-06-09-20:36:55 import
Igor Sysoev <igor@sysoev.ru>
parents: 348
diff changeset
252 c->write->active = 0;
a958aa92f9a5 nginx-0.0.4-2004-06-09-20:36:55 import
Igor Sysoev <igor@sysoev.ru>
parents: 348
diff changeset
253 return NGX_OK;
a958aa92f9a5 nginx-0.0.4-2004-06-09-20:36:55 import
Igor Sysoev <igor@sysoev.ru>
parents: 348
diff changeset
254 }
a958aa92f9a5 nginx-0.0.4-2004-06-09-20:36:55 import
Igor Sysoev <igor@sysoev.ru>
parents: 348
diff changeset
255
a958aa92f9a5 nginx-0.0.4-2004-06-09-20:36:55 import
Igor Sysoev <igor@sysoev.ru>
parents: 348
diff changeset
256 if (fcntl(c->fd, F_SETFL, O_RDWR|O_NONBLOCK) == -1) {
a958aa92f9a5 nginx-0.0.4-2004-06-09-20:36:55 import
Igor Sysoev <igor@sysoev.ru>
parents: 348
diff changeset
257 ngx_log_error(NGX_LOG_ALERT, c->log, ngx_errno,
a958aa92f9a5 nginx-0.0.4-2004-06-09-20:36:55 import
Igor Sysoev <igor@sysoev.ru>
parents: 348
diff changeset
258 "fcntl(O_RDWR|O_NONBLOCK) failed");
a958aa92f9a5 nginx-0.0.4-2004-06-09-20:36:55 import
Igor Sysoev <igor@sysoev.ru>
parents: 348
diff changeset
259 return NGX_ERROR;
261
bdd631bf1a1c nginx-0.0.2-2004-02-18-00:11:27 import
Igor Sysoev <igor@sysoev.ru>
parents: 260
diff changeset
260 }
bdd631bf1a1c nginx-0.0.2-2004-02-18-00:11:27 import
Igor Sysoev <igor@sysoev.ru>
parents: 260
diff changeset
261
246
6753e8cdaa2c nginx-0.0.1-2004-01-30-20:39:00 import
Igor Sysoev <igor@sysoev.ru>
parents: 60
diff changeset
262 c->read->active = 0;
6753e8cdaa2c nginx-0.0.1-2004-01-30-20:39:00 import
Igor Sysoev <igor@sysoev.ru>
parents: 60
diff changeset
263 c->write->active = 0;
6753e8cdaa2c nginx-0.0.1-2004-01-30-20:39:00 import
Igor Sysoev <igor@sysoev.ru>
parents: 60
diff changeset
264
6753e8cdaa2c nginx-0.0.1-2004-01-30-20:39:00 import
Igor Sysoev <igor@sysoev.ru>
parents: 60
diff changeset
265 return NGX_OK;
6753e8cdaa2c nginx-0.0.1-2004-01-30-20:39:00 import
Igor Sysoev <igor@sysoev.ru>
parents: 60
diff changeset
266 }
6753e8cdaa2c nginx-0.0.1-2004-01-30-20:39:00 import
Igor Sysoev <igor@sysoev.ru>
parents: 60
diff changeset
267
6753e8cdaa2c nginx-0.0.1-2004-01-30-20:39:00 import
Igor Sysoev <igor@sysoev.ru>
parents: 60
diff changeset
268
348
68ff8000a974 nginx-0.0.3-2004-06-09-11:45:27 import
Igor Sysoev <igor@sysoev.ru>
parents: 346
diff changeset
269 ngx_int_t ngx_rtsig_process_events(ngx_cycle_t *cycle)
60
50186b49f2ad nginx-0.0.1-2003-02-11-10:14:40 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
270 {
246
6753e8cdaa2c nginx-0.0.1-2004-01-30-20:39:00 import
Igor Sysoev <igor@sysoev.ru>
parents: 60
diff changeset
271 int signo;
6753e8cdaa2c nginx-0.0.1-2004-01-30-20:39:00 import
Igor Sysoev <igor@sysoev.ru>
parents: 60
diff changeset
272 ngx_int_t instance, i;
316
a0beefedaf94 nginx-0.0.3-2004-04-15-00:34:05 import
Igor Sysoev <igor@sysoev.ru>
parents: 306
diff changeset
273 ngx_uint_t expire;
246
6753e8cdaa2c nginx-0.0.1-2004-01-30-20:39:00 import
Igor Sysoev <igor@sysoev.ru>
parents: 60
diff changeset
274 size_t n;
6753e8cdaa2c nginx-0.0.1-2004-01-30-20:39:00 import
Igor Sysoev <igor@sysoev.ru>
parents: 60
diff changeset
275 ngx_msec_t timer;
6753e8cdaa2c nginx-0.0.1-2004-01-30-20:39:00 import
Igor Sysoev <igor@sysoev.ru>
parents: 60
diff changeset
276 ngx_err_t err;
6753e8cdaa2c nginx-0.0.1-2004-01-30-20:39:00 import
Igor Sysoev <igor@sysoev.ru>
parents: 60
diff changeset
277 siginfo_t si;
381
02a511569afb nginx-0.0.7-2004-07-07-19:01:00 import
Igor Sysoev <igor@sysoev.ru>
parents: 380
diff changeset
278 ngx_event_t *rev, *wev;
246
6753e8cdaa2c nginx-0.0.1-2004-01-30-20:39:00 import
Igor Sysoev <igor@sysoev.ru>
parents: 60
diff changeset
279 struct timeval tv;
261
bdd631bf1a1c nginx-0.0.2-2004-02-18-00:11:27 import
Igor Sysoev <igor@sysoev.ru>
parents: 260
diff changeset
280 struct timespec ts, *tp;
247
008276b9e061 nginx-0.0.1-2004-02-01-11:10:52 import
Igor Sysoev <igor@sysoev.ru>
parents: 246
diff changeset
281 struct sigaction sa;
316
a0beefedaf94 nginx-0.0.3-2004-04-15-00:34:05 import
Igor Sysoev <igor@sysoev.ru>
parents: 306
diff changeset
282 ngx_epoch_msec_t delta;
246
6753e8cdaa2c nginx-0.0.1-2004-01-30-20:39:00 import
Igor Sysoev <igor@sysoev.ru>
parents: 60
diff changeset
283 ngx_connection_t *c;
260
5dacbb4daaf6 nginx-0.0.2-2004-02-17-20:53:12 import
Igor Sysoev <igor@sysoev.ru>
parents: 247
diff changeset
284 ngx_rtsig_conf_t *rtscf;
60
50186b49f2ad nginx-0.0.1-2003-02-11-10:14:40 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
285
348
68ff8000a974 nginx-0.0.3-2004-06-09-11:45:27 import
Igor Sysoev <igor@sysoev.ru>
parents: 346
diff changeset
286 if (overflow) {
68ff8000a974 nginx-0.0.3-2004-06-09-11:45:27 import
Igor Sysoev <igor@sysoev.ru>
parents: 346
diff changeset
287 timer = 0;
68ff8000a974 nginx-0.0.3-2004-06-09-11:45:27 import
Igor Sysoev <igor@sysoev.ru>
parents: 346
diff changeset
288 expire = 0;
68ff8000a974 nginx-0.0.3-2004-06-09-11:45:27 import
Igor Sysoev <igor@sysoev.ru>
parents: 346
diff changeset
289
68ff8000a974 nginx-0.0.3-2004-06-09-11:45:27 import
Igor Sysoev <igor@sysoev.ru>
parents: 346
diff changeset
290 } else {
68ff8000a974 nginx-0.0.3-2004-06-09-11:45:27 import
Igor Sysoev <igor@sysoev.ru>
parents: 346
diff changeset
291 for ( ;; ) {
68ff8000a974 nginx-0.0.3-2004-06-09-11:45:27 import
Igor Sysoev <igor@sysoev.ru>
parents: 346
diff changeset
292 timer = ngx_event_find_timer();
316
a0beefedaf94 nginx-0.0.3-2004-04-15-00:34:05 import
Igor Sysoev <igor@sysoev.ru>
parents: 306
diff changeset
293
381
02a511569afb nginx-0.0.7-2004-07-07-19:01:00 import
Igor Sysoev <igor@sysoev.ru>
parents: 380
diff changeset
294 #if (NGX_THREADS)
02a511569afb nginx-0.0.7-2004-07-07-19:01:00 import
Igor Sysoev <igor@sysoev.ru>
parents: 380
diff changeset
295
02a511569afb nginx-0.0.7-2004-07-07-19:01:00 import
Igor Sysoev <igor@sysoev.ru>
parents: 380
diff changeset
296 if (timer == NGX_TIMER_ERROR) {
02a511569afb nginx-0.0.7-2004-07-07-19:01:00 import
Igor Sysoev <igor@sysoev.ru>
parents: 380
diff changeset
297 return NGX_ERROR;
02a511569afb nginx-0.0.7-2004-07-07-19:01:00 import
Igor Sysoev <igor@sysoev.ru>
parents: 380
diff changeset
298 }
02a511569afb nginx-0.0.7-2004-07-07-19:01:00 import
Igor Sysoev <igor@sysoev.ru>
parents: 380
diff changeset
299
02a511569afb nginx-0.0.7-2004-07-07-19:01:00 import
Igor Sysoev <igor@sysoev.ru>
parents: 380
diff changeset
300 if (timer == NGX_TIMER_INFINITE || timer > 500) {
02a511569afb nginx-0.0.7-2004-07-07-19:01:00 import
Igor Sysoev <igor@sysoev.ru>
parents: 380
diff changeset
301 timer = 500;
02a511569afb nginx-0.0.7-2004-07-07-19:01:00 import
Igor Sysoev <igor@sysoev.ru>
parents: 380
diff changeset
302 break;
02a511569afb nginx-0.0.7-2004-07-07-19:01:00 import
Igor Sysoev <igor@sysoev.ru>
parents: 380
diff changeset
303 }
02a511569afb nginx-0.0.7-2004-07-07-19:01:00 import
Igor Sysoev <igor@sysoev.ru>
parents: 380
diff changeset
304
02a511569afb nginx-0.0.7-2004-07-07-19:01:00 import
Igor Sysoev <igor@sysoev.ru>
parents: 380
diff changeset
305 #endif
02a511569afb nginx-0.0.7-2004-07-07-19:01:00 import
Igor Sysoev <igor@sysoev.ru>
parents: 380
diff changeset
306
348
68ff8000a974 nginx-0.0.3-2004-06-09-11:45:27 import
Igor Sysoev <igor@sysoev.ru>
parents: 346
diff changeset
307 if (timer != 0) {
68ff8000a974 nginx-0.0.3-2004-06-09-11:45:27 import
Igor Sysoev <igor@sysoev.ru>
parents: 346
diff changeset
308 break;
68ff8000a974 nginx-0.0.3-2004-06-09-11:45:27 import
Igor Sysoev <igor@sysoev.ru>
parents: 346
diff changeset
309 }
68ff8000a974 nginx-0.0.3-2004-06-09-11:45:27 import
Igor Sysoev <igor@sysoev.ru>
parents: 346
diff changeset
310
68ff8000a974 nginx-0.0.3-2004-06-09-11:45:27 import
Igor Sysoev <igor@sysoev.ru>
parents: 346
diff changeset
311 ngx_log_debug0(NGX_LOG_DEBUG_EVENT, cycle->log, 0,
68ff8000a974 nginx-0.0.3-2004-06-09-11:45:27 import
Igor Sysoev <igor@sysoev.ru>
parents: 346
diff changeset
312 "rtsig expired timer");
68ff8000a974 nginx-0.0.3-2004-06-09-11:45:27 import
Igor Sysoev <igor@sysoev.ru>
parents: 346
diff changeset
313
68ff8000a974 nginx-0.0.3-2004-06-09-11:45:27 import
Igor Sysoev <igor@sysoev.ru>
parents: 346
diff changeset
314 ngx_event_expire_timers((ngx_msec_t)
68ff8000a974 nginx-0.0.3-2004-06-09-11:45:27 import
Igor Sysoev <igor@sysoev.ru>
parents: 346
diff changeset
315 (ngx_elapsed_msec - ngx_old_elapsed_msec));
381
02a511569afb nginx-0.0.7-2004-07-07-19:01:00 import
Igor Sysoev <igor@sysoev.ru>
parents: 380
diff changeset
316
02a511569afb nginx-0.0.7-2004-07-07-19:01:00 import
Igor Sysoev <igor@sysoev.ru>
parents: 380
diff changeset
317 if (ngx_posted_events && ngx_threaded) {
02a511569afb nginx-0.0.7-2004-07-07-19:01:00 import
Igor Sysoev <igor@sysoev.ru>
parents: 380
diff changeset
318 ngx_wakeup_worker_thread(cycle);
02a511569afb nginx-0.0.7-2004-07-07-19:01:00 import
Igor Sysoev <igor@sysoev.ru>
parents: 380
diff changeset
319 }
316
a0beefedaf94 nginx-0.0.3-2004-04-15-00:34:05 import
Igor Sysoev <igor@sysoev.ru>
parents: 306
diff changeset
320 }
a0beefedaf94 nginx-0.0.3-2004-04-15-00:34:05 import
Igor Sysoev <igor@sysoev.ru>
parents: 306
diff changeset
321
348
68ff8000a974 nginx-0.0.3-2004-06-09-11:45:27 import
Igor Sysoev <igor@sysoev.ru>
parents: 346
diff changeset
322 expire = 1;
316
a0beefedaf94 nginx-0.0.3-2004-04-15-00:34:05 import
Igor Sysoev <igor@sysoev.ru>
parents: 306
diff changeset
323
348
68ff8000a974 nginx-0.0.3-2004-06-09-11:45:27 import
Igor Sysoev <igor@sysoev.ru>
parents: 346
diff changeset
324 if (ngx_accept_mutex) {
68ff8000a974 nginx-0.0.3-2004-06-09-11:45:27 import
Igor Sysoev <igor@sysoev.ru>
parents: 346
diff changeset
325 if (ngx_accept_disabled > 0) {
68ff8000a974 nginx-0.0.3-2004-06-09-11:45:27 import
Igor Sysoev <igor@sysoev.ru>
parents: 346
diff changeset
326 ngx_accept_disabled--;
323
ba876b26b76d nginx-0.0.3-2004-04-21-22:54:33 import
Igor Sysoev <igor@sysoev.ru>
parents: 318
diff changeset
327
348
68ff8000a974 nginx-0.0.3-2004-06-09-11:45:27 import
Igor Sysoev <igor@sysoev.ru>
parents: 346
diff changeset
328 } else {
354
eaf1f651cf86 nginx-0.0.7-2004-06-15-11:55:11 import
Igor Sysoev <igor@sysoev.ru>
parents: 352
diff changeset
329 ngx_accept_mutex_held = 0;
eaf1f651cf86 nginx-0.0.7-2004-06-15-11:55:11 import
Igor Sysoev <igor@sysoev.ru>
parents: 352
diff changeset
330
348
68ff8000a974 nginx-0.0.3-2004-06-09-11:45:27 import
Igor Sysoev <igor@sysoev.ru>
parents: 346
diff changeset
331 if (ngx_trylock_accept_mutex(cycle) == NGX_ERROR) {
68ff8000a974 nginx-0.0.3-2004-06-09-11:45:27 import
Igor Sysoev <igor@sysoev.ru>
parents: 346
diff changeset
332 return NGX_ERROR;
68ff8000a974 nginx-0.0.3-2004-06-09-11:45:27 import
Igor Sysoev <igor@sysoev.ru>
parents: 346
diff changeset
333 }
316
a0beefedaf94 nginx-0.0.3-2004-04-15-00:34:05 import
Igor Sysoev <igor@sysoev.ru>
parents: 306
diff changeset
334
348
68ff8000a974 nginx-0.0.3-2004-06-09-11:45:27 import
Igor Sysoev <igor@sysoev.ru>
parents: 346
diff changeset
335 if (ngx_accept_mutex_held == 0
68ff8000a974 nginx-0.0.3-2004-06-09-11:45:27 import
Igor Sysoev <igor@sysoev.ru>
parents: 346
diff changeset
336 && (timer == NGX_TIMER_INFINITE
68ff8000a974 nginx-0.0.3-2004-06-09-11:45:27 import
Igor Sysoev <igor@sysoev.ru>
parents: 346
diff changeset
337 || timer > ngx_accept_mutex_delay))
68ff8000a974 nginx-0.0.3-2004-06-09-11:45:27 import
Igor Sysoev <igor@sysoev.ru>
parents: 346
diff changeset
338 {
68ff8000a974 nginx-0.0.3-2004-06-09-11:45:27 import
Igor Sysoev <igor@sysoev.ru>
parents: 346
diff changeset
339 timer = ngx_accept_mutex_delay;
68ff8000a974 nginx-0.0.3-2004-06-09-11:45:27 import
Igor Sysoev <igor@sysoev.ru>
parents: 346
diff changeset
340 expire = 0;
68ff8000a974 nginx-0.0.3-2004-06-09-11:45:27 import
Igor Sysoev <igor@sysoev.ru>
parents: 346
diff changeset
341 }
68ff8000a974 nginx-0.0.3-2004-06-09-11:45:27 import
Igor Sysoev <igor@sysoev.ru>
parents: 346
diff changeset
342 }
316
a0beefedaf94 nginx-0.0.3-2004-04-15-00:34:05 import
Igor Sysoev <igor@sysoev.ru>
parents: 306
diff changeset
343 }
a0beefedaf94 nginx-0.0.3-2004-04-15-00:34:05 import
Igor Sysoev <igor@sysoev.ru>
parents: 306
diff changeset
344 }
a0beefedaf94 nginx-0.0.3-2004-04-15-00:34:05 import
Igor Sysoev <igor@sysoev.ru>
parents: 306
diff changeset
345
a0beefedaf94 nginx-0.0.3-2004-04-15-00:34:05 import
Igor Sysoev <igor@sysoev.ru>
parents: 306
diff changeset
346 if (timer == NGX_TIMER_INFINITE) {
a0beefedaf94 nginx-0.0.3-2004-04-15-00:34:05 import
Igor Sysoev <igor@sysoev.ru>
parents: 306
diff changeset
347 tp = NULL;
a0beefedaf94 nginx-0.0.3-2004-04-15-00:34:05 import
Igor Sysoev <igor@sysoev.ru>
parents: 306
diff changeset
348 expire = 0;
a0beefedaf94 nginx-0.0.3-2004-04-15-00:34:05 import
Igor Sysoev <igor@sysoev.ru>
parents: 306
diff changeset
349
a0beefedaf94 nginx-0.0.3-2004-04-15-00:34:05 import
Igor Sysoev <igor@sysoev.ru>
parents: 306
diff changeset
350 } else {
246
6753e8cdaa2c nginx-0.0.1-2004-01-30-20:39:00 import
Igor Sysoev <igor@sysoev.ru>
parents: 60
diff changeset
351 ts.tv_sec = timer / 1000;
6753e8cdaa2c nginx-0.0.1-2004-01-30-20:39:00 import
Igor Sysoev <igor@sysoev.ru>
parents: 60
diff changeset
352 ts.tv_nsec = (timer % 1000) * 1000000;
261
bdd631bf1a1c nginx-0.0.2-2004-02-18-00:11:27 import
Igor Sysoev <igor@sysoev.ru>
parents: 260
diff changeset
353 tp = &ts;
316
a0beefedaf94 nginx-0.0.3-2004-04-15-00:34:05 import
Igor Sysoev <igor@sysoev.ru>
parents: 306
diff changeset
354 }
261
bdd631bf1a1c nginx-0.0.2-2004-02-18-00:11:27 import
Igor Sysoev <igor@sysoev.ru>
parents: 260
diff changeset
355
316
a0beefedaf94 nginx-0.0.3-2004-04-15-00:34:05 import
Igor Sysoev <igor@sysoev.ru>
parents: 306
diff changeset
356 ngx_old_elapsed_msec = ngx_elapsed_msec;
60
50186b49f2ad nginx-0.0.1-2003-02-11-10:14:40 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
357
305
4b1a3a4acc60 nginx-0.0.3-2004-04-02-19:13:20 import
Igor Sysoev <igor@sysoev.ru>
parents: 262
diff changeset
358 ngx_log_debug1(NGX_LOG_DEBUG_EVENT, cycle->log, 0,
4b1a3a4acc60 nginx-0.0.3-2004-04-02-19:13:20 import
Igor Sysoev <igor@sysoev.ru>
parents: 262
diff changeset
359 "rtsig timer: %d", timer);
246
6753e8cdaa2c nginx-0.0.1-2004-01-30-20:39:00 import
Igor Sysoev <igor@sysoev.ru>
parents: 60
diff changeset
360
381
02a511569afb nginx-0.0.7-2004-07-07-19:01:00 import
Igor Sysoev <igor@sysoev.ru>
parents: 380
diff changeset
361 /* Linux's sigwaitinfo() is sigtimedwait() with the NULL timeout pointer */
261
bdd631bf1a1c nginx-0.0.2-2004-02-18-00:11:27 import
Igor Sysoev <igor@sysoev.ru>
parents: 260
diff changeset
362
bdd631bf1a1c nginx-0.0.2-2004-02-18-00:11:27 import
Igor Sysoev <igor@sysoev.ru>
parents: 260
diff changeset
363 signo = sigtimedwait(&set, &si, tp);
60
50186b49f2ad nginx-0.0.1-2003-02-11-10:14:40 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
364
246
6753e8cdaa2c nginx-0.0.1-2004-01-30-20:39:00 import
Igor Sysoev <igor@sysoev.ru>
parents: 60
diff changeset
365 if (signo == -1) {
6753e8cdaa2c nginx-0.0.1-2004-01-30-20:39:00 import
Igor Sysoev <igor@sysoev.ru>
parents: 60
diff changeset
366 err = ngx_errno;
348
68ff8000a974 nginx-0.0.3-2004-06-09-11:45:27 import
Igor Sysoev <igor@sysoev.ru>
parents: 346
diff changeset
367
382
449c4885dcd1 nginx-0.0.7-2004-07-07-23:48:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 381
diff changeset
368 ngx_log_debug1(NGX_LOG_DEBUG_EVENT, cycle->log, err,
449c4885dcd1 nginx-0.0.7-2004-07-07-23:48:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 381
diff changeset
369 "rtsig signo:%d", signo);
449c4885dcd1 nginx-0.0.7-2004-07-07-23:48:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 381
diff changeset
370
348
68ff8000a974 nginx-0.0.3-2004-06-09-11:45:27 import
Igor Sysoev <igor@sysoev.ru>
parents: 346
diff changeset
371 if (err == NGX_EAGAIN) {
68ff8000a974 nginx-0.0.3-2004-06-09-11:45:27 import
Igor Sysoev <igor@sysoev.ru>
parents: 346
diff changeset
372
68ff8000a974 nginx-0.0.3-2004-06-09-11:45:27 import
Igor Sysoev <igor@sysoev.ru>
parents: 346
diff changeset
373 if (timer == NGX_TIMER_INFINITE) {
68ff8000a974 nginx-0.0.3-2004-06-09-11:45:27 import
Igor Sysoev <igor@sysoev.ru>
parents: 346
diff changeset
374 ngx_accept_mutex_unlock();
68ff8000a974 nginx-0.0.3-2004-06-09-11:45:27 import
Igor Sysoev <igor@sysoev.ru>
parents: 346
diff changeset
375 ngx_log_error(NGX_LOG_ALERT, cycle->log, err,
68ff8000a974 nginx-0.0.3-2004-06-09-11:45:27 import
Igor Sysoev <igor@sysoev.ru>
parents: 346
diff changeset
376 "sigtimedwait() returned EAGAIN without timeout");
68ff8000a974 nginx-0.0.3-2004-06-09-11:45:27 import
Igor Sysoev <igor@sysoev.ru>
parents: 346
diff changeset
377 return NGX_ERROR;
68ff8000a974 nginx-0.0.3-2004-06-09-11:45:27 import
Igor Sysoev <igor@sysoev.ru>
parents: 346
diff changeset
378 }
68ff8000a974 nginx-0.0.3-2004-06-09-11:45:27 import
Igor Sysoev <igor@sysoev.ru>
parents: 346
diff changeset
379
68ff8000a974 nginx-0.0.3-2004-06-09-11:45:27 import
Igor Sysoev <igor@sysoev.ru>
parents: 346
diff changeset
380 err = 0;
68ff8000a974 nginx-0.0.3-2004-06-09-11:45:27 import
Igor Sysoev <igor@sysoev.ru>
parents: 346
diff changeset
381 }
68ff8000a974 nginx-0.0.3-2004-06-09-11:45:27 import
Igor Sysoev <igor@sysoev.ru>
parents: 346
diff changeset
382
246
6753e8cdaa2c nginx-0.0.1-2004-01-30-20:39:00 import
Igor Sysoev <igor@sysoev.ru>
parents: 60
diff changeset
383 } else {
6753e8cdaa2c nginx-0.0.1-2004-01-30-20:39:00 import
Igor Sysoev <igor@sysoev.ru>
parents: 60
diff changeset
384 err = 0;
382
449c4885dcd1 nginx-0.0.7-2004-07-07-23:48:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 381
diff changeset
385 ngx_log_debug3(NGX_LOG_DEBUG_EVENT, cycle->log, 0,
461
a88a3e4e158f nginx-0.1.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 455
diff changeset
386 "rtsig signo:%d fd:%d band:%04Xd",
382
449c4885dcd1 nginx-0.0.7-2004-07-07-23:48:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 381
diff changeset
387 signo, si.si_fd, si.si_band);
246
6753e8cdaa2c nginx-0.0.1-2004-01-30-20:39:00 import
Igor Sysoev <igor@sysoev.ru>
parents: 60
diff changeset
388 }
6753e8cdaa2c nginx-0.0.1-2004-01-30-20:39:00 import
Igor Sysoev <igor@sysoev.ru>
parents: 60
diff changeset
389
6753e8cdaa2c nginx-0.0.1-2004-01-30-20:39:00 import
Igor Sysoev <igor@sysoev.ru>
parents: 60
diff changeset
390 ngx_gettimeofday(&tv);
6753e8cdaa2c nginx-0.0.1-2004-01-30-20:39:00 import
Igor Sysoev <igor@sysoev.ru>
parents: 60
diff changeset
391 ngx_time_update(tv.tv_sec);
60
50186b49f2ad nginx-0.0.1-2003-02-11-10:14:40 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
392
246
6753e8cdaa2c nginx-0.0.1-2004-01-30-20:39:00 import
Igor Sysoev <igor@sysoev.ru>
parents: 60
diff changeset
393 delta = ngx_elapsed_msec;
389
537de4dca8ca nginx-0.0.7-2004-07-13-21:59:12 import
Igor Sysoev <igor@sysoev.ru>
parents: 382
diff changeset
394 ngx_elapsed_msec = (ngx_epoch_msec_t) tv.tv_sec * 1000
537de4dca8ca nginx-0.0.7-2004-07-13-21:59:12 import
Igor Sysoev <igor@sysoev.ru>
parents: 382
diff changeset
395 + tv.tv_usec / 1000 - ngx_start_msec;
246
6753e8cdaa2c nginx-0.0.1-2004-01-30-20:39:00 import
Igor Sysoev <igor@sysoev.ru>
parents: 60
diff changeset
396
261
bdd631bf1a1c nginx-0.0.2-2004-02-18-00:11:27 import
Igor Sysoev <igor@sysoev.ru>
parents: 260
diff changeset
397 if (err) {
344
e366ba5db8f8 nginx-0.0.3-2004-06-01-10:04:46 import
Igor Sysoev <igor@sysoev.ru>
parents: 328
diff changeset
398 ngx_accept_mutex_unlock();
260
5dacbb4daaf6 nginx-0.0.2-2004-02-17-20:53:12 import
Igor Sysoev <igor@sysoev.ru>
parents: 247
diff changeset
399 ngx_log_error((err == NGX_EINTR) ? NGX_LOG_INFO : NGX_LOG_ALERT,
305
4b1a3a4acc60 nginx-0.0.3-2004-04-02-19:13:20 import
Igor Sysoev <igor@sysoev.ru>
parents: 262
diff changeset
400 cycle->log, err, "sigtimedwait() failed");
246
6753e8cdaa2c nginx-0.0.1-2004-01-30-20:39:00 import
Igor Sysoev <igor@sysoev.ru>
parents: 60
diff changeset
401 return NGX_ERROR;
6753e8cdaa2c nginx-0.0.1-2004-01-30-20:39:00 import
Igor Sysoev <igor@sysoev.ru>
parents: 60
diff changeset
402 }
60
50186b49f2ad nginx-0.0.1-2003-02-11-10:14:40 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
403
316
a0beefedaf94 nginx-0.0.3-2004-04-15-00:34:05 import
Igor Sysoev <igor@sysoev.ru>
parents: 306
diff changeset
404 if (timer != NGX_TIMER_INFINITE) {
246
6753e8cdaa2c nginx-0.0.1-2004-01-30-20:39:00 import
Igor Sysoev <igor@sysoev.ru>
parents: 60
diff changeset
405 delta = ngx_elapsed_msec - delta;
6753e8cdaa2c nginx-0.0.1-2004-01-30-20:39:00 import
Igor Sysoev <igor@sysoev.ru>
parents: 60
diff changeset
406
305
4b1a3a4acc60 nginx-0.0.3-2004-04-02-19:13:20 import
Igor Sysoev <igor@sysoev.ru>
parents: 262
diff changeset
407 ngx_log_debug2(NGX_LOG_DEBUG_EVENT, cycle->log, 0,
260
5dacbb4daaf6 nginx-0.0.2-2004-02-17-20:53:12 import
Igor Sysoev <igor@sysoev.ru>
parents: 247
diff changeset
408 "rtsig timer: %d, delta: %d", timer, (int) delta);
246
6753e8cdaa2c nginx-0.0.1-2004-01-30-20:39:00 import
Igor Sysoev <igor@sysoev.ru>
parents: 60
diff changeset
409 }
6753e8cdaa2c nginx-0.0.1-2004-01-30-20:39:00 import
Igor Sysoev <igor@sysoev.ru>
parents: 60
diff changeset
410
260
5dacbb4daaf6 nginx-0.0.2-2004-02-17-20:53:12 import
Igor Sysoev <igor@sysoev.ru>
parents: 247
diff changeset
411 rtscf = ngx_event_get_conf(ngx_cycle->conf_ctx, ngx_rtsig_module);
246
6753e8cdaa2c nginx-0.0.1-2004-01-30-20:39:00 import
Igor Sysoev <igor@sysoev.ru>
parents: 60
diff changeset
412
344
e366ba5db8f8 nginx-0.0.3-2004-06-01-10:04:46 import
Igor Sysoev <igor@sysoev.ru>
parents: 328
diff changeset
413 if (signo == rtscf->signo || signo == rtscf->signo + 1) {
260
5dacbb4daaf6 nginx-0.0.2-2004-02-17-20:53:12 import
Igor Sysoev <igor@sysoev.ru>
parents: 247
diff changeset
414
351
af4c6b45a687 nginx-0.0.4-2004-06-10-22:36:57 import
Igor Sysoev <igor@sysoev.ru>
parents: 350
diff changeset
415 if (overflow && (ngx_uint_t) si.si_fd > overflow_current) {
348
68ff8000a974 nginx-0.0.3-2004-06-09-11:45:27 import
Igor Sysoev <igor@sysoev.ru>
parents: 346
diff changeset
416 return NGX_OK;
68ff8000a974 nginx-0.0.3-2004-06-09-11:45:27 import
Igor Sysoev <igor@sysoev.ru>
parents: 346
diff changeset
417 }
68ff8000a974 nginx-0.0.3-2004-06-09-11:45:27 import
Igor Sysoev <igor@sysoev.ru>
parents: 346
diff changeset
418
260
5dacbb4daaf6 nginx-0.0.2-2004-02-17-20:53:12 import
Igor Sysoev <igor@sysoev.ru>
parents: 247
diff changeset
419 /* TODO: old_cycles */
305
4b1a3a4acc60 nginx-0.0.3-2004-04-02-19:13:20 import
Igor Sysoev <igor@sysoev.ru>
parents: 262
diff changeset
420
247
008276b9e061 nginx-0.0.1-2004-02-01-11:10:52 import
Igor Sysoev <igor@sysoev.ru>
parents: 246
diff changeset
421 c = &ngx_cycle->connections[si.si_fd];
246
6753e8cdaa2c nginx-0.0.1-2004-01-30-20:39:00 import
Igor Sysoev <igor@sysoev.ru>
parents: 60
diff changeset
422
344
e366ba5db8f8 nginx-0.0.3-2004-06-01-10:04:46 import
Igor Sysoev <igor@sysoev.ru>
parents: 328
diff changeset
423 instance = signo - rtscf->signo;
e366ba5db8f8 nginx-0.0.3-2004-06-01-10:04:46 import
Igor Sysoev <igor@sysoev.ru>
parents: 328
diff changeset
424
381
02a511569afb nginx-0.0.7-2004-07-07-19:01:00 import
Igor Sysoev <igor@sysoev.ru>
parents: 380
diff changeset
425 rev = c->read;
344
e366ba5db8f8 nginx-0.0.3-2004-06-01-10:04:46 import
Igor Sysoev <igor@sysoev.ru>
parents: 328
diff changeset
426
e366ba5db8f8 nginx-0.0.3-2004-06-01-10:04:46 import
Igor Sysoev <igor@sysoev.ru>
parents: 328
diff changeset
427 if (c->read->instance != instance) {
e366ba5db8f8 nginx-0.0.3-2004-06-01-10:04:46 import
Igor Sysoev <igor@sysoev.ru>
parents: 328
diff changeset
428
e366ba5db8f8 nginx-0.0.3-2004-06-01-10:04:46 import
Igor Sysoev <igor@sysoev.ru>
parents: 328
diff changeset
429 /*
e366ba5db8f8 nginx-0.0.3-2004-06-01-10:04:46 import
Igor Sysoev <igor@sysoev.ru>
parents: 328
diff changeset
430 * the stale event from a file descriptor
e366ba5db8f8 nginx-0.0.3-2004-06-01-10:04:46 import
Igor Sysoev <igor@sysoev.ru>
parents: 328
diff changeset
431 * that was just closed in this iteration
e366ba5db8f8 nginx-0.0.3-2004-06-01-10:04:46 import
Igor Sysoev <igor@sysoev.ru>
parents: 328
diff changeset
432 */
e366ba5db8f8 nginx-0.0.3-2004-06-01-10:04:46 import
Igor Sysoev <igor@sysoev.ru>
parents: 328
diff changeset
433
e366ba5db8f8 nginx-0.0.3-2004-06-01-10:04:46 import
Igor Sysoev <igor@sysoev.ru>
parents: 328
diff changeset
434 ngx_accept_mutex_unlock();
e366ba5db8f8 nginx-0.0.3-2004-06-01-10:04:46 import
Igor Sysoev <igor@sysoev.ru>
parents: 328
diff changeset
435
e366ba5db8f8 nginx-0.0.3-2004-06-01-10:04:46 import
Igor Sysoev <igor@sysoev.ru>
parents: 328
diff changeset
436 ngx_log_debug1(NGX_LOG_DEBUG_EVENT, cycle->log, 0,
461
a88a3e4e158f nginx-0.1.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 455
diff changeset
437 "rtsig: stale event %p", c);
344
e366ba5db8f8 nginx-0.0.3-2004-06-01-10:04:46 import
Igor Sysoev <igor@sysoev.ru>
parents: 328
diff changeset
438
e366ba5db8f8 nginx-0.0.3-2004-06-01-10:04:46 import
Igor Sysoev <igor@sysoev.ru>
parents: 328
diff changeset
439 return NGX_OK;
e366ba5db8f8 nginx-0.0.3-2004-06-01-10:04:46 import
Igor Sysoev <igor@sysoev.ru>
parents: 328
diff changeset
440 }
260
5dacbb4daaf6 nginx-0.0.2-2004-02-17-20:53:12 import
Igor Sysoev <igor@sysoev.ru>
parents: 247
diff changeset
441
5dacbb4daaf6 nginx-0.0.2-2004-02-17-20:53:12 import
Igor Sysoev <igor@sysoev.ru>
parents: 247
diff changeset
442 if (si.si_band & (POLLIN|POLLHUP|POLLERR)) {
381
02a511569afb nginx-0.0.7-2004-07-07-19:01:00 import
Igor Sysoev <igor@sysoev.ru>
parents: 380
diff changeset
443 if (rev->active) {
316
a0beefedaf94 nginx-0.0.3-2004-04-15-00:34:05 import
Igor Sysoev <igor@sysoev.ru>
parents: 306
diff changeset
444
381
02a511569afb nginx-0.0.7-2004-07-07-19:01:00 import
Igor Sysoev <igor@sysoev.ru>
parents: 380
diff changeset
445 if (ngx_threaded && !rev->accept) {
316
a0beefedaf94 nginx-0.0.3-2004-04-15-00:34:05 import
Igor Sysoev <igor@sysoev.ru>
parents: 306
diff changeset
446 if (ngx_mutex_lock(ngx_posted_events_mutex) == NGX_ERROR) {
a0beefedaf94 nginx-0.0.3-2004-04-15-00:34:05 import
Igor Sysoev <igor@sysoev.ru>
parents: 306
diff changeset
447 ngx_accept_mutex_unlock();
a0beefedaf94 nginx-0.0.3-2004-04-15-00:34:05 import
Igor Sysoev <igor@sysoev.ru>
parents: 306
diff changeset
448 return NGX_ERROR;
a0beefedaf94 nginx-0.0.3-2004-04-15-00:34:05 import
Igor Sysoev <igor@sysoev.ru>
parents: 306
diff changeset
449 }
a0beefedaf94 nginx-0.0.3-2004-04-15-00:34:05 import
Igor Sysoev <igor@sysoev.ru>
parents: 306
diff changeset
450
381
02a511569afb nginx-0.0.7-2004-07-07-19:01:00 import
Igor Sysoev <igor@sysoev.ru>
parents: 380
diff changeset
451 rev->posted_ready = 1;
02a511569afb nginx-0.0.7-2004-07-07-19:01:00 import
Igor Sysoev <igor@sysoev.ru>
parents: 380
diff changeset
452 ngx_post_event(rev);
316
a0beefedaf94 nginx-0.0.3-2004-04-15-00:34:05 import
Igor Sysoev <igor@sysoev.ru>
parents: 306
diff changeset
453
a0beefedaf94 nginx-0.0.3-2004-04-15-00:34:05 import
Igor Sysoev <igor@sysoev.ru>
parents: 306
diff changeset
454 ngx_mutex_unlock(ngx_posted_events_mutex);
381
02a511569afb nginx-0.0.7-2004-07-07-19:01:00 import
Igor Sysoev <igor@sysoev.ru>
parents: 380
diff changeset
455
02a511569afb nginx-0.0.7-2004-07-07-19:01:00 import
Igor Sysoev <igor@sysoev.ru>
parents: 380
diff changeset
456 } else {
02a511569afb nginx-0.0.7-2004-07-07-19:01:00 import
Igor Sysoev <igor@sysoev.ru>
parents: 380
diff changeset
457 rev->ready = 1;
02a511569afb nginx-0.0.7-2004-07-07-19:01:00 import
Igor Sysoev <igor@sysoev.ru>
parents: 380
diff changeset
458
02a511569afb nginx-0.0.7-2004-07-07-19:01:00 import
Igor Sysoev <igor@sysoev.ru>
parents: 380
diff changeset
459 if (!ngx_threaded && !ngx_accept_mutex_held) {
02a511569afb nginx-0.0.7-2004-07-07-19:01:00 import
Igor Sysoev <igor@sysoev.ru>
parents: 380
diff changeset
460 rev->event_handler(rev);
02a511569afb nginx-0.0.7-2004-07-07-19:01:00 import
Igor Sysoev <igor@sysoev.ru>
parents: 380
diff changeset
461
02a511569afb nginx-0.0.7-2004-07-07-19:01:00 import
Igor Sysoev <igor@sysoev.ru>
parents: 380
diff changeset
462 } else if (rev->accept) {
02a511569afb nginx-0.0.7-2004-07-07-19:01:00 import
Igor Sysoev <igor@sysoev.ru>
parents: 380
diff changeset
463 if (ngx_accept_disabled <= 0) {
02a511569afb nginx-0.0.7-2004-07-07-19:01:00 import
Igor Sysoev <igor@sysoev.ru>
parents: 380
diff changeset
464 rev->event_handler(rev);
02a511569afb nginx-0.0.7-2004-07-07-19:01:00 import
Igor Sysoev <igor@sysoev.ru>
parents: 380
diff changeset
465 }
02a511569afb nginx-0.0.7-2004-07-07-19:01:00 import
Igor Sysoev <igor@sysoev.ru>
parents: 380
diff changeset
466
02a511569afb nginx-0.0.7-2004-07-07-19:01:00 import
Igor Sysoev <igor@sysoev.ru>
parents: 380
diff changeset
467 } else {
02a511569afb nginx-0.0.7-2004-07-07-19:01:00 import
Igor Sysoev <igor@sysoev.ru>
parents: 380
diff changeset
468 ngx_post_event(rev);
02a511569afb nginx-0.0.7-2004-07-07-19:01:00 import
Igor Sysoev <igor@sysoev.ru>
parents: 380
diff changeset
469 }
316
a0beefedaf94 nginx-0.0.3-2004-04-15-00:34:05 import
Igor Sysoev <igor@sysoev.ru>
parents: 306
diff changeset
470 }
247
008276b9e061 nginx-0.0.1-2004-02-01-11:10:52 import
Igor Sysoev <igor@sysoev.ru>
parents: 246
diff changeset
471 }
008276b9e061 nginx-0.0.1-2004-02-01-11:10:52 import
Igor Sysoev <igor@sysoev.ru>
parents: 246
diff changeset
472 }
008276b9e061 nginx-0.0.1-2004-02-01-11:10:52 import
Igor Sysoev <igor@sysoev.ru>
parents: 246
diff changeset
473
381
02a511569afb nginx-0.0.7-2004-07-07-19:01:00 import
Igor Sysoev <igor@sysoev.ru>
parents: 380
diff changeset
474 wev = c->write;
316
a0beefedaf94 nginx-0.0.3-2004-04-15-00:34:05 import
Igor Sysoev <igor@sysoev.ru>
parents: 306
diff changeset
475
381
02a511569afb nginx-0.0.7-2004-07-07-19:01:00 import
Igor Sysoev <igor@sysoev.ru>
parents: 380
diff changeset
476 if (si.si_band & (POLLOUT|POLLHUP|POLLERR)) {
02a511569afb nginx-0.0.7-2004-07-07-19:01:00 import
Igor Sysoev <igor@sysoev.ru>
parents: 380
diff changeset
477 if (wev->active) {
316
a0beefedaf94 nginx-0.0.3-2004-04-15-00:34:05 import
Igor Sysoev <igor@sysoev.ru>
parents: 306
diff changeset
478
381
02a511569afb nginx-0.0.7-2004-07-07-19:01:00 import
Igor Sysoev <igor@sysoev.ru>
parents: 380
diff changeset
479 if (ngx_threaded) {
316
a0beefedaf94 nginx-0.0.3-2004-04-15-00:34:05 import
Igor Sysoev <igor@sysoev.ru>
parents: 306
diff changeset
480 if (ngx_mutex_lock(ngx_posted_events_mutex) == NGX_ERROR) {
a0beefedaf94 nginx-0.0.3-2004-04-15-00:34:05 import
Igor Sysoev <igor@sysoev.ru>
parents: 306
diff changeset
481 ngx_accept_mutex_unlock();
a0beefedaf94 nginx-0.0.3-2004-04-15-00:34:05 import
Igor Sysoev <igor@sysoev.ru>
parents: 306
diff changeset
482 return NGX_ERROR;
a0beefedaf94 nginx-0.0.3-2004-04-15-00:34:05 import
Igor Sysoev <igor@sysoev.ru>
parents: 306
diff changeset
483 }
a0beefedaf94 nginx-0.0.3-2004-04-15-00:34:05 import
Igor Sysoev <igor@sysoev.ru>
parents: 306
diff changeset
484
381
02a511569afb nginx-0.0.7-2004-07-07-19:01:00 import
Igor Sysoev <igor@sysoev.ru>
parents: 380
diff changeset
485 wev->posted_ready = 1;
02a511569afb nginx-0.0.7-2004-07-07-19:01:00 import
Igor Sysoev <igor@sysoev.ru>
parents: 380
diff changeset
486 ngx_post_event(wev);
316
a0beefedaf94 nginx-0.0.3-2004-04-15-00:34:05 import
Igor Sysoev <igor@sysoev.ru>
parents: 306
diff changeset
487
a0beefedaf94 nginx-0.0.3-2004-04-15-00:34:05 import
Igor Sysoev <igor@sysoev.ru>
parents: 306
diff changeset
488 ngx_mutex_unlock(ngx_posted_events_mutex);
381
02a511569afb nginx-0.0.7-2004-07-07-19:01:00 import
Igor Sysoev <igor@sysoev.ru>
parents: 380
diff changeset
489
02a511569afb nginx-0.0.7-2004-07-07-19:01:00 import
Igor Sysoev <igor@sysoev.ru>
parents: 380
diff changeset
490 } else {
02a511569afb nginx-0.0.7-2004-07-07-19:01:00 import
Igor Sysoev <igor@sysoev.ru>
parents: 380
diff changeset
491 wev->ready = 1;
02a511569afb nginx-0.0.7-2004-07-07-19:01:00 import
Igor Sysoev <igor@sysoev.ru>
parents: 380
diff changeset
492
02a511569afb nginx-0.0.7-2004-07-07-19:01:00 import
Igor Sysoev <igor@sysoev.ru>
parents: 380
diff changeset
493 if (!ngx_threaded && !ngx_accept_mutex_held) {
02a511569afb nginx-0.0.7-2004-07-07-19:01:00 import
Igor Sysoev <igor@sysoev.ru>
parents: 380
diff changeset
494 wev->event_handler(wev);
02a511569afb nginx-0.0.7-2004-07-07-19:01:00 import
Igor Sysoev <igor@sysoev.ru>
parents: 380
diff changeset
495
02a511569afb nginx-0.0.7-2004-07-07-19:01:00 import
Igor Sysoev <igor@sysoev.ru>
parents: 380
diff changeset
496 } else {
02a511569afb nginx-0.0.7-2004-07-07-19:01:00 import
Igor Sysoev <igor@sysoev.ru>
parents: 380
diff changeset
497 ngx_post_event(wev);
02a511569afb nginx-0.0.7-2004-07-07-19:01:00 import
Igor Sysoev <igor@sysoev.ru>
parents: 380
diff changeset
498 }
316
a0beefedaf94 nginx-0.0.3-2004-04-15-00:34:05 import
Igor Sysoev <igor@sysoev.ru>
parents: 306
diff changeset
499 }
60
50186b49f2ad nginx-0.0.1-2003-02-11-10:14:40 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
500 }
246
6753e8cdaa2c nginx-0.0.1-2004-01-30-20:39:00 import
Igor Sysoev <igor@sysoev.ru>
parents: 60
diff changeset
501 }
6753e8cdaa2c nginx-0.0.1-2004-01-30-20:39:00 import
Igor Sysoev <igor@sysoev.ru>
parents: 60
diff changeset
502
6753e8cdaa2c nginx-0.0.1-2004-01-30-20:39:00 import
Igor Sysoev <igor@sysoev.ru>
parents: 60
diff changeset
503 } else if (signo == SIGIO) {
316
a0beefedaf94 nginx-0.0.3-2004-04-15-00:34:05 import
Igor Sysoev <igor@sysoev.ru>
parents: 306
diff changeset
504 ngx_accept_mutex_unlock();
a0beefedaf94 nginx-0.0.3-2004-04-15-00:34:05 import
Igor Sysoev <igor@sysoev.ru>
parents: 306
diff changeset
505
348
68ff8000a974 nginx-0.0.3-2004-06-09-11:45:27 import
Igor Sysoev <igor@sysoev.ru>
parents: 346
diff changeset
506 ngx_log_error(NGX_LOG_ALERT, cycle->log, 0,
68ff8000a974 nginx-0.0.3-2004-06-09-11:45:27 import
Igor Sysoev <igor@sysoev.ru>
parents: 346
diff changeset
507 "rt signal queue overflowed");
246
6753e8cdaa2c nginx-0.0.1-2004-01-30-20:39:00 import
Igor Sysoev <igor@sysoev.ru>
parents: 60
diff changeset
508
348
68ff8000a974 nginx-0.0.3-2004-06-09-11:45:27 import
Igor Sysoev <igor@sysoev.ru>
parents: 346
diff changeset
509 /* flush the RT signal queue */
261
bdd631bf1a1c nginx-0.0.2-2004-02-18-00:11:27 import
Igor Sysoev <igor@sysoev.ru>
parents: 260
diff changeset
510
247
008276b9e061 nginx-0.0.1-2004-02-01-11:10:52 import
Igor Sysoev <igor@sysoev.ru>
parents: 246
diff changeset
511 ngx_memzero(&sa, sizeof(struct sigaction));
260
5dacbb4daaf6 nginx-0.0.2-2004-02-17-20:53:12 import
Igor Sysoev <igor@sysoev.ru>
parents: 247
diff changeset
512 sa.sa_handler = SIG_DFL;
247
008276b9e061 nginx-0.0.1-2004-02-01-11:10:52 import
Igor Sysoev <igor@sysoev.ru>
parents: 246
diff changeset
513 sigemptyset(&sa.sa_mask);
348
68ff8000a974 nginx-0.0.3-2004-06-09-11:45:27 import
Igor Sysoev <igor@sysoev.ru>
parents: 346
diff changeset
514
260
5dacbb4daaf6 nginx-0.0.2-2004-02-17-20:53:12 import
Igor Sysoev <igor@sysoev.ru>
parents: 247
diff changeset
515 if (sigaction(rtscf->signo, &sa, NULL) == -1) {
305
4b1a3a4acc60 nginx-0.0.3-2004-04-02-19:13:20 import
Igor Sysoev <igor@sysoev.ru>
parents: 262
diff changeset
516 ngx_log_error(NGX_LOG_ALERT, cycle->log, ngx_errno,
260
5dacbb4daaf6 nginx-0.0.2-2004-02-17-20:53:12 import
Igor Sysoev <igor@sysoev.ru>
parents: 247
diff changeset
517 "sigaction(%d, SIG_DFL) failed", rtscf->signo);
247
008276b9e061 nginx-0.0.1-2004-02-01-11:10:52 import
Igor Sysoev <igor@sysoev.ru>
parents: 246
diff changeset
518 }
008276b9e061 nginx-0.0.1-2004-02-01-11:10:52 import
Igor Sysoev <igor@sysoev.ru>
parents: 246
diff changeset
519
348
68ff8000a974 nginx-0.0.3-2004-06-09-11:45:27 import
Igor Sysoev <igor@sysoev.ru>
parents: 346
diff changeset
520 if (sigaction(rtscf->signo + 1, &sa, NULL) == -1) {
68ff8000a974 nginx-0.0.3-2004-06-09-11:45:27 import
Igor Sysoev <igor@sysoev.ru>
parents: 346
diff changeset
521 ngx_log_error(NGX_LOG_ALERT, cycle->log, ngx_errno,
68ff8000a974 nginx-0.0.3-2004-06-09-11:45:27 import
Igor Sysoev <igor@sysoev.ru>
parents: 346
diff changeset
522 "sigaction(%d, SIG_DFL) failed", rtscf->signo + 1);
68ff8000a974 nginx-0.0.3-2004-06-09-11:45:27 import
Igor Sysoev <igor@sysoev.ru>
parents: 346
diff changeset
523 }
261
bdd631bf1a1c nginx-0.0.2-2004-02-18-00:11:27 import
Igor Sysoev <igor@sysoev.ru>
parents: 260
diff changeset
524
348
68ff8000a974 nginx-0.0.3-2004-06-09-11:45:27 import
Igor Sysoev <igor@sysoev.ru>
parents: 346
diff changeset
525 overflow = 1;
351
af4c6b45a687 nginx-0.0.4-2004-06-10-22:36:57 import
Igor Sysoev <igor@sysoev.ru>
parents: 350
diff changeset
526 overflow_current = 0;
380
5ce6561246a5 nginx-0.0.7-2004-07-07-10:15:04 import
Igor Sysoev <igor@sysoev.ru>
parents: 375
diff changeset
527 ngx_event_actions.process_events = ngx_rtsig_process_overflow;
261
bdd631bf1a1c nginx-0.0.2-2004-02-18-00:11:27 import
Igor Sysoev <igor@sysoev.ru>
parents: 260
diff changeset
528
352
694d7ddc3599 nginx-0.0.4-2004-06-11-10:15:08 import
Igor Sysoev <igor@sysoev.ru>
parents: 351
diff changeset
529 return NGX_ERROR;
261
bdd631bf1a1c nginx-0.0.2-2004-02-18-00:11:27 import
Igor Sysoev <igor@sysoev.ru>
parents: 260
diff changeset
530
348
68ff8000a974 nginx-0.0.3-2004-06-09-11:45:27 import
Igor Sysoev <igor@sysoev.ru>
parents: 346
diff changeset
531 } else if (signo != -1) {
344
e366ba5db8f8 nginx-0.0.3-2004-06-01-10:04:46 import
Igor Sysoev <igor@sysoev.ru>
parents: 328
diff changeset
532 ngx_accept_mutex_unlock();
e366ba5db8f8 nginx-0.0.3-2004-06-01-10:04:46 import
Igor Sysoev <igor@sysoev.ru>
parents: 328
diff changeset
533
305
4b1a3a4acc60 nginx-0.0.3-2004-04-02-19:13:20 import
Igor Sysoev <igor@sysoev.ru>
parents: 262
diff changeset
534 ngx_log_error(NGX_LOG_ALERT, cycle->log, 0,
261
bdd631bf1a1c nginx-0.0.2-2004-02-18-00:11:27 import
Igor Sysoev <igor@sysoev.ru>
parents: 260
diff changeset
535 "sigtimedwait() returned unexpected signal: %d", signo);
344
e366ba5db8f8 nginx-0.0.3-2004-06-01-10:04:46 import
Igor Sysoev <igor@sysoev.ru>
parents: 328
diff changeset
536
260
5dacbb4daaf6 nginx-0.0.2-2004-02-17-20:53:12 import
Igor Sysoev <igor@sysoev.ru>
parents: 247
diff changeset
537 return NGX_ERROR;
246
6753e8cdaa2c nginx-0.0.1-2004-01-30-20:39:00 import
Igor Sysoev <igor@sysoev.ru>
parents: 60
diff changeset
538 }
6753e8cdaa2c nginx-0.0.1-2004-01-30-20:39:00 import
Igor Sysoev <igor@sysoev.ru>
parents: 60
diff changeset
539
316
a0beefedaf94 nginx-0.0.3-2004-04-15-00:34:05 import
Igor Sysoev <igor@sysoev.ru>
parents: 306
diff changeset
540 ngx_accept_mutex_unlock();
a0beefedaf94 nginx-0.0.3-2004-04-15-00:34:05 import
Igor Sysoev <igor@sysoev.ru>
parents: 306
diff changeset
541
a0beefedaf94 nginx-0.0.3-2004-04-15-00:34:05 import
Igor Sysoev <igor@sysoev.ru>
parents: 306
diff changeset
542 if (expire && delta) {
246
6753e8cdaa2c nginx-0.0.1-2004-01-30-20:39:00 import
Igor Sysoev <igor@sysoev.ru>
parents: 60
diff changeset
543 ngx_event_expire_timers((ngx_msec_t) delta);
6753e8cdaa2c nginx-0.0.1-2004-01-30-20:39:00 import
Igor Sysoev <igor@sysoev.ru>
parents: 60
diff changeset
544 }
60
50186b49f2ad nginx-0.0.1-2003-02-11-10:14:40 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
545
381
02a511569afb nginx-0.0.7-2004-07-07-19:01:00 import
Igor Sysoev <igor@sysoev.ru>
parents: 380
diff changeset
546 if (ngx_posted_events) {
02a511569afb nginx-0.0.7-2004-07-07-19:01:00 import
Igor Sysoev <igor@sysoev.ru>
parents: 380
diff changeset
547 if (ngx_threaded) {
02a511569afb nginx-0.0.7-2004-07-07-19:01:00 import
Igor Sysoev <igor@sysoev.ru>
parents: 380
diff changeset
548 ngx_wakeup_worker_thread(cycle);
02a511569afb nginx-0.0.7-2004-07-07-19:01:00 import
Igor Sysoev <igor@sysoev.ru>
parents: 380
diff changeset
549
02a511569afb nginx-0.0.7-2004-07-07-19:01:00 import
Igor Sysoev <igor@sysoev.ru>
parents: 380
diff changeset
550 } else {
02a511569afb nginx-0.0.7-2004-07-07-19:01:00 import
Igor Sysoev <igor@sysoev.ru>
parents: 380
diff changeset
551 ngx_event_process_posted(cycle);
02a511569afb nginx-0.0.7-2004-07-07-19:01:00 import
Igor Sysoev <igor@sysoev.ru>
parents: 380
diff changeset
552 }
316
a0beefedaf94 nginx-0.0.3-2004-04-15-00:34:05 import
Igor Sysoev <igor@sysoev.ru>
parents: 306
diff changeset
553 }
a0beefedaf94 nginx-0.0.3-2004-04-15-00:34:05 import
Igor Sysoev <igor@sysoev.ru>
parents: 306
diff changeset
554
349
a958aa92f9a5 nginx-0.0.4-2004-06-09-20:36:55 import
Igor Sysoev <igor@sysoev.ru>
parents: 348
diff changeset
555 if (signo == -1) {
a958aa92f9a5 nginx-0.0.4-2004-06-09-20:36:55 import
Igor Sysoev <igor@sysoev.ru>
parents: 348
diff changeset
556 return NGX_AGAIN;
a958aa92f9a5 nginx-0.0.4-2004-06-09-20:36:55 import
Igor Sysoev <igor@sysoev.ru>
parents: 348
diff changeset
557 } else {
a958aa92f9a5 nginx-0.0.4-2004-06-09-20:36:55 import
Igor Sysoev <igor@sysoev.ru>
parents: 348
diff changeset
558 return NGX_OK;
a958aa92f9a5 nginx-0.0.4-2004-06-09-20:36:55 import
Igor Sysoev <igor@sysoev.ru>
parents: 348
diff changeset
559 }
246
6753e8cdaa2c nginx-0.0.1-2004-01-30-20:39:00 import
Igor Sysoev <igor@sysoev.ru>
parents: 60
diff changeset
560 }
6753e8cdaa2c nginx-0.0.1-2004-01-30-20:39:00 import
Igor Sysoev <igor@sysoev.ru>
parents: 60
diff changeset
561
6753e8cdaa2c nginx-0.0.1-2004-01-30-20:39:00 import
Igor Sysoev <igor@sysoev.ru>
parents: 60
diff changeset
562
351
af4c6b45a687 nginx-0.0.4-2004-06-10-22:36:57 import
Igor Sysoev <igor@sysoev.ru>
parents: 350
diff changeset
563 /* TODO: old cylces */
af4c6b45a687 nginx-0.0.4-2004-06-10-22:36:57 import
Igor Sysoev <igor@sysoev.ru>
parents: 350
diff changeset
564
348
68ff8000a974 nginx-0.0.3-2004-06-09-11:45:27 import
Igor Sysoev <igor@sysoev.ru>
parents: 346
diff changeset
565 static ngx_int_t ngx_rtsig_process_overflow(ngx_cycle_t *cycle)
261
bdd631bf1a1c nginx-0.0.2-2004-02-18-00:11:27 import
Igor Sysoev <igor@sysoev.ru>
parents: 260
diff changeset
566 {
354
eaf1f651cf86 nginx-0.0.7-2004-06-15-11:55:11 import
Igor Sysoev <igor@sysoev.ru>
parents: 352
diff changeset
567 int name[2], rtsig_max, rtsig_nr, events, ready;
eaf1f651cf86 nginx-0.0.7-2004-06-15-11:55:11 import
Igor Sysoev <igor@sysoev.ru>
parents: 352
diff changeset
568 size_t len;
351
af4c6b45a687 nginx-0.0.4-2004-06-10-22:36:57 import
Igor Sysoev <igor@sysoev.ru>
parents: 350
diff changeset
569 ngx_int_t tested, n, i;
af4c6b45a687 nginx-0.0.4-2004-06-10-22:36:57 import
Igor Sysoev <igor@sysoev.ru>
parents: 350
diff changeset
570 ngx_err_t err;
381
02a511569afb nginx-0.0.7-2004-07-07-19:01:00 import
Igor Sysoev <igor@sysoev.ru>
parents: 380
diff changeset
571 ngx_event_t *rev, *wev;
348
68ff8000a974 nginx-0.0.3-2004-06-09-11:45:27 import
Igor Sysoev <igor@sysoev.ru>
parents: 346
diff changeset
572 ngx_connection_t *c;
351
af4c6b45a687 nginx-0.0.4-2004-06-10-22:36:57 import
Igor Sysoev <igor@sysoev.ru>
parents: 350
diff changeset
573 ngx_rtsig_conf_t *rtscf;
348
68ff8000a974 nginx-0.0.3-2004-06-09-11:45:27 import
Igor Sysoev <igor@sysoev.ru>
parents: 346
diff changeset
574
351
af4c6b45a687 nginx-0.0.4-2004-06-10-22:36:57 import
Igor Sysoev <igor@sysoev.ru>
parents: 350
diff changeset
575 rtscf = ngx_event_get_conf(ngx_cycle->conf_ctx, ngx_rtsig_module);
af4c6b45a687 nginx-0.0.4-2004-06-10-22:36:57 import
Igor Sysoev <igor@sysoev.ru>
parents: 350
diff changeset
576
af4c6b45a687 nginx-0.0.4-2004-06-10-22:36:57 import
Igor Sysoev <igor@sysoev.ru>
parents: 350
diff changeset
577 tested = 0;
af4c6b45a687 nginx-0.0.4-2004-06-10-22:36:57 import
Igor Sysoev <igor@sysoev.ru>
parents: 350
diff changeset
578
af4c6b45a687 nginx-0.0.4-2004-06-10-22:36:57 import
Igor Sysoev <igor@sysoev.ru>
parents: 350
diff changeset
579 for ( ;; ) {
af4c6b45a687 nginx-0.0.4-2004-06-10-22:36:57 import
Igor Sysoev <igor@sysoev.ru>
parents: 350
diff changeset
580
af4c6b45a687 nginx-0.0.4-2004-06-10-22:36:57 import
Igor Sysoev <igor@sysoev.ru>
parents: 350
diff changeset
581 n = 0;
af4c6b45a687 nginx-0.0.4-2004-06-10-22:36:57 import
Igor Sysoev <igor@sysoev.ru>
parents: 350
diff changeset
582 while (n < rtscf->overflow_events) {
af4c6b45a687 nginx-0.0.4-2004-06-10-22:36:57 import
Igor Sysoev <igor@sysoev.ru>
parents: 350
diff changeset
583
af4c6b45a687 nginx-0.0.4-2004-06-10-22:36:57 import
Igor Sysoev <igor@sysoev.ru>
parents: 350
diff changeset
584 if (overflow_current == cycle->connection_n) {
af4c6b45a687 nginx-0.0.4-2004-06-10-22:36:57 import
Igor Sysoev <igor@sysoev.ru>
parents: 350
diff changeset
585 break;
af4c6b45a687 nginx-0.0.4-2004-06-10-22:36:57 import
Igor Sysoev <igor@sysoev.ru>
parents: 350
diff changeset
586 }
af4c6b45a687 nginx-0.0.4-2004-06-10-22:36:57 import
Igor Sysoev <igor@sysoev.ru>
parents: 350
diff changeset
587
af4c6b45a687 nginx-0.0.4-2004-06-10-22:36:57 import
Igor Sysoev <igor@sysoev.ru>
parents: 350
diff changeset
588 c = &cycle->connections[overflow_current++];
af4c6b45a687 nginx-0.0.4-2004-06-10-22:36:57 import
Igor Sysoev <igor@sysoev.ru>
parents: 350
diff changeset
589
af4c6b45a687 nginx-0.0.4-2004-06-10-22:36:57 import
Igor Sysoev <igor@sysoev.ru>
parents: 350
diff changeset
590 if (c->fd == -1) {
af4c6b45a687 nginx-0.0.4-2004-06-10-22:36:57 import
Igor Sysoev <igor@sysoev.ru>
parents: 350
diff changeset
591 continue;
af4c6b45a687 nginx-0.0.4-2004-06-10-22:36:57 import
Igor Sysoev <igor@sysoev.ru>
parents: 350
diff changeset
592 }
af4c6b45a687 nginx-0.0.4-2004-06-10-22:36:57 import
Igor Sysoev <igor@sysoev.ru>
parents: 350
diff changeset
593
af4c6b45a687 nginx-0.0.4-2004-06-10-22:36:57 import
Igor Sysoev <igor@sysoev.ru>
parents: 350
diff changeset
594 events = 0;
af4c6b45a687 nginx-0.0.4-2004-06-10-22:36:57 import
Igor Sysoev <igor@sysoev.ru>
parents: 350
diff changeset
595
af4c6b45a687 nginx-0.0.4-2004-06-10-22:36:57 import
Igor Sysoev <igor@sysoev.ru>
parents: 350
diff changeset
596 if (c->read->active && c->read->event_handler) {
af4c6b45a687 nginx-0.0.4-2004-06-10-22:36:57 import
Igor Sysoev <igor@sysoev.ru>
parents: 350
diff changeset
597 events |= POLLIN;
af4c6b45a687 nginx-0.0.4-2004-06-10-22:36:57 import
Igor Sysoev <igor@sysoev.ru>
parents: 350
diff changeset
598 }
348
68ff8000a974 nginx-0.0.3-2004-06-09-11:45:27 import
Igor Sysoev <igor@sysoev.ru>
parents: 346
diff changeset
599
351
af4c6b45a687 nginx-0.0.4-2004-06-10-22:36:57 import
Igor Sysoev <igor@sysoev.ru>
parents: 350
diff changeset
600 if (c->write->active && c->write->event_handler) {
af4c6b45a687 nginx-0.0.4-2004-06-10-22:36:57 import
Igor Sysoev <igor@sysoev.ru>
parents: 350
diff changeset
601 events |= POLLOUT;
af4c6b45a687 nginx-0.0.4-2004-06-10-22:36:57 import
Igor Sysoev <igor@sysoev.ru>
parents: 350
diff changeset
602 }
af4c6b45a687 nginx-0.0.4-2004-06-10-22:36:57 import
Igor Sysoev <igor@sysoev.ru>
parents: 350
diff changeset
603
af4c6b45a687 nginx-0.0.4-2004-06-10-22:36:57 import
Igor Sysoev <igor@sysoev.ru>
parents: 350
diff changeset
604 if (events == 0) {
af4c6b45a687 nginx-0.0.4-2004-06-10-22:36:57 import
Igor Sysoev <igor@sysoev.ru>
parents: 350
diff changeset
605 continue;
af4c6b45a687 nginx-0.0.4-2004-06-10-22:36:57 import
Igor Sysoev <igor@sysoev.ru>
parents: 350
diff changeset
606 }
af4c6b45a687 nginx-0.0.4-2004-06-10-22:36:57 import
Igor Sysoev <igor@sysoev.ru>
parents: 350
diff changeset
607
af4c6b45a687 nginx-0.0.4-2004-06-10-22:36:57 import
Igor Sysoev <igor@sysoev.ru>
parents: 350
diff changeset
608 overflow_list[n].fd = c->fd;
af4c6b45a687 nginx-0.0.4-2004-06-10-22:36:57 import
Igor Sysoev <igor@sysoev.ru>
parents: 350
diff changeset
609 overflow_list[n].events = events;
af4c6b45a687 nginx-0.0.4-2004-06-10-22:36:57 import
Igor Sysoev <igor@sysoev.ru>
parents: 350
diff changeset
610 overflow_list[n].revents = 0;
af4c6b45a687 nginx-0.0.4-2004-06-10-22:36:57 import
Igor Sysoev <igor@sysoev.ru>
parents: 350
diff changeset
611 n++;
af4c6b45a687 nginx-0.0.4-2004-06-10-22:36:57 import
Igor Sysoev <igor@sysoev.ru>
parents: 350
diff changeset
612 }
af4c6b45a687 nginx-0.0.4-2004-06-10-22:36:57 import
Igor Sysoev <igor@sysoev.ru>
parents: 350
diff changeset
613
af4c6b45a687 nginx-0.0.4-2004-06-10-22:36:57 import
Igor Sysoev <igor@sysoev.ru>
parents: 350
diff changeset
614 if (n == 0) {
af4c6b45a687 nginx-0.0.4-2004-06-10-22:36:57 import
Igor Sysoev <igor@sysoev.ru>
parents: 350
diff changeset
615 break;
af4c6b45a687 nginx-0.0.4-2004-06-10-22:36:57 import
Igor Sysoev <igor@sysoev.ru>
parents: 350
diff changeset
616 }
348
68ff8000a974 nginx-0.0.3-2004-06-09-11:45:27 import
Igor Sysoev <igor@sysoev.ru>
parents: 346
diff changeset
617
351
af4c6b45a687 nginx-0.0.4-2004-06-10-22:36:57 import
Igor Sysoev <igor@sysoev.ru>
parents: 350
diff changeset
618 for ( ;; ) {
af4c6b45a687 nginx-0.0.4-2004-06-10-22:36:57 import
Igor Sysoev <igor@sysoev.ru>
parents: 350
diff changeset
619 ready = poll(overflow_list, n, 0);
af4c6b45a687 nginx-0.0.4-2004-06-10-22:36:57 import
Igor Sysoev <igor@sysoev.ru>
parents: 350
diff changeset
620
af4c6b45a687 nginx-0.0.4-2004-06-10-22:36:57 import
Igor Sysoev <igor@sysoev.ru>
parents: 350
diff changeset
621 if (ready == -1) {
af4c6b45a687 nginx-0.0.4-2004-06-10-22:36:57 import
Igor Sysoev <igor@sysoev.ru>
parents: 350
diff changeset
622 err = ngx_errno;
af4c6b45a687 nginx-0.0.4-2004-06-10-22:36:57 import
Igor Sysoev <igor@sysoev.ru>
parents: 350
diff changeset
623 ngx_log_error((err == NGX_EINTR) ? NGX_LOG_INFO : NGX_LOG_ALERT,
af4c6b45a687 nginx-0.0.4-2004-06-10-22:36:57 import
Igor Sysoev <igor@sysoev.ru>
parents: 350
diff changeset
624 cycle->log, 0,
af4c6b45a687 nginx-0.0.4-2004-06-10-22:36:57 import
Igor Sysoev <igor@sysoev.ru>
parents: 350
diff changeset
625 "poll() failed while the overflow recover");
348
68ff8000a974 nginx-0.0.3-2004-06-09-11:45:27 import
Igor Sysoev <igor@sysoev.ru>
parents: 346
diff changeset
626
402
f209f3391020 nginx-0.0.9-2004-07-28-20:16:50 import
Igor Sysoev <igor@sysoev.ru>
parents: 391
diff changeset
627 if (err == NGX_EINTR) {
f209f3391020 nginx-0.0.9-2004-07-28-20:16:50 import
Igor Sysoev <igor@sysoev.ru>
parents: 391
diff changeset
628 continue;
351
af4c6b45a687 nginx-0.0.4-2004-06-10-22:36:57 import
Igor Sysoev <igor@sysoev.ru>
parents: 350
diff changeset
629 }
af4c6b45a687 nginx-0.0.4-2004-06-10-22:36:57 import
Igor Sysoev <igor@sysoev.ru>
parents: 350
diff changeset
630 }
402
f209f3391020 nginx-0.0.9-2004-07-28-20:16:50 import
Igor Sysoev <igor@sysoev.ru>
parents: 391
diff changeset
631
f209f3391020 nginx-0.0.9-2004-07-28-20:16:50 import
Igor Sysoev <igor@sysoev.ru>
parents: 391
diff changeset
632 break;
351
af4c6b45a687 nginx-0.0.4-2004-06-10-22:36:57 import
Igor Sysoev <igor@sysoev.ru>
parents: 350
diff changeset
633 }
af4c6b45a687 nginx-0.0.4-2004-06-10-22:36:57 import
Igor Sysoev <igor@sysoev.ru>
parents: 350
diff changeset
634
af4c6b45a687 nginx-0.0.4-2004-06-10-22:36:57 import
Igor Sysoev <igor@sysoev.ru>
parents: 350
diff changeset
635 if (ready <= 0) {
348
68ff8000a974 nginx-0.0.3-2004-06-09-11:45:27 import
Igor Sysoev <igor@sysoev.ru>
parents: 346
diff changeset
636 continue;
68ff8000a974 nginx-0.0.3-2004-06-09-11:45:27 import
Igor Sysoev <igor@sysoev.ru>
parents: 346
diff changeset
637 }
68ff8000a974 nginx-0.0.3-2004-06-09-11:45:27 import
Igor Sysoev <igor@sysoev.ru>
parents: 346
diff changeset
638
402
f209f3391020 nginx-0.0.9-2004-07-28-20:16:50 import
Igor Sysoev <igor@sysoev.ru>
parents: 391
diff changeset
639 if (ngx_mutex_lock(ngx_posted_events_mutex) == NGX_ERROR) {
f209f3391020 nginx-0.0.9-2004-07-28-20:16:50 import
Igor Sysoev <igor@sysoev.ru>
parents: 391
diff changeset
640 return NGX_ERROR;
381
02a511569afb nginx-0.0.7-2004-07-07-19:01:00 import
Igor Sysoev <igor@sysoev.ru>
parents: 380
diff changeset
641 }
02a511569afb nginx-0.0.7-2004-07-07-19:01:00 import
Igor Sysoev <igor@sysoev.ru>
parents: 380
diff changeset
642
351
af4c6b45a687 nginx-0.0.4-2004-06-10-22:36:57 import
Igor Sysoev <igor@sysoev.ru>
parents: 350
diff changeset
643 for (i = 0; i < n; i++) {
af4c6b45a687 nginx-0.0.4-2004-06-10-22:36:57 import
Igor Sysoev <igor@sysoev.ru>
parents: 350
diff changeset
644 c = &cycle->connections[overflow_list[i].fd];
af4c6b45a687 nginx-0.0.4-2004-06-10-22:36:57 import
Igor Sysoev <igor@sysoev.ru>
parents: 350
diff changeset
645
381
02a511569afb nginx-0.0.7-2004-07-07-19:01:00 import
Igor Sysoev <igor@sysoev.ru>
parents: 380
diff changeset
646 rev = c->read;
02a511569afb nginx-0.0.7-2004-07-07-19:01:00 import
Igor Sysoev <igor@sysoev.ru>
parents: 380
diff changeset
647
390
1471c6fb108a nginx-0.0.7-2004-07-14-00:24:56 import
Igor Sysoev <igor@sysoev.ru>
parents: 389
diff changeset
648 if (rev->active
391
b670db10cbbd nginx-0.0.7-2004-07-14-20:01:42 import
Igor Sysoev <igor@sysoev.ru>
parents: 390
diff changeset
649 && !rev->closed
390
1471c6fb108a nginx-0.0.7-2004-07-14-00:24:56 import
Igor Sysoev <igor@sysoev.ru>
parents: 389
diff changeset
650 && rev->event_handler
1471c6fb108a nginx-0.0.7-2004-07-14-00:24:56 import
Igor Sysoev <igor@sysoev.ru>
parents: 389
diff changeset
651 && (overflow_list[i].revents
1471c6fb108a nginx-0.0.7-2004-07-14-00:24:56 import
Igor Sysoev <igor@sysoev.ru>
parents: 389
diff changeset
652 & (POLLIN|POLLERR|POLLHUP|POLLNVAL)))
1471c6fb108a nginx-0.0.7-2004-07-14-00:24:56 import
Igor Sysoev <igor@sysoev.ru>
parents: 389
diff changeset
653 {
351
af4c6b45a687 nginx-0.0.4-2004-06-10-22:36:57 import
Igor Sysoev <igor@sysoev.ru>
parents: 350
diff changeset
654 tested++;
348
68ff8000a974 nginx-0.0.3-2004-06-09-11:45:27 import
Igor Sysoev <igor@sysoev.ru>
parents: 346
diff changeset
655
381
02a511569afb nginx-0.0.7-2004-07-07-19:01:00 import
Igor Sysoev <igor@sysoev.ru>
parents: 380
diff changeset
656 if (ngx_threaded) {
02a511569afb nginx-0.0.7-2004-07-07-19:01:00 import
Igor Sysoev <igor@sysoev.ru>
parents: 380
diff changeset
657 rev->posted_ready = 1;
02a511569afb nginx-0.0.7-2004-07-07-19:01:00 import
Igor Sysoev <igor@sysoev.ru>
parents: 380
diff changeset
658 ngx_post_event(rev);
351
af4c6b45a687 nginx-0.0.4-2004-06-10-22:36:57 import
Igor Sysoev <igor@sysoev.ru>
parents: 350
diff changeset
659
af4c6b45a687 nginx-0.0.4-2004-06-10-22:36:57 import
Igor Sysoev <igor@sysoev.ru>
parents: 350
diff changeset
660 } else {
381
02a511569afb nginx-0.0.7-2004-07-07-19:01:00 import
Igor Sysoev <igor@sysoev.ru>
parents: 380
diff changeset
661 rev->ready = 1;
02a511569afb nginx-0.0.7-2004-07-07-19:01:00 import
Igor Sysoev <igor@sysoev.ru>
parents: 380
diff changeset
662 rev->event_handler(rev);
348
68ff8000a974 nginx-0.0.3-2004-06-09-11:45:27 import
Igor Sysoev <igor@sysoev.ru>
parents: 346
diff changeset
663 }
351
af4c6b45a687 nginx-0.0.4-2004-06-10-22:36:57 import
Igor Sysoev <igor@sysoev.ru>
parents: 350
diff changeset
664 }
348
68ff8000a974 nginx-0.0.3-2004-06-09-11:45:27 import
Igor Sysoev <igor@sysoev.ru>
parents: 346
diff changeset
665
381
02a511569afb nginx-0.0.7-2004-07-07-19:01:00 import
Igor Sysoev <igor@sysoev.ru>
parents: 380
diff changeset
666 wev = c->write;
02a511569afb nginx-0.0.7-2004-07-07-19:01:00 import
Igor Sysoev <igor@sysoev.ru>
parents: 380
diff changeset
667
390
1471c6fb108a nginx-0.0.7-2004-07-14-00:24:56 import
Igor Sysoev <igor@sysoev.ru>
parents: 389
diff changeset
668 if (wev->active
391
b670db10cbbd nginx-0.0.7-2004-07-14-20:01:42 import
Igor Sysoev <igor@sysoev.ru>
parents: 390
diff changeset
669 && !wev->closed
390
1471c6fb108a nginx-0.0.7-2004-07-14-00:24:56 import
Igor Sysoev <igor@sysoev.ru>
parents: 389
diff changeset
670 && wev->event_handler
1471c6fb108a nginx-0.0.7-2004-07-14-00:24:56 import
Igor Sysoev <igor@sysoev.ru>
parents: 389
diff changeset
671 && (overflow_list[i].revents
1471c6fb108a nginx-0.0.7-2004-07-14-00:24:56 import
Igor Sysoev <igor@sysoev.ru>
parents: 389
diff changeset
672 & (POLLOUT|POLLERR|POLLHUP|POLLNVAL)))
1471c6fb108a nginx-0.0.7-2004-07-14-00:24:56 import
Igor Sysoev <igor@sysoev.ru>
parents: 389
diff changeset
673 {
351
af4c6b45a687 nginx-0.0.4-2004-06-10-22:36:57 import
Igor Sysoev <igor@sysoev.ru>
parents: 350
diff changeset
674 tested++;
381
02a511569afb nginx-0.0.7-2004-07-07-19:01:00 import
Igor Sysoev <igor@sysoev.ru>
parents: 380
diff changeset
675
02a511569afb nginx-0.0.7-2004-07-07-19:01:00 import
Igor Sysoev <igor@sysoev.ru>
parents: 380
diff changeset
676 if (ngx_threaded) {
02a511569afb nginx-0.0.7-2004-07-07-19:01:00 import
Igor Sysoev <igor@sysoev.ru>
parents: 380
diff changeset
677 wev->posted_ready = 1;
02a511569afb nginx-0.0.7-2004-07-07-19:01:00 import
Igor Sysoev <igor@sysoev.ru>
parents: 380
diff changeset
678 ngx_post_event(wev);
348
68ff8000a974 nginx-0.0.3-2004-06-09-11:45:27 import
Igor Sysoev <igor@sysoev.ru>
parents: 346
diff changeset
679
351
af4c6b45a687 nginx-0.0.4-2004-06-10-22:36:57 import
Igor Sysoev <igor@sysoev.ru>
parents: 350
diff changeset
680 } else {
381
02a511569afb nginx-0.0.7-2004-07-07-19:01:00 import
Igor Sysoev <igor@sysoev.ru>
parents: 380
diff changeset
681 wev->ready = 1;
02a511569afb nginx-0.0.7-2004-07-07-19:01:00 import
Igor Sysoev <igor@sysoev.ru>
parents: 380
diff changeset
682 wev->event_handler(wev);
351
af4c6b45a687 nginx-0.0.4-2004-06-10-22:36:57 import
Igor Sysoev <igor@sysoev.ru>
parents: 350
diff changeset
683 }
348
68ff8000a974 nginx-0.0.3-2004-06-09-11:45:27 import
Igor Sysoev <igor@sysoev.ru>
parents: 346
diff changeset
684 }
68ff8000a974 nginx-0.0.3-2004-06-09-11:45:27 import
Igor Sysoev <igor@sysoev.ru>
parents: 346
diff changeset
685 }
68ff8000a974 nginx-0.0.3-2004-06-09-11:45:27 import
Igor Sysoev <igor@sysoev.ru>
parents: 346
diff changeset
686
402
f209f3391020 nginx-0.0.9-2004-07-28-20:16:50 import
Igor Sysoev <igor@sysoev.ru>
parents: 391
diff changeset
687 ngx_mutex_unlock(ngx_posted_events_mutex);
381
02a511569afb nginx-0.0.7-2004-07-07-19:01:00 import
Igor Sysoev <igor@sysoev.ru>
parents: 380
diff changeset
688
351
af4c6b45a687 nginx-0.0.4-2004-06-10-22:36:57 import
Igor Sysoev <igor@sysoev.ru>
parents: 350
diff changeset
689 if (tested >= rtscf->overflow_test) {
348
68ff8000a974 nginx-0.0.3-2004-06-09-11:45:27 import
Igor Sysoev <igor@sysoev.ru>
parents: 346
diff changeset
690
391
b670db10cbbd nginx-0.0.7-2004-07-14-20:01:42 import
Igor Sysoev <igor@sysoev.ru>
parents: 390
diff changeset
691 if (ngx_linux_rtsig_max) {
b670db10cbbd nginx-0.0.7-2004-07-14-20:01:42 import
Igor Sysoev <igor@sysoev.ru>
parents: 390
diff changeset
692
b670db10cbbd nginx-0.0.7-2004-07-14-20:01:42 import
Igor Sysoev <igor@sysoev.ru>
parents: 390
diff changeset
693 /*
b670db10cbbd nginx-0.0.7-2004-07-14-20:01:42 import
Igor Sysoev <igor@sysoev.ru>
parents: 390
diff changeset
694 * Check the current rt queue length to prevent
b670db10cbbd nginx-0.0.7-2004-07-14-20:01:42 import
Igor Sysoev <igor@sysoev.ru>
parents: 390
diff changeset
695 * the new overflow.
b670db10cbbd nginx-0.0.7-2004-07-14-20:01:42 import
Igor Sysoev <igor@sysoev.ru>
parents: 390
diff changeset
696 *
b670db10cbbd nginx-0.0.7-2004-07-14-20:01:42 import
Igor Sysoev <igor@sysoev.ru>
parents: 390
diff changeset
697 * Learn the /proc/sys/kernel/rtsig-max value because
452
23fb87bddda1 nginx-0.1.1-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 444
diff changeset
698 * it can be changed since the last checking.
391
b670db10cbbd nginx-0.0.7-2004-07-14-20:01:42 import
Igor Sysoev <igor@sysoev.ru>
parents: 390
diff changeset
699 */
348
68ff8000a974 nginx-0.0.3-2004-06-09-11:45:27 import
Igor Sysoev <igor@sysoev.ru>
parents: 346
diff changeset
700
391
b670db10cbbd nginx-0.0.7-2004-07-14-20:01:42 import
Igor Sysoev <igor@sysoev.ru>
parents: 390
diff changeset
701 name[0] = CTL_KERN;
b670db10cbbd nginx-0.0.7-2004-07-14-20:01:42 import
Igor Sysoev <igor@sysoev.ru>
parents: 390
diff changeset
702 name[1] = KERN_RTSIGMAX;
b670db10cbbd nginx-0.0.7-2004-07-14-20:01:42 import
Igor Sysoev <igor@sysoev.ru>
parents: 390
diff changeset
703 len = sizeof(rtsig_max);
b670db10cbbd nginx-0.0.7-2004-07-14-20:01:42 import
Igor Sysoev <igor@sysoev.ru>
parents: 390
diff changeset
704 if (sysctl(name, sizeof(name), &rtsig_max, &len, NULL, 0) == -1)
b670db10cbbd nginx-0.0.7-2004-07-14-20:01:42 import
Igor Sysoev <igor@sysoev.ru>
parents: 390
diff changeset
705 {
b670db10cbbd nginx-0.0.7-2004-07-14-20:01:42 import
Igor Sysoev <igor@sysoev.ru>
parents: 390
diff changeset
706 ngx_log_error(NGX_LOG_ALERT, cycle->log, errno,
b670db10cbbd nginx-0.0.7-2004-07-14-20:01:42 import
Igor Sysoev <igor@sysoev.ru>
parents: 390
diff changeset
707 "sysctl(KERN_RTSIGMAX) failed");
b670db10cbbd nginx-0.0.7-2004-07-14-20:01:42 import
Igor Sysoev <igor@sysoev.ru>
parents: 390
diff changeset
708 return NGX_ERROR;
b670db10cbbd nginx-0.0.7-2004-07-14-20:01:42 import
Igor Sysoev <igor@sysoev.ru>
parents: 390
diff changeset
709 }
348
68ff8000a974 nginx-0.0.3-2004-06-09-11:45:27 import
Igor Sysoev <igor@sysoev.ru>
parents: 346
diff changeset
710
391
b670db10cbbd nginx-0.0.7-2004-07-14-20:01:42 import
Igor Sysoev <igor@sysoev.ru>
parents: 390
diff changeset
711 name[0] = CTL_KERN;
b670db10cbbd nginx-0.0.7-2004-07-14-20:01:42 import
Igor Sysoev <igor@sysoev.ru>
parents: 390
diff changeset
712 name[1] = KERN_RTSIGNR;
b670db10cbbd nginx-0.0.7-2004-07-14-20:01:42 import
Igor Sysoev <igor@sysoev.ru>
parents: 390
diff changeset
713 len = sizeof(rtsig_nr);
b670db10cbbd nginx-0.0.7-2004-07-14-20:01:42 import
Igor Sysoev <igor@sysoev.ru>
parents: 390
diff changeset
714 if (sysctl(name, sizeof(name), &rtsig_nr, &len, NULL, 0) == -1)
b670db10cbbd nginx-0.0.7-2004-07-14-20:01:42 import
Igor Sysoev <igor@sysoev.ru>
parents: 390
diff changeset
715 {
b670db10cbbd nginx-0.0.7-2004-07-14-20:01:42 import
Igor Sysoev <igor@sysoev.ru>
parents: 390
diff changeset
716 ngx_log_error(NGX_LOG_ALERT, cycle->log, errno,
b670db10cbbd nginx-0.0.7-2004-07-14-20:01:42 import
Igor Sysoev <igor@sysoev.ru>
parents: 390
diff changeset
717 "sysctl(KERN_RTSIGNR) failed");
b670db10cbbd nginx-0.0.7-2004-07-14-20:01:42 import
Igor Sysoev <igor@sysoev.ru>
parents: 390
diff changeset
718 return NGX_ERROR;
b670db10cbbd nginx-0.0.7-2004-07-14-20:01:42 import
Igor Sysoev <igor@sysoev.ru>
parents: 390
diff changeset
719 }
b670db10cbbd nginx-0.0.7-2004-07-14-20:01:42 import
Igor Sysoev <igor@sysoev.ru>
parents: 390
diff changeset
720
b670db10cbbd nginx-0.0.7-2004-07-14-20:01:42 import
Igor Sysoev <igor@sysoev.ru>
parents: 390
diff changeset
721 /*
402
f209f3391020 nginx-0.0.9-2004-07-28-20:16:50 import
Igor Sysoev <igor@sysoev.ru>
parents: 391
diff changeset
722 * drain the rt signal queue if the /proc/sys/kernel/rtsig-nr
391
b670db10cbbd nginx-0.0.7-2004-07-14-20:01:42 import
Igor Sysoev <igor@sysoev.ru>
parents: 390
diff changeset
723 * is bigger than
b670db10cbbd nginx-0.0.7-2004-07-14-20:01:42 import
Igor Sysoev <igor@sysoev.ru>
parents: 390
diff changeset
724 * /proc/sys/kernel/rtsig-max / rtsig_overflow_threshold
b670db10cbbd nginx-0.0.7-2004-07-14-20:01:42 import
Igor Sysoev <igor@sysoev.ru>
parents: 390
diff changeset
725 */
348
68ff8000a974 nginx-0.0.3-2004-06-09-11:45:27 import
Igor Sysoev <igor@sysoev.ru>
parents: 346
diff changeset
726
391
b670db10cbbd nginx-0.0.7-2004-07-14-20:01:42 import
Igor Sysoev <igor@sysoev.ru>
parents: 390
diff changeset
727 if (rtsig_max / rtscf->overflow_threshold < rtsig_nr) {
b670db10cbbd nginx-0.0.7-2004-07-14-20:01:42 import
Igor Sysoev <igor@sysoev.ru>
parents: 390
diff changeset
728 ngx_log_debug2(NGX_LOG_DEBUG_EVENT, cycle->log, 0,
b670db10cbbd nginx-0.0.7-2004-07-14-20:01:42 import
Igor Sysoev <igor@sysoev.ru>
parents: 390
diff changeset
729 "rtsig queue state: %d/%d",
b670db10cbbd nginx-0.0.7-2004-07-14-20:01:42 import
Igor Sysoev <igor@sysoev.ru>
parents: 390
diff changeset
730 rtsig_nr, rtsig_max);
b670db10cbbd nginx-0.0.7-2004-07-14-20:01:42 import
Igor Sysoev <igor@sysoev.ru>
parents: 390
diff changeset
731 while (ngx_rtsig_process_events(cycle) == NGX_OK) {
b670db10cbbd nginx-0.0.7-2004-07-14-20:01:42 import
Igor Sysoev <igor@sysoev.ru>
parents: 390
diff changeset
732 /* void */
b670db10cbbd nginx-0.0.7-2004-07-14-20:01:42 import
Igor Sysoev <igor@sysoev.ru>
parents: 390
diff changeset
733 }
b670db10cbbd nginx-0.0.7-2004-07-14-20:01:42 import
Igor Sysoev <igor@sysoev.ru>
parents: 390
diff changeset
734 }
348
68ff8000a974 nginx-0.0.3-2004-06-09-11:45:27 import
Igor Sysoev <igor@sysoev.ru>
parents: 346
diff changeset
735
391
b670db10cbbd nginx-0.0.7-2004-07-14-20:01:42 import
Igor Sysoev <igor@sysoev.ru>
parents: 390
diff changeset
736 } else {
b670db10cbbd nginx-0.0.7-2004-07-14-20:01:42 import
Igor Sysoev <igor@sysoev.ru>
parents: 390
diff changeset
737
b670db10cbbd nginx-0.0.7-2004-07-14-20:01:42 import
Igor Sysoev <igor@sysoev.ru>
parents: 390
diff changeset
738 /*
b670db10cbbd nginx-0.0.7-2004-07-14-20:01:42 import
Igor Sysoev <igor@sysoev.ru>
parents: 390
diff changeset
739 * Linux has not KERN_RTSIGMAX since 2.6.6-mm2
402
f209f3391020 nginx-0.0.9-2004-07-28-20:16:50 import
Igor Sysoev <igor@sysoev.ru>
parents: 391
diff changeset
740 * so drain the rt signal queue unconditionally
391
b670db10cbbd nginx-0.0.7-2004-07-14-20:01:42 import
Igor Sysoev <igor@sysoev.ru>
parents: 390
diff changeset
741 */
b670db10cbbd nginx-0.0.7-2004-07-14-20:01:42 import
Igor Sysoev <igor@sysoev.ru>
parents: 390
diff changeset
742
349
a958aa92f9a5 nginx-0.0.4-2004-06-09-20:36:55 import
Igor Sysoev <igor@sysoev.ru>
parents: 348
diff changeset
743 while (ngx_rtsig_process_events(cycle) == NGX_OK) { /* void */ }
348
68ff8000a974 nginx-0.0.3-2004-06-09-11:45:27 import
Igor Sysoev <igor@sysoev.ru>
parents: 346
diff changeset
744 }
351
af4c6b45a687 nginx-0.0.4-2004-06-10-22:36:57 import
Igor Sysoev <igor@sysoev.ru>
parents: 350
diff changeset
745
af4c6b45a687 nginx-0.0.4-2004-06-10-22:36:57 import
Igor Sysoev <igor@sysoev.ru>
parents: 350
diff changeset
746 tested = 0;
348
68ff8000a974 nginx-0.0.3-2004-06-09-11:45:27 import
Igor Sysoev <igor@sysoev.ru>
parents: 346
diff changeset
747 }
261
bdd631bf1a1c nginx-0.0.2-2004-02-18-00:11:27 import
Igor Sysoev <igor@sysoev.ru>
parents: 260
diff changeset
748 }
bdd631bf1a1c nginx-0.0.2-2004-02-18-00:11:27 import
Igor Sysoev <igor@sysoev.ru>
parents: 260
diff changeset
749
381
02a511569afb nginx-0.0.7-2004-07-07-19:01:00 import
Igor Sysoev <igor@sysoev.ru>
parents: 380
diff changeset
750 if (ngx_posted_events) {
02a511569afb nginx-0.0.7-2004-07-07-19:01:00 import
Igor Sysoev <igor@sysoev.ru>
parents: 380
diff changeset
751 if (ngx_threaded) {
02a511569afb nginx-0.0.7-2004-07-07-19:01:00 import
Igor Sysoev <igor@sysoev.ru>
parents: 380
diff changeset
752 ngx_wakeup_worker_thread(cycle);
02a511569afb nginx-0.0.7-2004-07-07-19:01:00 import
Igor Sysoev <igor@sysoev.ru>
parents: 380
diff changeset
753
02a511569afb nginx-0.0.7-2004-07-07-19:01:00 import
Igor Sysoev <igor@sysoev.ru>
parents: 380
diff changeset
754 } else {
02a511569afb nginx-0.0.7-2004-07-07-19:01:00 import
Igor Sysoev <igor@sysoev.ru>
parents: 380
diff changeset
755 ngx_event_process_posted(cycle);
02a511569afb nginx-0.0.7-2004-07-07-19:01:00 import
Igor Sysoev <igor@sysoev.ru>
parents: 380
diff changeset
756 }
348
68ff8000a974 nginx-0.0.3-2004-06-09-11:45:27 import
Igor Sysoev <igor@sysoev.ru>
parents: 346
diff changeset
757 }
68ff8000a974 nginx-0.0.3-2004-06-09-11:45:27 import
Igor Sysoev <igor@sysoev.ru>
parents: 346
diff changeset
758
68ff8000a974 nginx-0.0.3-2004-06-09-11:45:27 import
Igor Sysoev <igor@sysoev.ru>
parents: 346
diff changeset
759 ngx_log_error(NGX_LOG_INFO, cycle->log, 0,
68ff8000a974 nginx-0.0.3-2004-06-09-11:45:27 import
Igor Sysoev <igor@sysoev.ru>
parents: 346
diff changeset
760 "rt signal queue overflow recovered");
68ff8000a974 nginx-0.0.3-2004-06-09-11:45:27 import
Igor Sysoev <igor@sysoev.ru>
parents: 346
diff changeset
761
68ff8000a974 nginx-0.0.3-2004-06-09-11:45:27 import
Igor Sysoev <igor@sysoev.ru>
parents: 346
diff changeset
762 overflow = 0;
380
5ce6561246a5 nginx-0.0.7-2004-07-07-10:15:04 import
Igor Sysoev <igor@sysoev.ru>
parents: 375
diff changeset
763 ngx_event_actions.process_events = ngx_rtsig_process_events;
348
68ff8000a974 nginx-0.0.3-2004-06-09-11:45:27 import
Igor Sysoev <igor@sysoev.ru>
parents: 346
diff changeset
764
261
bdd631bf1a1c nginx-0.0.2-2004-02-18-00:11:27 import
Igor Sysoev <igor@sysoev.ru>
parents: 260
diff changeset
765 return NGX_OK;
bdd631bf1a1c nginx-0.0.2-2004-02-18-00:11:27 import
Igor Sysoev <igor@sysoev.ru>
parents: 260
diff changeset
766 }
bdd631bf1a1c nginx-0.0.2-2004-02-18-00:11:27 import
Igor Sysoev <igor@sysoev.ru>
parents: 260
diff changeset
767
bdd631bf1a1c nginx-0.0.2-2004-02-18-00:11:27 import
Igor Sysoev <igor@sysoev.ru>
parents: 260
diff changeset
768
260
5dacbb4daaf6 nginx-0.0.2-2004-02-17-20:53:12 import
Igor Sysoev <igor@sysoev.ru>
parents: 247
diff changeset
769 static void *ngx_rtsig_create_conf(ngx_cycle_t *cycle)
246
6753e8cdaa2c nginx-0.0.1-2004-01-30-20:39:00 import
Igor Sysoev <igor@sysoev.ru>
parents: 60
diff changeset
770 {
260
5dacbb4daaf6 nginx-0.0.2-2004-02-17-20:53:12 import
Igor Sysoev <igor@sysoev.ru>
parents: 247
diff changeset
771 ngx_rtsig_conf_t *rtscf;
246
6753e8cdaa2c nginx-0.0.1-2004-01-30-20:39:00 import
Igor Sysoev <igor@sysoev.ru>
parents: 60
diff changeset
772
260
5dacbb4daaf6 nginx-0.0.2-2004-02-17-20:53:12 import
Igor Sysoev <igor@sysoev.ru>
parents: 247
diff changeset
773 ngx_test_null(rtscf, ngx_palloc(cycle->pool, sizeof(ngx_rtsig_conf_t)),
246
6753e8cdaa2c nginx-0.0.1-2004-01-30-20:39:00 import
Igor Sysoev <igor@sysoev.ru>
parents: 60
diff changeset
774 NGX_CONF_ERROR);
6753e8cdaa2c nginx-0.0.1-2004-01-30-20:39:00 import
Igor Sysoev <igor@sysoev.ru>
parents: 60
diff changeset
775
260
5dacbb4daaf6 nginx-0.0.2-2004-02-17-20:53:12 import
Igor Sysoev <igor@sysoev.ru>
parents: 247
diff changeset
776 rtscf->signo = NGX_CONF_UNSET;
351
af4c6b45a687 nginx-0.0.4-2004-06-10-22:36:57 import
Igor Sysoev <igor@sysoev.ru>
parents: 350
diff changeset
777 rtscf->overflow_events = NGX_CONF_UNSET;
af4c6b45a687 nginx-0.0.4-2004-06-10-22:36:57 import
Igor Sysoev <igor@sysoev.ru>
parents: 350
diff changeset
778 rtscf->overflow_test = NGX_CONF_UNSET;
af4c6b45a687 nginx-0.0.4-2004-06-10-22:36:57 import
Igor Sysoev <igor@sysoev.ru>
parents: 350
diff changeset
779 rtscf->overflow_threshold = NGX_CONF_UNSET;
60
50186b49f2ad nginx-0.0.1-2003-02-11-10:14:40 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
780
260
5dacbb4daaf6 nginx-0.0.2-2004-02-17-20:53:12 import
Igor Sysoev <igor@sysoev.ru>
parents: 247
diff changeset
781 return rtscf;
246
6753e8cdaa2c nginx-0.0.1-2004-01-30-20:39:00 import
Igor Sysoev <igor@sysoev.ru>
parents: 60
diff changeset
782 }
6753e8cdaa2c nginx-0.0.1-2004-01-30-20:39:00 import
Igor Sysoev <igor@sysoev.ru>
parents: 60
diff changeset
783
60
50186b49f2ad nginx-0.0.1-2003-02-11-10:14:40 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
784
260
5dacbb4daaf6 nginx-0.0.2-2004-02-17-20:53:12 import
Igor Sysoev <igor@sysoev.ru>
parents: 247
diff changeset
785 static char *ngx_rtsig_init_conf(ngx_cycle_t *cycle, void *conf)
246
6753e8cdaa2c nginx-0.0.1-2004-01-30-20:39:00 import
Igor Sysoev <igor@sysoev.ru>
parents: 60
diff changeset
786 {
260
5dacbb4daaf6 nginx-0.0.2-2004-02-17-20:53:12 import
Igor Sysoev <igor@sysoev.ru>
parents: 247
diff changeset
787 ngx_rtsig_conf_t *rtscf = conf;
60
50186b49f2ad nginx-0.0.1-2003-02-11-10:14:40 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
788
260
5dacbb4daaf6 nginx-0.0.2-2004-02-17-20:53:12 import
Igor Sysoev <igor@sysoev.ru>
parents: 247
diff changeset
789 /* LinuxThreads use the first 3 RT signals */
5dacbb4daaf6 nginx-0.0.2-2004-02-17-20:53:12 import
Igor Sysoev <igor@sysoev.ru>
parents: 247
diff changeset
790 ngx_conf_init_value(rtscf->signo, SIGRTMIN + 10);
246
6753e8cdaa2c nginx-0.0.1-2004-01-30-20:39:00 import
Igor Sysoev <igor@sysoev.ru>
parents: 60
diff changeset
791
351
af4c6b45a687 nginx-0.0.4-2004-06-10-22:36:57 import
Igor Sysoev <igor@sysoev.ru>
parents: 350
diff changeset
792 ngx_conf_init_value(rtscf->overflow_events, 16);
354
eaf1f651cf86 nginx-0.0.7-2004-06-15-11:55:11 import
Igor Sysoev <igor@sysoev.ru>
parents: 352
diff changeset
793 ngx_conf_init_value(rtscf->overflow_test, 32);
eaf1f651cf86 nginx-0.0.7-2004-06-15-11:55:11 import
Igor Sysoev <igor@sysoev.ru>
parents: 352
diff changeset
794 ngx_conf_init_value(rtscf->overflow_threshold, 10);
351
af4c6b45a687 nginx-0.0.4-2004-06-10-22:36:57 import
Igor Sysoev <igor@sysoev.ru>
parents: 350
diff changeset
795
246
6753e8cdaa2c nginx-0.0.1-2004-01-30-20:39:00 import
Igor Sysoev <igor@sysoev.ru>
parents: 60
diff changeset
796 return NGX_CONF_OK;
60
50186b49f2ad nginx-0.0.1-2003-02-11-10:14:40 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
797 }
391
b670db10cbbd nginx-0.0.7-2004-07-14-20:01:42 import
Igor Sysoev <igor@sysoev.ru>
parents: 390
diff changeset
798
b670db10cbbd nginx-0.0.7-2004-07-14-20:01:42 import
Igor Sysoev <igor@sysoev.ru>
parents: 390
diff changeset
799
b670db10cbbd nginx-0.0.7-2004-07-14-20:01:42 import
Igor Sysoev <igor@sysoev.ru>
parents: 390
diff changeset
800 static char *ngx_check_ngx_overflow_threshold_bounds(ngx_conf_t *cf,
b670db10cbbd nginx-0.0.7-2004-07-14-20:01:42 import
Igor Sysoev <igor@sysoev.ru>
parents: 390
diff changeset
801 void *post, void *data)
b670db10cbbd nginx-0.0.7-2004-07-14-20:01:42 import
Igor Sysoev <igor@sysoev.ru>
parents: 390
diff changeset
802 {
b670db10cbbd nginx-0.0.7-2004-07-14-20:01:42 import
Igor Sysoev <igor@sysoev.ru>
parents: 390
diff changeset
803 if (ngx_linux_rtsig_max) {
b670db10cbbd nginx-0.0.7-2004-07-14-20:01:42 import
Igor Sysoev <igor@sysoev.ru>
parents: 390
diff changeset
804 return ngx_conf_check_num_bounds(cf, post, data);
b670db10cbbd nginx-0.0.7-2004-07-14-20:01:42 import
Igor Sysoev <igor@sysoev.ru>
parents: 390
diff changeset
805 }
b670db10cbbd nginx-0.0.7-2004-07-14-20:01:42 import
Igor Sysoev <igor@sysoev.ru>
parents: 390
diff changeset
806
b670db10cbbd nginx-0.0.7-2004-07-14-20:01:42 import
Igor Sysoev <igor@sysoev.ru>
parents: 390
diff changeset
807 ngx_conf_log_error(NGX_LOG_WARN, cf, 0,
b670db10cbbd nginx-0.0.7-2004-07-14-20:01:42 import
Igor Sysoev <igor@sysoev.ru>
parents: 390
diff changeset
808 "\"rtsig_overflow_threshold\" is not supported "
b670db10cbbd nginx-0.0.7-2004-07-14-20:01:42 import
Igor Sysoev <igor@sysoev.ru>
parents: 390
diff changeset
809 "since Linux 2.6.6-mm2, ignored");
b670db10cbbd nginx-0.0.7-2004-07-14-20:01:42 import
Igor Sysoev <igor@sysoev.ru>
parents: 390
diff changeset
810
b670db10cbbd nginx-0.0.7-2004-07-14-20:01:42 import
Igor Sysoev <igor@sysoev.ru>
parents: 390
diff changeset
811 return NGX_CONF_OK;
b670db10cbbd nginx-0.0.7-2004-07-14-20:01:42 import
Igor Sysoev <igor@sysoev.ru>
parents: 390
diff changeset
812 }