annotate src/event/modules/ngx_select_module.c @ 2809:be08552a64bf

make code clearer
author Igor Sysoev <igor@sysoev.ru>
date Wed, 06 May 2009 08:54:54 +0000
parents b7b2b0ea3366
children c00763aa5e1b
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
91
637625a2acdb nginx-0.0.1-2003-05-19-20:39:14 import
Igor Sysoev <igor@sysoev.ru>
parents: 87
diff changeset
1
637625a2acdb nginx-0.0.1-2003-05-19-20:39:14 import
Igor Sysoev <igor@sysoev.ru>
parents: 87
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
91
637625a2acdb nginx-0.0.1-2003-05-19-20:39:14 import
Igor Sysoev <igor@sysoev.ru>
parents: 87
diff changeset
4 */
637625a2acdb nginx-0.0.1-2003-05-19-20:39:14 import
Igor Sysoev <igor@sysoev.ru>
parents: 87
diff changeset
5
0
4eff17414a43 nginx-0.0.1-2002-08-06-20:39:45 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
6
4eff17414a43 nginx-0.0.1-2002-08-06-20:39:45 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
7 #include <ngx_config.h>
8
708f8bb772ec nginx-0.0.1-2002-09-02-18:48:24 import
Igor Sysoev <igor@sysoev.ru>
parents: 7
diff changeset
8 #include <ngx_core.h>
0
4eff17414a43 nginx-0.0.1-2002-08-06-20:39:45 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
9 #include <ngx_event.h>
4eff17414a43 nginx-0.0.1-2002-08-06-20:39:45 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
10
26
53cb81681040 nginx-0.0.1-2002-12-15-09:25:09 import
Igor Sysoev <igor@sysoev.ru>
parents: 23
diff changeset
11
314
d71c87d11b16 nginx-0.0.3-2004-04-14-09:57:36 import
Igor Sysoev <igor@sysoev.ru>
parents: 302
diff changeset
12
563
9c2f3ed7a247 nginx-0.3.3-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 557
diff changeset
13 static ngx_int_t ngx_select_init(ngx_cycle_t *cycle, ngx_msec_t timer);
114
ac69ab96328d nginx-0.0.1-2003-07-07-10:11:50 import
Igor Sysoev <igor@sysoev.ru>
parents: 107
diff changeset
14 static void ngx_select_done(ngx_cycle_t *cycle);
1354
f69d1aab6a0f make 64-bit ngx_int_t on 64-bit platforms
Igor Sysoev <igor@sysoev.ru>
parents: 708
diff changeset
15 static ngx_int_t ngx_select_add_event(ngx_event_t *ev, ngx_int_t event,
f69d1aab6a0f make 64-bit ngx_int_t on 64-bit platforms
Igor Sysoev <igor@sysoev.ru>
parents: 708
diff changeset
16 ngx_uint_t flags);
f69d1aab6a0f make 64-bit ngx_int_t on 64-bit platforms
Igor Sysoev <igor@sysoev.ru>
parents: 708
diff changeset
17 static ngx_int_t ngx_select_del_event(ngx_event_t *ev, ngx_int_t event,
f69d1aab6a0f make 64-bit ngx_int_t on 64-bit platforms
Igor Sysoev <igor@sysoev.ru>
parents: 708
diff changeset
18 ngx_uint_t flags);
563
9c2f3ed7a247 nginx-0.3.3-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 557
diff changeset
19 static ngx_int_t ngx_select_process_events(ngx_cycle_t *cycle, ngx_msec_t timer,
9c2f3ed7a247 nginx-0.3.3-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 557
diff changeset
20 ngx_uint_t flags);
2780
846d6ea7e406 ngx_select_repair_fd_sets()
Igor Sysoev <igor@sysoev.ru>
parents: 2779
diff changeset
21 static void ngx_select_repair_fd_sets(ngx_cycle_t *cycle);
114
ac69ab96328d nginx-0.0.1-2003-07-07-10:11:50 import
Igor Sysoev <igor@sysoev.ru>
parents: 107
diff changeset
22 static char *ngx_select_init_conf(ngx_cycle_t *cycle, void *conf);
91
637625a2acdb nginx-0.0.1-2003-05-19-20:39:14 import
Igor Sysoev <igor@sysoev.ru>
parents: 87
diff changeset
23
637625a2acdb nginx-0.0.1-2003-05-19-20:39:14 import
Igor Sysoev <igor@sysoev.ru>
parents: 87
diff changeset
24
26
53cb81681040 nginx-0.0.1-2002-12-15-09:25:09 import
Igor Sysoev <igor@sysoev.ru>
parents: 23
diff changeset
25 static fd_set master_read_fd_set;
53cb81681040 nginx-0.0.1-2002-12-15-09:25:09 import
Igor Sysoev <igor@sysoev.ru>
parents: 23
diff changeset
26 static fd_set master_write_fd_set;
53cb81681040 nginx-0.0.1-2002-12-15-09:25:09 import
Igor Sysoev <igor@sysoev.ru>
parents: 23
diff changeset
27 static fd_set work_read_fd_set;
53cb81681040 nginx-0.0.1-2002-12-15-09:25:09 import
Igor Sysoev <igor@sysoev.ru>
parents: 23
diff changeset
28 static fd_set work_write_fd_set;
0
4eff17414a43 nginx-0.0.1-2002-08-06-20:39:45 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
29
461
a88a3e4e158f nginx-0.1.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 444
diff changeset
30 #if (NGX_WIN32)
1354
f69d1aab6a0f make 64-bit ngx_int_t on 64-bit platforms
Igor Sysoev <igor@sysoev.ru>
parents: 708
diff changeset
31 static ngx_uint_t max_read;
f69d1aab6a0f make 64-bit ngx_int_t on 64-bit platforms
Igor Sysoev <igor@sysoev.ru>
parents: 708
diff changeset
32 static ngx_uint_t max_write;
0
4eff17414a43 nginx-0.0.1-2002-08-06-20:39:45 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
33 #else
1354
f69d1aab6a0f make 64-bit ngx_int_t on 64-bit platforms
Igor Sysoev <igor@sysoev.ru>
parents: 708
diff changeset
34 static ngx_int_t max_fd;
0
4eff17414a43 nginx-0.0.1-2002-08-06-20:39:45 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
35 #endif
4eff17414a43 nginx-0.0.1-2002-08-06-20:39:45 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
36
314
d71c87d11b16 nginx-0.0.3-2004-04-14-09:57:36 import
Igor Sysoev <igor@sysoev.ru>
parents: 302
diff changeset
37 static ngx_uint_t nevents;
17
8dd06e2844f5 nginx-0.0.1-2002-09-27-19:05:29 import
Igor Sysoev <igor@sysoev.ru>
parents: 13
diff changeset
38
8dd06e2844f5 nginx-0.0.1-2002-09-27-19:05:29 import
Igor Sysoev <igor@sysoev.ru>
parents: 13
diff changeset
39 static ngx_event_t **event_index;
91
637625a2acdb nginx-0.0.1-2003-05-19-20:39:14 import
Igor Sysoev <igor@sysoev.ru>
parents: 87
diff changeset
40
637625a2acdb nginx-0.0.1-2003-05-19-20:39:14 import
Igor Sysoev <igor@sysoev.ru>
parents: 87
diff changeset
41
637625a2acdb nginx-0.0.1-2003-05-19-20:39:14 import
Igor Sysoev <igor@sysoev.ru>
parents: 87
diff changeset
42 static ngx_str_t select_name = ngx_string("select");
637625a2acdb nginx-0.0.1-2003-05-19-20:39:14 import
Igor Sysoev <igor@sysoev.ru>
parents: 87
diff changeset
43
637625a2acdb nginx-0.0.1-2003-05-19-20:39:14 import
Igor Sysoev <igor@sysoev.ru>
parents: 87
diff changeset
44 ngx_event_module_t ngx_select_module_ctx = {
637625a2acdb nginx-0.0.1-2003-05-19-20:39:14 import
Igor Sysoev <igor@sysoev.ru>
parents: 87
diff changeset
45 &select_name,
637625a2acdb nginx-0.0.1-2003-05-19-20:39:14 import
Igor Sysoev <igor@sysoev.ru>
parents: 87
diff changeset
46 NULL, /* create configuration */
637625a2acdb nginx-0.0.1-2003-05-19-20:39:14 import
Igor Sysoev <igor@sysoev.ru>
parents: 87
diff changeset
47 ngx_select_init_conf, /* init configuration */
0
4eff17414a43 nginx-0.0.1-2002-08-06-20:39:45 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
48
91
637625a2acdb nginx-0.0.1-2003-05-19-20:39:14 import
Igor Sysoev <igor@sysoev.ru>
parents: 87
diff changeset
49 {
637625a2acdb nginx-0.0.1-2003-05-19-20:39:14 import
Igor Sysoev <igor@sysoev.ru>
parents: 87
diff changeset
50 ngx_select_add_event, /* add an event */
637625a2acdb nginx-0.0.1-2003-05-19-20:39:14 import
Igor Sysoev <igor@sysoev.ru>
parents: 87
diff changeset
51 ngx_select_del_event, /* delete an event */
637625a2acdb nginx-0.0.1-2003-05-19-20:39:14 import
Igor Sysoev <igor@sysoev.ru>
parents: 87
diff changeset
52 ngx_select_add_event, /* enable an event */
637625a2acdb nginx-0.0.1-2003-05-19-20:39:14 import
Igor Sysoev <igor@sysoev.ru>
parents: 87
diff changeset
53 ngx_select_del_event, /* disable an event */
637625a2acdb nginx-0.0.1-2003-05-19-20:39:14 import
Igor Sysoev <igor@sysoev.ru>
parents: 87
diff changeset
54 NULL, /* add an connection */
637625a2acdb nginx-0.0.1-2003-05-19-20:39:14 import
Igor Sysoev <igor@sysoev.ru>
parents: 87
diff changeset
55 NULL, /* 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
56 NULL, /* process the changes */
91
637625a2acdb nginx-0.0.1-2003-05-19-20:39:14 import
Igor Sysoev <igor@sysoev.ru>
parents: 87
diff changeset
57 ngx_select_process_events, /* process the events */
637625a2acdb nginx-0.0.1-2003-05-19-20:39:14 import
Igor Sysoev <igor@sysoev.ru>
parents: 87
diff changeset
58 ngx_select_init, /* init the events */
637625a2acdb nginx-0.0.1-2003-05-19-20:39:14 import
Igor Sysoev <igor@sysoev.ru>
parents: 87
diff changeset
59 ngx_select_done /* done the events */
637625a2acdb nginx-0.0.1-2003-05-19-20:39:14 import
Igor Sysoev <igor@sysoev.ru>
parents: 87
diff changeset
60 }
637625a2acdb nginx-0.0.1-2003-05-19-20:39:14 import
Igor Sysoev <igor@sysoev.ru>
parents: 87
diff changeset
61
637625a2acdb nginx-0.0.1-2003-05-19-20:39:14 import
Igor Sysoev <igor@sysoev.ru>
parents: 87
diff changeset
62 };
637625a2acdb nginx-0.0.1-2003-05-19-20:39:14 import
Igor Sysoev <igor@sysoev.ru>
parents: 87
diff changeset
63
637625a2acdb nginx-0.0.1-2003-05-19-20:39:14 import
Igor Sysoev <igor@sysoev.ru>
parents: 87
diff changeset
64 ngx_module_t ngx_select_module = {
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
65 NGX_MODULE_V1,
91
637625a2acdb nginx-0.0.1-2003-05-19-20:39:14 import
Igor Sysoev <igor@sysoev.ru>
parents: 87
diff changeset
66 &ngx_select_module_ctx, /* module context */
637625a2acdb nginx-0.0.1-2003-05-19-20:39:14 import
Igor Sysoev <igor@sysoev.ru>
parents: 87
diff changeset
67 NULL, /* module directives */
96
a23d010f356d nginx-0.0.1-2003-05-27-16:18:54 import
Igor Sysoev <igor@sysoev.ru>
parents: 92
diff changeset
68 NGX_EVENT_MODULE, /* module type */
541
b09ee85d0ac8 nginx-0.1.45-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 509
diff changeset
69 NULL, /* init master */
114
ac69ab96328d nginx-0.0.1-2003-07-07-10:11:50 import
Igor Sysoev <igor@sysoev.ru>
parents: 107
diff changeset
70 NULL, /* init module */
541
b09ee85d0ac8 nginx-0.1.45-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 509
diff changeset
71 NULL, /* init process */
b09ee85d0ac8 nginx-0.1.45-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 509
diff changeset
72 NULL, /* init thread */
b09ee85d0ac8 nginx-0.1.45-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 509
diff changeset
73 NULL, /* exit thread */
b09ee85d0ac8 nginx-0.1.45-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 509
diff changeset
74 NULL, /* exit process */
b09ee85d0ac8 nginx-0.1.45-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 509
diff changeset
75 NULL, /* exit master */
b09ee85d0ac8 nginx-0.1.45-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 509
diff changeset
76 NGX_MODULE_V1_PADDING
91
637625a2acdb nginx-0.0.1-2003-05-19-20:39:14 import
Igor Sysoev <igor@sysoev.ru>
parents: 87
diff changeset
77 };
637625a2acdb nginx-0.0.1-2003-05-19-20:39:14 import
Igor Sysoev <igor@sysoev.ru>
parents: 87
diff changeset
78
637625a2acdb nginx-0.0.1-2003-05-19-20:39:14 import
Igor Sysoev <igor@sysoev.ru>
parents: 87
diff changeset
79
501
d4ea69372b94 nginx-0.1.25-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 487
diff changeset
80 static ngx_int_t
563
9c2f3ed7a247 nginx-0.3.3-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 557
diff changeset
81 ngx_select_init(ngx_cycle_t *cycle, ngx_msec_t timer)
0
4eff17414a43 nginx-0.0.1-2002-08-06-20:39:45 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
82 {
114
ac69ab96328d nginx-0.0.1-2003-07-07-10:11:50 import
Igor Sysoev <igor@sysoev.ru>
parents: 107
diff changeset
83 ngx_event_t **index;
91
637625a2acdb nginx-0.0.1-2003-05-19-20:39:14 import
Igor Sysoev <igor@sysoev.ru>
parents: 87
diff changeset
84
114
ac69ab96328d nginx-0.0.1-2003-07-07-10:11:50 import
Igor Sysoev <igor@sysoev.ru>
parents: 107
diff changeset
85 if (event_index == NULL) {
ac69ab96328d nginx-0.0.1-2003-07-07-10:11:50 import
Igor Sysoev <igor@sysoev.ru>
parents: 107
diff changeset
86 FD_ZERO(&master_read_fd_set);
ac69ab96328d nginx-0.0.1-2003-07-07-10:11:50 import
Igor Sysoev <igor@sysoev.ru>
parents: 107
diff changeset
87 FD_ZERO(&master_write_fd_set);
ac69ab96328d nginx-0.0.1-2003-07-07-10:11:50 import
Igor Sysoev <igor@sysoev.ru>
parents: 107
diff changeset
88 nevents = 0;
ac69ab96328d nginx-0.0.1-2003-07-07-10:11:50 import
Igor Sysoev <igor@sysoev.ru>
parents: 107
diff changeset
89 }
0
4eff17414a43 nginx-0.0.1-2002-08-06-20:39:45 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
90
314
d71c87d11b16 nginx-0.0.3-2004-04-14-09:57:36 import
Igor Sysoev <igor@sysoev.ru>
parents: 302
diff changeset
91 if (ngx_process == NGX_PROCESS_WORKER
d71c87d11b16 nginx-0.0.3-2004-04-14-09:57:36 import
Igor Sysoev <igor@sysoev.ru>
parents: 302
diff changeset
92 || cycle->old_cycle == NULL
114
ac69ab96328d nginx-0.0.1-2003-07-07-10:11:50 import
Igor Sysoev <igor@sysoev.ru>
parents: 107
diff changeset
93 || cycle->old_cycle->connection_n < cycle->connection_n)
ac69ab96328d nginx-0.0.1-2003-07-07-10:11:50 import
Igor Sysoev <igor@sysoev.ru>
parents: 107
diff changeset
94 {
501
d4ea69372b94 nginx-0.1.25-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 487
diff changeset
95 index = ngx_alloc(sizeof(ngx_event_t *) * 2 * cycle->connection_n,
d4ea69372b94 nginx-0.1.25-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 487
diff changeset
96 cycle->log);
d4ea69372b94 nginx-0.1.25-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 487
diff changeset
97 if (index == NULL) {
d4ea69372b94 nginx-0.1.25-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 487
diff changeset
98 return NGX_ERROR;
d4ea69372b94 nginx-0.1.25-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 487
diff changeset
99 }
17
8dd06e2844f5 nginx-0.0.1-2002-09-27-19:05:29 import
Igor Sysoev <igor@sysoev.ru>
parents: 13
diff changeset
100
114
ac69ab96328d nginx-0.0.1-2003-07-07-10:11:50 import
Igor Sysoev <igor@sysoev.ru>
parents: 107
diff changeset
101 if (event_index) {
ac69ab96328d nginx-0.0.1-2003-07-07-10:11:50 import
Igor Sysoev <igor@sysoev.ru>
parents: 107
diff changeset
102 ngx_memcpy(index, event_index, sizeof(ngx_event_t *) * nevents);
ac69ab96328d nginx-0.0.1-2003-07-07-10:11:50 import
Igor Sysoev <igor@sysoev.ru>
parents: 107
diff changeset
103 ngx_free(event_index);
ac69ab96328d nginx-0.0.1-2003-07-07-10:11:50 import
Igor Sysoev <igor@sysoev.ru>
parents: 107
diff changeset
104 }
563
9c2f3ed7a247 nginx-0.3.3-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 557
diff changeset
105
114
ac69ab96328d nginx-0.0.1-2003-07-07-10:11:50 import
Igor Sysoev <igor@sysoev.ru>
parents: 107
diff changeset
106 event_index = index;
ac69ab96328d nginx-0.0.1-2003-07-07-10:11:50 import
Igor Sysoev <igor@sysoev.ru>
parents: 107
diff changeset
107 }
0
4eff17414a43 nginx-0.0.1-2002-08-06-20:39:45 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
108
114
ac69ab96328d nginx-0.0.1-2003-07-07-10:11:50 import
Igor Sysoev <igor@sysoev.ru>
parents: 107
diff changeset
109 ngx_io = ngx_os_io;
ac69ab96328d nginx-0.0.1-2003-07-07-10:11:50 import
Igor Sysoev <igor@sysoev.ru>
parents: 107
diff changeset
110
91
637625a2acdb nginx-0.0.1-2003-05-19-20:39:14 import
Igor Sysoev <igor@sysoev.ru>
parents: 87
diff changeset
111 ngx_event_actions = ngx_select_module_ctx.actions;
637625a2acdb nginx-0.0.1-2003-05-19-20:39:14 import
Igor Sysoev <igor@sysoev.ru>
parents: 87
diff changeset
112
563
9c2f3ed7a247 nginx-0.3.3-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 557
diff changeset
113 ngx_event_flags = NGX_USE_LEVEL_EVENT;
0
4eff17414a43 nginx-0.0.1-2002-08-06-20:39:45 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
114
461
a88a3e4e158f nginx-0.1.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 444
diff changeset
115 #if (NGX_WIN32)
0
4eff17414a43 nginx-0.0.1-2002-08-06-20:39:45 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
116 max_read = max_write = 0;
4eff17414a43 nginx-0.0.1-2002-08-06-20:39:45 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
117 #else
4eff17414a43 nginx-0.0.1-2002-08-06-20:39:45 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
118 max_fd = -1;
4eff17414a43 nginx-0.0.1-2002-08-06-20:39:45 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
119 #endif
17
8dd06e2844f5 nginx-0.0.1-2002-09-27-19:05:29 import
Igor Sysoev <igor@sysoev.ru>
parents: 13
diff changeset
120
8dd06e2844f5 nginx-0.0.1-2002-09-27-19:05:29 import
Igor Sysoev <igor@sysoev.ru>
parents: 13
diff changeset
121 return NGX_OK;
0
4eff17414a43 nginx-0.0.1-2002-08-06-20:39:45 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
122 }
4eff17414a43 nginx-0.0.1-2002-08-06-20:39:45 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
123
91
637625a2acdb nginx-0.0.1-2003-05-19-20:39:14 import
Igor Sysoev <igor@sysoev.ru>
parents: 87
diff changeset
124
501
d4ea69372b94 nginx-0.1.25-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 487
diff changeset
125 static void
d4ea69372b94 nginx-0.1.25-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 487
diff changeset
126 ngx_select_done(ngx_cycle_t *cycle)
91
637625a2acdb nginx-0.0.1-2003-05-19-20:39:14 import
Igor Sysoev <igor@sysoev.ru>
parents: 87
diff changeset
127 {
637625a2acdb nginx-0.0.1-2003-05-19-20:39:14 import
Igor Sysoev <igor@sysoev.ru>
parents: 87
diff changeset
128 ngx_free(event_index);
114
ac69ab96328d nginx-0.0.1-2003-07-07-10:11:50 import
Igor Sysoev <igor@sysoev.ru>
parents: 107
diff changeset
129
ac69ab96328d nginx-0.0.1-2003-07-07-10:11:50 import
Igor Sysoev <igor@sysoev.ru>
parents: 107
diff changeset
130 event_index = NULL;
91
637625a2acdb nginx-0.0.1-2003-05-19-20:39:14 import
Igor Sysoev <igor@sysoev.ru>
parents: 87
diff changeset
131 }
637625a2acdb nginx-0.0.1-2003-05-19-20:39:14 import
Igor Sysoev <igor@sysoev.ru>
parents: 87
diff changeset
132
637625a2acdb nginx-0.0.1-2003-05-19-20:39:14 import
Igor Sysoev <igor@sysoev.ru>
parents: 87
diff changeset
133
501
d4ea69372b94 nginx-0.1.25-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 487
diff changeset
134 static ngx_int_t
1354
f69d1aab6a0f make 64-bit ngx_int_t on 64-bit platforms
Igor Sysoev <igor@sysoev.ru>
parents: 708
diff changeset
135 ngx_select_add_event(ngx_event_t *ev, ngx_int_t event, ngx_uint_t flags)
0
4eff17414a43 nginx-0.0.1-2002-08-06-20:39:45 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
136 {
39
83fa61cd3d2f nginx-0.0.1-2002-12-24-20:30:59 import
Igor Sysoev <igor@sysoev.ru>
parents: 38
diff changeset
137 ngx_connection_t *c;
8
708f8bb772ec nginx-0.0.1-2002-09-02-18:48:24 import
Igor Sysoev <igor@sysoev.ru>
parents: 7
diff changeset
138
91
637625a2acdb nginx-0.0.1-2003-05-19-20:39:14 import
Igor Sysoev <igor@sysoev.ru>
parents: 87
diff changeset
139 c = ev->data;
8
708f8bb772ec nginx-0.0.1-2002-09-02-18:48:24 import
Igor Sysoev <igor@sysoev.ru>
parents: 7
diff changeset
140
245
e6c005b66b3a nginx-0.0.1-2004-01-30-00:45:01 import
Igor Sysoev <igor@sysoev.ru>
parents: 230
diff changeset
141 ngx_log_debug2(NGX_LOG_DEBUG_EVENT, ev->log, 0,
1354
f69d1aab6a0f make 64-bit ngx_int_t on 64-bit platforms
Igor Sysoev <igor@sysoev.ru>
parents: 708
diff changeset
142 "select add event fd:%d ev:%i", c->fd, event);
0
4eff17414a43 nginx-0.0.1-2002-08-06-20:39:45 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
143
38
2ffaa35fba42 nginx-0.0.1-2002-12-24-10:09:57 import
Igor Sysoev <igor@sysoev.ru>
parents: 36
diff changeset
144 if (ev->index != NGX_INVALID_INDEX) {
2ffaa35fba42 nginx-0.0.1-2002-12-24-10:09:57 import
Igor Sysoev <igor@sysoev.ru>
parents: 36
diff changeset
145 ngx_log_error(NGX_LOG_ALERT, ev->log, 0,
1354
f69d1aab6a0f make 64-bit ngx_int_t on 64-bit platforms
Igor Sysoev <igor@sysoev.ru>
parents: 708
diff changeset
146 "select event fd:%d ev:%i is already set", c->fd, event);
38
2ffaa35fba42 nginx-0.0.1-2002-12-24-10:09:57 import
Igor Sysoev <igor@sysoev.ru>
parents: 36
diff changeset
147 return NGX_OK;
2ffaa35fba42 nginx-0.0.1-2002-12-24-10:09:57 import
Igor Sysoev <igor@sysoev.ru>
parents: 36
diff changeset
148 }
2ffaa35fba42 nginx-0.0.1-2002-12-24-10:09:57 import
Igor Sysoev <igor@sysoev.ru>
parents: 36
diff changeset
149
2808
b7b2b0ea3366 test event type to prevent errors
Igor Sysoev <igor@sysoev.ru>
parents: 2781
diff changeset
150 if ((event == NGX_READ_EVENT && ev->write)
b7b2b0ea3366 test event type to prevent errors
Igor Sysoev <igor@sysoev.ru>
parents: 2781
diff changeset
151 || (event == NGX_WRITE_EVENT && !ev->write))
b7b2b0ea3366 test event type to prevent errors
Igor Sysoev <igor@sysoev.ru>
parents: 2781
diff changeset
152 {
b7b2b0ea3366 test event type to prevent errors
Igor Sysoev <igor@sysoev.ru>
parents: 2781
diff changeset
153 ngx_log_error(NGX_LOG_ALERT, ev->log, 0,
b7b2b0ea3366 test event type to prevent errors
Igor Sysoev <igor@sysoev.ru>
parents: 2781
diff changeset
154 "invalid select %s event fd:%d ev:%i",
b7b2b0ea3366 test event type to prevent errors
Igor Sysoev <igor@sysoev.ru>
parents: 2781
diff changeset
155 ev->write ? "write" : "read", c->fd, event);
b7b2b0ea3366 test event type to prevent errors
Igor Sysoev <igor@sysoev.ru>
parents: 2781
diff changeset
156 return NGX_ERROR;
b7b2b0ea3366 test event type to prevent errors
Igor Sysoev <igor@sysoev.ru>
parents: 2781
diff changeset
157 }
b7b2b0ea3366 test event type to prevent errors
Igor Sysoev <igor@sysoev.ru>
parents: 2781
diff changeset
158
b7b2b0ea3366 test event type to prevent errors
Igor Sysoev <igor@sysoev.ru>
parents: 2781
diff changeset
159
461
a88a3e4e158f nginx-0.1.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 444
diff changeset
160 #if (NGX_WIN32)
179
9f3a78b06c48 nginx-0.0.1-2003-11-11-21:13:43 import
Igor Sysoev <igor@sysoev.ru>
parents: 178
diff changeset
161
8
708f8bb772ec nginx-0.0.1-2002-09-02-18:48:24 import
Igor Sysoev <igor@sysoev.ru>
parents: 7
diff changeset
162 if ((event == NGX_READ_EVENT) && (max_read >= FD_SETSIZE)
708f8bb772ec nginx-0.0.1-2002-09-02-18:48:24 import
Igor Sysoev <igor@sysoev.ru>
parents: 7
diff changeset
163 || (event == NGX_WRITE_EVENT) && (max_write >= FD_SETSIZE))
708f8bb772ec nginx-0.0.1-2002-09-02-18:48:24 import
Igor Sysoev <igor@sysoev.ru>
parents: 7
diff changeset
164 {
708f8bb772ec nginx-0.0.1-2002-09-02-18:48:24 import
Igor Sysoev <igor@sysoev.ru>
parents: 7
diff changeset
165 ngx_log_error(NGX_LOG_ERR, ev->log, 0,
708f8bb772ec nginx-0.0.1-2002-09-02-18:48:24 import
Igor Sysoev <igor@sysoev.ru>
parents: 7
diff changeset
166 "maximum number of descriptors "
708f8bb772ec nginx-0.0.1-2002-09-02-18:48:24 import
Igor Sysoev <igor@sysoev.ru>
parents: 7
diff changeset
167 "supported by select() is %d", FD_SETSIZE);
708f8bb772ec nginx-0.0.1-2002-09-02-18:48:24 import
Igor Sysoev <igor@sysoev.ru>
parents: 7
diff changeset
168 return NGX_ERROR;
0
4eff17414a43 nginx-0.0.1-2002-08-06-20:39:45 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
169 }
4eff17414a43 nginx-0.0.1-2002-08-06-20:39:45 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
170
8
708f8bb772ec nginx-0.0.1-2002-09-02-18:48:24 import
Igor Sysoev <igor@sysoev.ru>
parents: 7
diff changeset
171 if (event == NGX_READ_EVENT) {
708f8bb772ec nginx-0.0.1-2002-09-02-18:48:24 import
Igor Sysoev <igor@sysoev.ru>
parents: 7
diff changeset
172 FD_SET(c->fd, &master_read_fd_set);
708f8bb772ec nginx-0.0.1-2002-09-02-18:48:24 import
Igor Sysoev <igor@sysoev.ru>
parents: 7
diff changeset
173 max_read++;
0
4eff17414a43 nginx-0.0.1-2002-08-06-20:39:45 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
174
8
708f8bb772ec nginx-0.0.1-2002-09-02-18:48:24 import
Igor Sysoev <igor@sysoev.ru>
parents: 7
diff changeset
175 } else if (event == NGX_WRITE_EVENT) {
708f8bb772ec nginx-0.0.1-2002-09-02-18:48:24 import
Igor Sysoev <igor@sysoev.ru>
parents: 7
diff changeset
176 FD_SET(c->fd, &master_write_fd_set);
708f8bb772ec nginx-0.0.1-2002-09-02-18:48:24 import
Igor Sysoev <igor@sysoev.ru>
parents: 7
diff changeset
177 max_write++;
708f8bb772ec nginx-0.0.1-2002-09-02-18:48:24 import
Igor Sysoev <igor@sysoev.ru>
parents: 7
diff changeset
178 }
179
9f3a78b06c48 nginx-0.0.1-2003-11-11-21:13:43 import
Igor Sysoev <igor@sysoev.ru>
parents: 178
diff changeset
179
8
708f8bb772ec nginx-0.0.1-2002-09-02-18:48:24 import
Igor Sysoev <igor@sysoev.ru>
parents: 7
diff changeset
180 #else
179
9f3a78b06c48 nginx-0.0.1-2003-11-11-21:13:43 import
Igor Sysoev <igor@sysoev.ru>
parents: 178
diff changeset
181
92
19cc647ecd91 nginx-0.0.1-2003-05-20-19:37:55 import
Igor Sysoev <igor@sysoev.ru>
parents: 91
diff changeset
182 if (event == NGX_READ_EVENT) {
8
708f8bb772ec nginx-0.0.1-2002-09-02-18:48:24 import
Igor Sysoev <igor@sysoev.ru>
parents: 7
diff changeset
183 FD_SET(c->fd, &master_read_fd_set);
708f8bb772ec nginx-0.0.1-2002-09-02-18:48:24 import
Igor Sysoev <igor@sysoev.ru>
parents: 7
diff changeset
184
92
19cc647ecd91 nginx-0.0.1-2003-05-20-19:37:55 import
Igor Sysoev <igor@sysoev.ru>
parents: 91
diff changeset
185 } else if (event == NGX_WRITE_EVENT) {
8
708f8bb772ec nginx-0.0.1-2002-09-02-18:48:24 import
Igor Sysoev <igor@sysoev.ru>
parents: 7
diff changeset
186 FD_SET(c->fd, &master_write_fd_set);
92
19cc647ecd91 nginx-0.0.1-2003-05-20-19:37:55 import
Igor Sysoev <igor@sysoev.ru>
parents: 91
diff changeset
187 }
8
708f8bb772ec nginx-0.0.1-2002-09-02-18:48:24 import
Igor Sysoev <igor@sysoev.ru>
parents: 7
diff changeset
188
92
19cc647ecd91 nginx-0.0.1-2003-05-20-19:37:55 import
Igor Sysoev <igor@sysoev.ru>
parents: 91
diff changeset
189 if (max_fd != -1 && max_fd < c->fd) {
8
708f8bb772ec nginx-0.0.1-2002-09-02-18:48:24 import
Igor Sysoev <igor@sysoev.ru>
parents: 7
diff changeset
190 max_fd = c->fd;
92
19cc647ecd91 nginx-0.0.1-2003-05-20-19:37:55 import
Igor Sysoev <igor@sysoev.ru>
parents: 91
diff changeset
191 }
8
708f8bb772ec nginx-0.0.1-2002-09-02-18:48:24 import
Igor Sysoev <igor@sysoev.ru>
parents: 7
diff changeset
192
708f8bb772ec nginx-0.0.1-2002-09-02-18:48:24 import
Igor Sysoev <igor@sysoev.ru>
parents: 7
diff changeset
193 #endif
708f8bb772ec nginx-0.0.1-2002-09-02-18:48:24 import
Igor Sysoev <igor@sysoev.ru>
parents: 7
diff changeset
194
39
83fa61cd3d2f nginx-0.0.1-2002-12-24-20:30:59 import
Igor Sysoev <igor@sysoev.ru>
parents: 38
diff changeset
195 ev->active = 1;
0
4eff17414a43 nginx-0.0.1-2002-08-06-20:39:45 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
196
17
8dd06e2844f5 nginx-0.0.1-2002-09-27-19:05:29 import
Igor Sysoev <igor@sysoev.ru>
parents: 13
diff changeset
197 event_index[nevents] = ev;
8dd06e2844f5 nginx-0.0.1-2002-09-27-19:05:29 import
Igor Sysoev <igor@sysoev.ru>
parents: 13
diff changeset
198 ev->index = nevents;
8dd06e2844f5 nginx-0.0.1-2002-09-27-19:05:29 import
Igor Sysoev <igor@sysoev.ru>
parents: 13
diff changeset
199 nevents++;
0
4eff17414a43 nginx-0.0.1-2002-08-06-20:39:45 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
200
8
708f8bb772ec nginx-0.0.1-2002-09-02-18:48:24 import
Igor Sysoev <igor@sysoev.ru>
parents: 7
diff changeset
201 return NGX_OK;
0
4eff17414a43 nginx-0.0.1-2002-08-06-20:39:45 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
202 }
4eff17414a43 nginx-0.0.1-2002-08-06-20:39:45 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
203
91
637625a2acdb nginx-0.0.1-2003-05-19-20:39:14 import
Igor Sysoev <igor@sysoev.ru>
parents: 87
diff changeset
204
501
d4ea69372b94 nginx-0.1.25-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 487
diff changeset
205 static ngx_int_t
1354
f69d1aab6a0f make 64-bit ngx_int_t on 64-bit platforms
Igor Sysoev <igor@sysoev.ru>
parents: 708
diff changeset
206 ngx_select_del_event(ngx_event_t *ev, ngx_int_t event, ngx_uint_t flags)
0
4eff17414a43 nginx-0.0.1-2002-08-06-20:39:45 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
207 {
2809
be08552a64bf make code clearer
Igor Sysoev <igor@sysoev.ru>
parents: 2808
diff changeset
208 ngx_event_t *e;
91
637625a2acdb nginx-0.0.1-2003-05-19-20:39:14 import
Igor Sysoev <igor@sysoev.ru>
parents: 87
diff changeset
209 ngx_connection_t *c;
637625a2acdb nginx-0.0.1-2003-05-19-20:39:14 import
Igor Sysoev <igor@sysoev.ru>
parents: 87
diff changeset
210
637625a2acdb nginx-0.0.1-2003-05-19-20:39:14 import
Igor Sysoev <igor@sysoev.ru>
parents: 87
diff changeset
211 c = ev->data;
8
708f8bb772ec nginx-0.0.1-2002-09-02-18:48:24 import
Igor Sysoev <igor@sysoev.ru>
parents: 7
diff changeset
212
314
d71c87d11b16 nginx-0.0.3-2004-04-14-09:57:36 import
Igor Sysoev <igor@sysoev.ru>
parents: 302
diff changeset
213 ev->active = 0;
d71c87d11b16 nginx-0.0.3-2004-04-14-09:57:36 import
Igor Sysoev <igor@sysoev.ru>
parents: 302
diff changeset
214
92
19cc647ecd91 nginx-0.0.1-2003-05-20-19:37:55 import
Igor Sysoev <igor@sysoev.ru>
parents: 91
diff changeset
215 if (ev->index == NGX_INVALID_INDEX) {
26
53cb81681040 nginx-0.0.1-2002-12-15-09:25:09 import
Igor Sysoev <igor@sysoev.ru>
parents: 23
diff changeset
216 return NGX_OK;
92
19cc647ecd91 nginx-0.0.1-2003-05-20-19:37:55 import
Igor Sysoev <igor@sysoev.ru>
parents: 91
diff changeset
217 }
26
53cb81681040 nginx-0.0.1-2002-12-15-09:25:09 import
Igor Sysoev <igor@sysoev.ru>
parents: 23
diff changeset
218
245
e6c005b66b3a nginx-0.0.1-2004-01-30-00:45:01 import
Igor Sysoev <igor@sysoev.ru>
parents: 230
diff changeset
219 ngx_log_debug2(NGX_LOG_DEBUG_EVENT, ev->log, 0,
1354
f69d1aab6a0f make 64-bit ngx_int_t on 64-bit platforms
Igor Sysoev <igor@sysoev.ru>
parents: 708
diff changeset
220 "select del event fd:%d ev:%i", c->fd, event);
23
f540a63026c9 nginx-0.0.1-2002-12-06-19:32:33 import
Igor Sysoev <igor@sysoev.ru>
parents: 17
diff changeset
221
461
a88a3e4e158f nginx-0.1.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 444
diff changeset
222 #if (NGX_WIN32)
92
19cc647ecd91 nginx-0.0.1-2003-05-20-19:37:55 import
Igor Sysoev <igor@sysoev.ru>
parents: 91
diff changeset
223
8
708f8bb772ec nginx-0.0.1-2002-09-02-18:48:24 import
Igor Sysoev <igor@sysoev.ru>
parents: 7
diff changeset
224 if (event == NGX_READ_EVENT) {
708f8bb772ec nginx-0.0.1-2002-09-02-18:48:24 import
Igor Sysoev <igor@sysoev.ru>
parents: 7
diff changeset
225 FD_CLR(c->fd, &master_read_fd_set);
708f8bb772ec nginx-0.0.1-2002-09-02-18:48:24 import
Igor Sysoev <igor@sysoev.ru>
parents: 7
diff changeset
226 max_read--;
0
4eff17414a43 nginx-0.0.1-2002-08-06-20:39:45 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
227
8
708f8bb772ec nginx-0.0.1-2002-09-02-18:48:24 import
Igor Sysoev <igor@sysoev.ru>
parents: 7
diff changeset
228 } else if (event == NGX_WRITE_EVENT) {
708f8bb772ec nginx-0.0.1-2002-09-02-18:48:24 import
Igor Sysoev <igor@sysoev.ru>
parents: 7
diff changeset
229 FD_CLR(c->fd, &master_write_fd_set);
708f8bb772ec nginx-0.0.1-2002-09-02-18:48:24 import
Igor Sysoev <igor@sysoev.ru>
parents: 7
diff changeset
230 max_write--;
0
4eff17414a43 nginx-0.0.1-2002-08-06-20:39:45 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
231 }
92
19cc647ecd91 nginx-0.0.1-2003-05-20-19:37:55 import
Igor Sysoev <igor@sysoev.ru>
parents: 91
diff changeset
232
8
708f8bb772ec nginx-0.0.1-2002-09-02-18:48:24 import
Igor Sysoev <igor@sysoev.ru>
parents: 7
diff changeset
233 #else
92
19cc647ecd91 nginx-0.0.1-2003-05-20-19:37:55 import
Igor Sysoev <igor@sysoev.ru>
parents: 91
diff changeset
234
19cc647ecd91 nginx-0.0.1-2003-05-20-19:37:55 import
Igor Sysoev <igor@sysoev.ru>
parents: 91
diff changeset
235 if (event == NGX_READ_EVENT) {
8
708f8bb772ec nginx-0.0.1-2002-09-02-18:48:24 import
Igor Sysoev <igor@sysoev.ru>
parents: 7
diff changeset
236 FD_CLR(c->fd, &master_read_fd_set);
0
4eff17414a43 nginx-0.0.1-2002-08-06-20:39:45 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
237
92
19cc647ecd91 nginx-0.0.1-2003-05-20-19:37:55 import
Igor Sysoev <igor@sysoev.ru>
parents: 91
diff changeset
238 } else if (event == NGX_WRITE_EVENT) {
8
708f8bb772ec nginx-0.0.1-2002-09-02-18:48:24 import
Igor Sysoev <igor@sysoev.ru>
parents: 7
diff changeset
239 FD_CLR(c->fd, &master_write_fd_set);
92
19cc647ecd91 nginx-0.0.1-2003-05-20-19:37:55 import
Igor Sysoev <igor@sysoev.ru>
parents: 91
diff changeset
240 }
8
708f8bb772ec nginx-0.0.1-2002-09-02-18:48:24 import
Igor Sysoev <igor@sysoev.ru>
parents: 7
diff changeset
241
92
19cc647ecd91 nginx-0.0.1-2003-05-20-19:37:55 import
Igor Sysoev <igor@sysoev.ru>
parents: 91
diff changeset
242 if (max_fd == c->fd) {
8
708f8bb772ec nginx-0.0.1-2002-09-02-18:48:24 import
Igor Sysoev <igor@sysoev.ru>
parents: 7
diff changeset
243 max_fd = -1;
92
19cc647ecd91 nginx-0.0.1-2003-05-20-19:37:55 import
Igor Sysoev <igor@sysoev.ru>
parents: 91
diff changeset
244 }
19cc647ecd91 nginx-0.0.1-2003-05-20-19:37:55 import
Igor Sysoev <igor@sysoev.ru>
parents: 91
diff changeset
245
8
708f8bb772ec nginx-0.0.1-2002-09-02-18:48:24 import
Igor Sysoev <igor@sysoev.ru>
parents: 7
diff changeset
246 #endif
0
4eff17414a43 nginx-0.0.1-2002-08-06-20:39:45 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
247
1354
f69d1aab6a0f make 64-bit ngx_int_t on 64-bit platforms
Igor Sysoev <igor@sysoev.ru>
parents: 708
diff changeset
248 if (ev->index < --nevents) {
2809
be08552a64bf make code clearer
Igor Sysoev <igor@sysoev.ru>
parents: 2808
diff changeset
249 e = event_index[nevents];
be08552a64bf make code clearer
Igor Sysoev <igor@sysoev.ru>
parents: 2808
diff changeset
250 event_index[ev->index] = e;
be08552a64bf make code clearer
Igor Sysoev <igor@sysoev.ru>
parents: 2808
diff changeset
251 e->index = ev->index;
0
4eff17414a43 nginx-0.0.1-2002-08-06-20:39:45 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
252 }
4eff17414a43 nginx-0.0.1-2002-08-06-20:39:45 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
253
26
53cb81681040 nginx-0.0.1-2002-12-15-09:25:09 import
Igor Sysoev <igor@sysoev.ru>
parents: 23
diff changeset
254 ev->index = NGX_INVALID_INDEX;
53cb81681040 nginx-0.0.1-2002-12-15-09:25:09 import
Igor Sysoev <igor@sysoev.ru>
parents: 23
diff changeset
255
8
708f8bb772ec nginx-0.0.1-2002-09-02-18:48:24 import
Igor Sysoev <igor@sysoev.ru>
parents: 7
diff changeset
256 return NGX_OK;
0
4eff17414a43 nginx-0.0.1-2002-08-06-20:39:45 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
257 }
4eff17414a43 nginx-0.0.1-2002-08-06-20:39:45 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
258
91
637625a2acdb nginx-0.0.1-2003-05-19-20:39:14 import
Igor Sysoev <igor@sysoev.ru>
parents: 87
diff changeset
259
501
d4ea69372b94 nginx-0.1.25-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 487
diff changeset
260 static ngx_int_t
563
9c2f3ed7a247 nginx-0.3.3-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 557
diff changeset
261 ngx_select_process_events(ngx_cycle_t *cycle, ngx_msec_t timer,
9c2f3ed7a247 nginx-0.3.3-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 557
diff changeset
262 ngx_uint_t flags)
0
4eff17414a43 nginx-0.0.1-2002-08-06-20:39:45 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
263 {
2778
ae3cba0dbee3 style fix
Igor Sysoev <igor@sysoev.ru>
parents: 2777
diff changeset
264 int ready, nready;
ae3cba0dbee3 style fix
Igor Sysoev <igor@sysoev.ru>
parents: 2777
diff changeset
265 ngx_err_t err;
ae3cba0dbee3 style fix
Igor Sysoev <igor@sysoev.ru>
parents: 2777
diff changeset
266 ngx_uint_t i, found;
ae3cba0dbee3 style fix
Igor Sysoev <igor@sysoev.ru>
parents: 2777
diff changeset
267 ngx_event_t *ev, **queue;
ae3cba0dbee3 style fix
Igor Sysoev <igor@sysoev.ru>
parents: 2777
diff changeset
268 struct timeval tv, *tp;
ae3cba0dbee3 style fix
Igor Sysoev <igor@sysoev.ru>
parents: 2777
diff changeset
269 ngx_connection_t *c;
0
4eff17414a43 nginx-0.0.1-2002-08-06-20:39:45 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
270
461
a88a3e4e158f nginx-0.1.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 444
diff changeset
271 #if !(NGX_WIN32)
314
d71c87d11b16 nginx-0.0.3-2004-04-14-09:57:36 import
Igor Sysoev <igor@sysoev.ru>
parents: 302
diff changeset
272
0
4eff17414a43 nginx-0.0.1-2002-08-06-20:39:45 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
273 if (max_fd == -1) {
17
8dd06e2844f5 nginx-0.0.1-2002-09-27-19:05:29 import
Igor Sysoev <igor@sysoev.ru>
parents: 13
diff changeset
274 for (i = 0; i < nevents; i++) {
250
1903c6821958 nginx-0.0.2-2004-02-03-23:27:11 import
Igor Sysoev <igor@sysoev.ru>
parents: 248
diff changeset
275 c = event_index[i]->data;
92
19cc647ecd91 nginx-0.0.1-2003-05-20-19:37:55 import
Igor Sysoev <igor@sysoev.ru>
parents: 91
diff changeset
276 if (max_fd < c->fd) {
8
708f8bb772ec nginx-0.0.1-2002-09-02-18:48:24 import
Igor Sysoev <igor@sysoev.ru>
parents: 7
diff changeset
277 max_fd = c->fd;
92
19cc647ecd91 nginx-0.0.1-2003-05-20-19:37:55 import
Igor Sysoev <igor@sysoev.ru>
parents: 91
diff changeset
278 }
0
4eff17414a43 nginx-0.0.1-2002-08-06-20:39:45 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
279 }
4eff17414a43 nginx-0.0.1-2002-08-06-20:39:45 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
280
302
1526e7686b20 nginx-0.0.3-2004-04-01-10:21:13 import
Igor Sysoev <igor@sysoev.ru>
parents: 290
diff changeset
281 ngx_log_debug1(NGX_LOG_DEBUG_EVENT, cycle->log, 0,
245
e6c005b66b3a nginx-0.0.1-2004-01-30-00:45:01 import
Igor Sysoev <igor@sysoev.ru>
parents: 230
diff changeset
282 "change max_fd: %d", max_fd);
0
4eff17414a43 nginx-0.0.1-2002-08-06-20:39:45 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
283 }
314
d71c87d11b16 nginx-0.0.3-2004-04-14-09:57:36 import
Igor Sysoev <igor@sysoev.ru>
parents: 302
diff changeset
284
315
39b6f2df45c0 nginx-0.0.3-2004-04-14-21:44:28 import
Igor Sysoev <igor@sysoev.ru>
parents: 314
diff changeset
285 #endif
39b6f2df45c0 nginx-0.0.3-2004-04-14-21:44:28 import
Igor Sysoev <igor@sysoev.ru>
parents: 314
diff changeset
286
39b6f2df45c0 nginx-0.0.3-2004-04-14-21:44:28 import
Igor Sysoev <igor@sysoev.ru>
parents: 314
diff changeset
287 #if (NGX_DEBUG)
323
ba876b26b76d nginx-0.0.3-2004-04-21-22:54:33 import
Igor Sysoev <igor@sysoev.ru>
parents: 321
diff changeset
288 if (cycle->log->log_level & NGX_LOG_DEBUG_ALL) {
ba876b26b76d nginx-0.0.3-2004-04-21-22:54:33 import
Igor Sysoev <igor@sysoev.ru>
parents: 321
diff changeset
289 for (i = 0; i < nevents; i++) {
ba876b26b76d nginx-0.0.3-2004-04-21-22:54:33 import
Igor Sysoev <igor@sysoev.ru>
parents: 321
diff changeset
290 ev = event_index[i];
ba876b26b76d nginx-0.0.3-2004-04-21-22:54:33 import
Igor Sysoev <igor@sysoev.ru>
parents: 321
diff changeset
291 c = ev->data;
ba876b26b76d nginx-0.0.3-2004-04-21-22:54:33 import
Igor Sysoev <igor@sysoev.ru>
parents: 321
diff changeset
292 ngx_log_debug2(NGX_LOG_DEBUG_EVENT, cycle->log, 0,
ba876b26b76d nginx-0.0.3-2004-04-21-22:54:33 import
Igor Sysoev <igor@sysoev.ru>
parents: 321
diff changeset
293 "select event: fd:%d wr:%d", c->fd, ev->write);
ba876b26b76d nginx-0.0.3-2004-04-21-22:54:33 import
Igor Sysoev <igor@sysoev.ru>
parents: 321
diff changeset
294 }
ba876b26b76d nginx-0.0.3-2004-04-21-22:54:33 import
Igor Sysoev <igor@sysoev.ru>
parents: 321
diff changeset
295
461
a88a3e4e158f nginx-0.1.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 444
diff changeset
296 #if !(NGX_WIN32)
323
ba876b26b76d nginx-0.0.3-2004-04-21-22:54:33 import
Igor Sysoev <igor@sysoev.ru>
parents: 321
diff changeset
297 ngx_log_debug1(NGX_LOG_DEBUG_EVENT, cycle->log, 0,
ba876b26b76d nginx-0.0.3-2004-04-21-22:54:33 import
Igor Sysoev <igor@sysoev.ru>
parents: 321
diff changeset
298 "max_fd: %d", max_fd);
ba876b26b76d nginx-0.0.3-2004-04-21-22:54:33 import
Igor Sysoev <igor@sysoev.ru>
parents: 321
diff changeset
299 #endif
315
39b6f2df45c0 nginx-0.0.3-2004-04-14-21:44:28 import
Igor Sysoev <igor@sysoev.ru>
parents: 314
diff changeset
300 }
39b6f2df45c0 nginx-0.0.3-2004-04-14-21:44:28 import
Igor Sysoev <igor@sysoev.ru>
parents: 314
diff changeset
301 #endif
0
4eff17414a43 nginx-0.0.1-2002-08-06-20:39:45 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
302
316
a0beefedaf94 nginx-0.0.3-2004-04-15-00:34:05 import
Igor Sysoev <igor@sysoev.ru>
parents: 315
diff changeset
303 if (timer == NGX_TIMER_INFINITE) {
a0beefedaf94 nginx-0.0.3-2004-04-15-00:34:05 import
Igor Sysoev <igor@sysoev.ru>
parents: 315
diff changeset
304 tp = NULL;
315
39b6f2df45c0 nginx-0.0.3-2004-04-14-21:44:28 import
Igor Sysoev <igor@sysoev.ru>
parents: 314
diff changeset
305
316
a0beefedaf94 nginx-0.0.3-2004-04-15-00:34:05 import
Igor Sysoev <igor@sysoev.ru>
parents: 315
diff changeset
306 } else {
557
ecd9c160f25b nginx-0.3.0-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 541
diff changeset
307 tv.tv_sec = (long) (timer / 1000);
ecd9c160f25b nginx-0.3.0-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 541
diff changeset
308 tv.tv_usec = (long) ((timer % 1000) * 1000);
315
39b6f2df45c0 nginx-0.0.3-2004-04-14-21:44:28 import
Igor Sysoev <igor@sysoev.ru>
parents: 314
diff changeset
309 tp = &tv;
26
53cb81681040 nginx-0.0.1-2002-12-15-09:25:09 import
Igor Sysoev <igor@sysoev.ru>
parents: 23
diff changeset
310 }
314
d71c87d11b16 nginx-0.0.3-2004-04-14-09:57:36 import
Igor Sysoev <igor@sysoev.ru>
parents: 302
diff changeset
311
302
1526e7686b20 nginx-0.0.3-2004-04-01-10:21:13 import
Igor Sysoev <igor@sysoev.ru>
parents: 290
diff changeset
312 ngx_log_debug1(NGX_LOG_DEBUG_EVENT, cycle->log, 0,
557
ecd9c160f25b nginx-0.3.0-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 541
diff changeset
313 "select timer: %M", timer);
0
4eff17414a43 nginx-0.0.1-2002-08-06-20:39:45 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
314
315
39b6f2df45c0 nginx-0.0.3-2004-04-14-21:44:28 import
Igor Sysoev <igor@sysoev.ru>
parents: 314
diff changeset
315 work_read_fd_set = master_read_fd_set;
39b6f2df45c0 nginx-0.0.3-2004-04-14-21:44:28 import
Igor Sysoev <igor@sysoev.ru>
parents: 314
diff changeset
316 work_write_fd_set = master_write_fd_set;
39b6f2df45c0 nginx-0.0.3-2004-04-14-21:44:28 import
Igor Sysoev <igor@sysoev.ru>
parents: 314
diff changeset
317
461
a88a3e4e158f nginx-0.1.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 444
diff changeset
318 #if (NGX_WIN32)
563
9c2f3ed7a247 nginx-0.3.3-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 557
diff changeset
319
2777
7615a6c5fb54 handle Winsock select() WSAEINVAL
Igor Sysoev <igor@sysoev.ru>
parents: 2062
diff changeset
320 if (max_read || max_write) {
7615a6c5fb54 handle Winsock select() WSAEINVAL
Igor Sysoev <igor@sysoev.ru>
parents: 2062
diff changeset
321 ready = select(0, &work_read_fd_set, &work_write_fd_set, NULL, tp);
7615a6c5fb54 handle Winsock select() WSAEINVAL
Igor Sysoev <igor@sysoev.ru>
parents: 2062
diff changeset
322
7615a6c5fb54 handle Winsock select() WSAEINVAL
Igor Sysoev <igor@sysoev.ru>
parents: 2062
diff changeset
323 } else {
7615a6c5fb54 handle Winsock select() WSAEINVAL
Igor Sysoev <igor@sysoev.ru>
parents: 2062
diff changeset
324
7615a6c5fb54 handle Winsock select() WSAEINVAL
Igor Sysoev <igor@sysoev.ru>
parents: 2062
diff changeset
325 /*
7615a6c5fb54 handle Winsock select() WSAEINVAL
Igor Sysoev <igor@sysoev.ru>
parents: 2062
diff changeset
326 * Winsock select() requires that at least one descriptor set must be
7615a6c5fb54 handle Winsock select() WSAEINVAL
Igor Sysoev <igor@sysoev.ru>
parents: 2062
diff changeset
327 * be non-null, and any non-null descriptor set must contain at least
7615a6c5fb54 handle Winsock select() WSAEINVAL
Igor Sysoev <igor@sysoev.ru>
parents: 2062
diff changeset
328 * one handle to a socket. Otherwise select() returns WSAEINVAL.
7615a6c5fb54 handle Winsock select() WSAEINVAL
Igor Sysoev <igor@sysoev.ru>
parents: 2062
diff changeset
329 */
7615a6c5fb54 handle Winsock select() WSAEINVAL
Igor Sysoev <igor@sysoev.ru>
parents: 2062
diff changeset
330
7615a6c5fb54 handle Winsock select() WSAEINVAL
Igor Sysoev <igor@sysoev.ru>
parents: 2062
diff changeset
331 ngx_msleep(timer);
7615a6c5fb54 handle Winsock select() WSAEINVAL
Igor Sysoev <igor@sysoev.ru>
parents: 2062
diff changeset
332
7615a6c5fb54 handle Winsock select() WSAEINVAL
Igor Sysoev <igor@sysoev.ru>
parents: 2062
diff changeset
333 ready = 0;
7615a6c5fb54 handle Winsock select() WSAEINVAL
Igor Sysoev <igor@sysoev.ru>
parents: 2062
diff changeset
334 }
563
9c2f3ed7a247 nginx-0.3.3-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 557
diff changeset
335
0
4eff17414a43 nginx-0.0.1-2002-08-06-20:39:45 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
336 #else
563
9c2f3ed7a247 nginx-0.3.3-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 557
diff changeset
337
114
ac69ab96328d nginx-0.0.1-2003-07-07-10:11:50 import
Igor Sysoev <igor@sysoev.ru>
parents: 107
diff changeset
338 ready = select(max_fd + 1, &work_read_fd_set, &work_write_fd_set, NULL, tp);
563
9c2f3ed7a247 nginx-0.3.3-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 557
diff changeset
339
0
4eff17414a43 nginx-0.0.1-2002-08-06-20:39:45 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
340 #endif
114
ac69ab96328d nginx-0.0.1-2003-07-07-10:11:50 import
Igor Sysoev <igor@sysoev.ru>
parents: 107
diff changeset
341
ac69ab96328d nginx-0.0.1-2003-07-07-10:11:50 import
Igor Sysoev <igor@sysoev.ru>
parents: 107
diff changeset
342 if (ready == -1) {
ac69ab96328d nginx-0.0.1-2003-07-07-10:11:50 import
Igor Sysoev <igor@sysoev.ru>
parents: 107
diff changeset
343 err = ngx_socket_errno;
ac69ab96328d nginx-0.0.1-2003-07-07-10:11:50 import
Igor Sysoev <igor@sysoev.ru>
parents: 107
diff changeset
344 } else {
ac69ab96328d nginx-0.0.1-2003-07-07-10:11:50 import
Igor Sysoev <igor@sysoev.ru>
parents: 107
diff changeset
345 err = 0;
0
4eff17414a43 nginx-0.0.1-2002-08-06-20:39:45 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
346 }
4eff17414a43 nginx-0.0.1-2002-08-06-20:39:45 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
347
563
9c2f3ed7a247 nginx-0.3.3-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 557
diff changeset
348 if (flags & NGX_UPDATE_TIME) {
9c2f3ed7a247 nginx-0.3.3-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 557
diff changeset
349 ngx_time_update(0, 0);
9c2f3ed7a247 nginx-0.3.3-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 557
diff changeset
350 }
178
a8ff48d26cca nginx-0.0.1-2003-11-11-00:09:22 import
Igor Sysoev <igor@sysoev.ru>
parents: 144
diff changeset
351
302
1526e7686b20 nginx-0.0.3-2004-04-01-10:21:13 import
Igor Sysoev <igor@sysoev.ru>
parents: 290
diff changeset
352 ngx_log_debug1(NGX_LOG_DEBUG_EVENT, cycle->log, 0,
1526e7686b20 nginx-0.0.3-2004-04-01-10:21:13 import
Igor Sysoev <igor@sysoev.ru>
parents: 290
diff changeset
353 "select ready %d", ready);
245
e6c005b66b3a nginx-0.0.1-2004-01-30-00:45:01 import
Igor Sysoev <igor@sysoev.ru>
parents: 230
diff changeset
354
563
9c2f3ed7a247 nginx-0.3.3-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 557
diff changeset
355 #if (NGX_WIN32)
9c2f3ed7a247 nginx-0.3.3-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 557
diff changeset
356
114
ac69ab96328d nginx-0.0.1-2003-07-07-10:11:50 import
Igor Sysoev <igor@sysoev.ru>
parents: 107
diff changeset
357 if (err) {
302
1526e7686b20 nginx-0.0.3-2004-04-01-10:21:13 import
Igor Sysoev <igor@sysoev.ru>
parents: 290
diff changeset
358 ngx_log_error(NGX_LOG_ALERT, cycle->log, err, "select() failed");
2780
846d6ea7e406 ngx_select_repair_fd_sets()
Igor Sysoev <igor@sysoev.ru>
parents: 2779
diff changeset
359
846d6ea7e406 ngx_select_repair_fd_sets()
Igor Sysoev <igor@sysoev.ru>
parents: 2779
diff changeset
360 if (err == WSAENOTSOCK) {
846d6ea7e406 ngx_select_repair_fd_sets()
Igor Sysoev <igor@sysoev.ru>
parents: 2779
diff changeset
361 ngx_select_repair_fd_sets(cycle);
846d6ea7e406 ngx_select_repair_fd_sets()
Igor Sysoev <igor@sysoev.ru>
parents: 2779
diff changeset
362 }
846d6ea7e406 ngx_select_repair_fd_sets()
Igor Sysoev <igor@sysoev.ru>
parents: 2779
diff changeset
363
114
ac69ab96328d nginx-0.0.1-2003-07-07-10:11:50 import
Igor Sysoev <igor@sysoev.ru>
parents: 107
diff changeset
364 return NGX_ERROR;
ac69ab96328d nginx-0.0.1-2003-07-07-10:11:50 import
Igor Sysoev <igor@sysoev.ru>
parents: 107
diff changeset
365 }
0
4eff17414a43 nginx-0.0.1-2002-08-06-20:39:45 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
366
563
9c2f3ed7a247 nginx-0.3.3-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 557
diff changeset
367 #else
314
d71c87d11b16 nginx-0.0.3-2004-04-14-09:57:36 import
Igor Sysoev <igor@sysoev.ru>
parents: 302
diff changeset
368
563
9c2f3ed7a247 nginx-0.3.3-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 557
diff changeset
369 if (err) {
1704
e584e946e198 move condition declarations inside blocks where they are used
Igor Sysoev <igor@sysoev.ru>
parents: 1354
diff changeset
370 ngx_uint_t level;
e584e946e198 move condition declarations inside blocks where they are used
Igor Sysoev <igor@sysoev.ru>
parents: 1354
diff changeset
371
563
9c2f3ed7a247 nginx-0.3.3-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 557
diff changeset
372 if (err == NGX_EINTR) {
9c2f3ed7a247 nginx-0.3.3-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 557
diff changeset
373
9c2f3ed7a247 nginx-0.3.3-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 557
diff changeset
374 if (ngx_event_timer_alarm) {
9c2f3ed7a247 nginx-0.3.3-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 557
diff changeset
375 ngx_event_timer_alarm = 0;
9c2f3ed7a247 nginx-0.3.3-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 557
diff changeset
376 return NGX_OK;
9c2f3ed7a247 nginx-0.3.3-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 557
diff changeset
377 }
577
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 567
diff changeset
378
563
9c2f3ed7a247 nginx-0.3.3-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 557
diff changeset
379 level = NGX_LOG_INFO;
577
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 567
diff changeset
380
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 567
diff changeset
381 } else {
563
9c2f3ed7a247 nginx-0.3.3-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 557
diff changeset
382 level = NGX_LOG_ALERT;
9c2f3ed7a247 nginx-0.3.3-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 557
diff changeset
383 }
9c2f3ed7a247 nginx-0.3.3-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 557
diff changeset
384
9c2f3ed7a247 nginx-0.3.3-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 557
diff changeset
385 ngx_log_error(level, cycle->log, err, "select() failed");
2780
846d6ea7e406 ngx_select_repair_fd_sets()
Igor Sysoev <igor@sysoev.ru>
parents: 2779
diff changeset
386
846d6ea7e406 ngx_select_repair_fd_sets()
Igor Sysoev <igor@sysoev.ru>
parents: 2779
diff changeset
387 if (err == EBADF) {
846d6ea7e406 ngx_select_repair_fd_sets()
Igor Sysoev <igor@sysoev.ru>
parents: 2779
diff changeset
388 ngx_select_repair_fd_sets(cycle);
846d6ea7e406 ngx_select_repair_fd_sets()
Igor Sysoev <igor@sysoev.ru>
parents: 2779
diff changeset
389 }
846d6ea7e406 ngx_select_repair_fd_sets()
Igor Sysoev <igor@sysoev.ru>
parents: 2779
diff changeset
390
314
d71c87d11b16 nginx-0.0.3-2004-04-14-09:57:36 import
Igor Sysoev <igor@sysoev.ru>
parents: 302
diff changeset
391 return NGX_ERROR;
d71c87d11b16 nginx-0.0.3-2004-04-14-09:57:36 import
Igor Sysoev <igor@sysoev.ru>
parents: 302
diff changeset
392 }
d71c87d11b16 nginx-0.0.3-2004-04-14-09:57:36 import
Igor Sysoev <igor@sysoev.ru>
parents: 302
diff changeset
393
563
9c2f3ed7a247 nginx-0.3.3-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 557
diff changeset
394 #endif
9c2f3ed7a247 nginx-0.3.3-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 557
diff changeset
395
567
1af2fcb3be8a nginx-0.3.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 563
diff changeset
396 if (ready == 0) {
1af2fcb3be8a nginx-0.3.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 563
diff changeset
397 if (timer != NGX_TIMER_INFINITE) {
1af2fcb3be8a nginx-0.3.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 563
diff changeset
398 return NGX_OK;
1af2fcb3be8a nginx-0.3.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 563
diff changeset
399 }
1af2fcb3be8a nginx-0.3.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 563
diff changeset
400
1af2fcb3be8a nginx-0.3.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 563
diff changeset
401 ngx_log_error(NGX_LOG_ALERT, cycle->log, 0,
1af2fcb3be8a nginx-0.3.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 563
diff changeset
402 "select() returned no events without timeout");
1af2fcb3be8a nginx-0.3.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 563
diff changeset
403 return NGX_ERROR;
563
9c2f3ed7a247 nginx-0.3.3-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 557
diff changeset
404 }
9c2f3ed7a247 nginx-0.3.3-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 557
diff changeset
405
9c2f3ed7a247 nginx-0.3.3-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 557
diff changeset
406 ngx_mutex_lock(ngx_posted_events_mutex);
9c2f3ed7a247 nginx-0.3.3-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 557
diff changeset
407
17
8dd06e2844f5 nginx-0.0.1-2002-09-27-19:05:29 import
Igor Sysoev <igor@sysoev.ru>
parents: 13
diff changeset
408 nready = 0;
8dd06e2844f5 nginx-0.0.1-2002-09-27-19:05:29 import
Igor Sysoev <igor@sysoev.ru>
parents: 13
diff changeset
409
8dd06e2844f5 nginx-0.0.1-2002-09-27-19:05:29 import
Igor Sysoev <igor@sysoev.ru>
parents: 13
diff changeset
410 for (i = 0; i < nevents; i++) {
8dd06e2844f5 nginx-0.0.1-2002-09-27-19:05:29 import
Igor Sysoev <igor@sysoev.ru>
parents: 13
diff changeset
411 ev = event_index[i];
250
1903c6821958 nginx-0.0.2-2004-02-03-23:27:11 import
Igor Sysoev <igor@sysoev.ru>
parents: 248
diff changeset
412 c = ev->data;
0
4eff17414a43 nginx-0.0.1-2002-08-06-20:39:45 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
413 found = 0;
4eff17414a43 nginx-0.0.1-2002-08-06-20:39:45 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
414
4eff17414a43 nginx-0.0.1-2002-08-06-20:39:45 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
415 if (ev->write) {
8
708f8bb772ec nginx-0.0.1-2002-09-02-18:48:24 import
Igor Sysoev <igor@sysoev.ru>
parents: 7
diff changeset
416 if (FD_ISSET(c->fd, &work_write_fd_set)) {
39
83fa61cd3d2f nginx-0.0.1-2002-12-24-20:30:59 import
Igor Sysoev <igor@sysoev.ru>
parents: 38
diff changeset
417 found = 1;
302
1526e7686b20 nginx-0.0.3-2004-04-01-10:21:13 import
Igor Sysoev <igor@sysoev.ru>
parents: 290
diff changeset
418 ngx_log_debug1(NGX_LOG_DEBUG_EVENT, cycle->log, 0,
245
e6c005b66b3a nginx-0.0.1-2004-01-30-00:45:01 import
Igor Sysoev <igor@sysoev.ru>
parents: 230
diff changeset
419 "select write %d", c->fd);
0
4eff17414a43 nginx-0.0.1-2002-08-06-20:39:45 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
420 }
4eff17414a43 nginx-0.0.1-2002-08-06-20:39:45 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
421
4eff17414a43 nginx-0.0.1-2002-08-06-20:39:45 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
422 } else {
8
708f8bb772ec nginx-0.0.1-2002-09-02-18:48:24 import
Igor Sysoev <igor@sysoev.ru>
parents: 7
diff changeset
423 if (FD_ISSET(c->fd, &work_read_fd_set)) {
39
83fa61cd3d2f nginx-0.0.1-2002-12-24-20:30:59 import
Igor Sysoev <igor@sysoev.ru>
parents: 38
diff changeset
424 found = 1;
302
1526e7686b20 nginx-0.0.3-2004-04-01-10:21:13 import
Igor Sysoev <igor@sysoev.ru>
parents: 290
diff changeset
425 ngx_log_debug1(NGX_LOG_DEBUG_EVENT, cycle->log, 0,
245
e6c005b66b3a nginx-0.0.1-2004-01-30-00:45:01 import
Igor Sysoev <igor@sysoev.ru>
parents: 230
diff changeset
426 "select read %d", c->fd);
0
4eff17414a43 nginx-0.0.1-2002-08-06-20:39:45 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
427 }
4eff17414a43 nginx-0.0.1-2002-08-06-20:39:45 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
428 }
4eff17414a43 nginx-0.0.1-2002-08-06-20:39:45 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
429
17
8dd06e2844f5 nginx-0.0.1-2002-09-27-19:05:29 import
Igor Sysoev <igor@sysoev.ru>
parents: 13
diff changeset
430 if (found) {
314
d71c87d11b16 nginx-0.0.3-2004-04-14-09:57:36 import
Igor Sysoev <igor@sysoev.ru>
parents: 302
diff changeset
431 ev->ready = 1;
d71c87d11b16 nginx-0.0.3-2004-04-14-09:57:36 import
Igor Sysoev <igor@sysoev.ru>
parents: 302
diff changeset
432
563
9c2f3ed7a247 nginx-0.3.3-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 557
diff changeset
433 queue = (ngx_event_t **) (ev->accept ? &ngx_posted_accept_events:
9c2f3ed7a247 nginx-0.3.3-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 557
diff changeset
434 &ngx_posted_events);
577
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 567
diff changeset
435 ngx_locked_post_event(ev, queue);
314
d71c87d11b16 nginx-0.0.3-2004-04-14-09:57:36 import
Igor Sysoev <igor@sysoev.ru>
parents: 302
diff changeset
436
d71c87d11b16 nginx-0.0.3-2004-04-14-09:57:36 import
Igor Sysoev <igor@sysoev.ru>
parents: 302
diff changeset
437 nready++;
17
8dd06e2844f5 nginx-0.0.1-2002-09-27-19:05:29 import
Igor Sysoev <igor@sysoev.ru>
parents: 13
diff changeset
438 }
8dd06e2844f5 nginx-0.0.1-2002-09-27-19:05:29 import
Igor Sysoev <igor@sysoev.ru>
parents: 13
diff changeset
439 }
13
2aba961a1d34 nginx-0.0.1-2002-09-16-19:01:44 import
Igor Sysoev <igor@sysoev.ru>
parents: 8
diff changeset
440
563
9c2f3ed7a247 nginx-0.3.3-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 557
diff changeset
441 ngx_mutex_unlock(ngx_posted_events_mutex);
314
d71c87d11b16 nginx-0.0.3-2004-04-14-09:57:36 import
Igor Sysoev <igor@sysoev.ru>
parents: 302
diff changeset
442
d71c87d11b16 nginx-0.0.3-2004-04-14-09:57:36 import
Igor Sysoev <igor@sysoev.ru>
parents: 302
diff changeset
443 if (ready != nready) {
2781
f545c81e5ddb try to repair the case "select ready != events"
Igor Sysoev <igor@sysoev.ru>
parents: 2780
diff changeset
444 ngx_log_error(NGX_LOG_ALERT, cycle->log, 0,
f545c81e5ddb try to repair the case "select ready != events"
Igor Sysoev <igor@sysoev.ru>
parents: 2780
diff changeset
445 "select ready != events: %d:%d", ready, nready);
f545c81e5ddb try to repair the case "select ready != events"
Igor Sysoev <igor@sysoev.ru>
parents: 2780
diff changeset
446
f545c81e5ddb try to repair the case "select ready != events"
Igor Sysoev <igor@sysoev.ru>
parents: 2780
diff changeset
447 ngx_select_repair_fd_sets(cycle);
0
4eff17414a43 nginx-0.0.1-2002-08-06-20:39:45 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
448 }
4eff17414a43 nginx-0.0.1-2002-08-06-20:39:45 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
449
8
708f8bb772ec nginx-0.0.1-2002-09-02-18:48:24 import
Igor Sysoev <igor@sysoev.ru>
parents: 7
diff changeset
450 return NGX_OK;
0
4eff17414a43 nginx-0.0.1-2002-08-06-20:39:45 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
451 }
91
637625a2acdb nginx-0.0.1-2003-05-19-20:39:14 import
Igor Sysoev <igor@sysoev.ru>
parents: 87
diff changeset
452
637625a2acdb nginx-0.0.1-2003-05-19-20:39:14 import
Igor Sysoev <igor@sysoev.ru>
parents: 87
diff changeset
453
2780
846d6ea7e406 ngx_select_repair_fd_sets()
Igor Sysoev <igor@sysoev.ru>
parents: 2779
diff changeset
454 static void
846d6ea7e406 ngx_select_repair_fd_sets()
Igor Sysoev <igor@sysoev.ru>
parents: 2779
diff changeset
455 ngx_select_repair_fd_sets(ngx_cycle_t *cycle)
846d6ea7e406 ngx_select_repair_fd_sets()
Igor Sysoev <igor@sysoev.ru>
parents: 2779
diff changeset
456 {
846d6ea7e406 ngx_select_repair_fd_sets()
Igor Sysoev <igor@sysoev.ru>
parents: 2779
diff changeset
457 int n;
846d6ea7e406 ngx_select_repair_fd_sets()
Igor Sysoev <igor@sysoev.ru>
parents: 2779
diff changeset
458 socklen_t len;
846d6ea7e406 ngx_select_repair_fd_sets()
Igor Sysoev <igor@sysoev.ru>
parents: 2779
diff changeset
459 ngx_err_t err;
846d6ea7e406 ngx_select_repair_fd_sets()
Igor Sysoev <igor@sysoev.ru>
parents: 2779
diff changeset
460 ngx_socket_t s;
846d6ea7e406 ngx_select_repair_fd_sets()
Igor Sysoev <igor@sysoev.ru>
parents: 2779
diff changeset
461
846d6ea7e406 ngx_select_repair_fd_sets()
Igor Sysoev <igor@sysoev.ru>
parents: 2779
diff changeset
462 #if (NGX_WIN32)
846d6ea7e406 ngx_select_repair_fd_sets()
Igor Sysoev <igor@sysoev.ru>
parents: 2779
diff changeset
463 u_int i;
846d6ea7e406 ngx_select_repair_fd_sets()
Igor Sysoev <igor@sysoev.ru>
parents: 2779
diff changeset
464
846d6ea7e406 ngx_select_repair_fd_sets()
Igor Sysoev <igor@sysoev.ru>
parents: 2779
diff changeset
465 for (i = 0; i < master_read_fd_set.fd_count; i++) {
846d6ea7e406 ngx_select_repair_fd_sets()
Igor Sysoev <igor@sysoev.ru>
parents: 2779
diff changeset
466
846d6ea7e406 ngx_select_repair_fd_sets()
Igor Sysoev <igor@sysoev.ru>
parents: 2779
diff changeset
467 s = master_read_fd_set.fd_array[i];
846d6ea7e406 ngx_select_repair_fd_sets()
Igor Sysoev <igor@sysoev.ru>
parents: 2779
diff changeset
468 len = sizeof(int);
846d6ea7e406 ngx_select_repair_fd_sets()
Igor Sysoev <igor@sysoev.ru>
parents: 2779
diff changeset
469
846d6ea7e406 ngx_select_repair_fd_sets()
Igor Sysoev <igor@sysoev.ru>
parents: 2779
diff changeset
470 if (getsockopt(s, SOL_SOCKET, SO_TYPE, (char *) &n, &len) == -1) {
846d6ea7e406 ngx_select_repair_fd_sets()
Igor Sysoev <igor@sysoev.ru>
parents: 2779
diff changeset
471 err = ngx_socket_errno;
846d6ea7e406 ngx_select_repair_fd_sets()
Igor Sysoev <igor@sysoev.ru>
parents: 2779
diff changeset
472
846d6ea7e406 ngx_select_repair_fd_sets()
Igor Sysoev <igor@sysoev.ru>
parents: 2779
diff changeset
473 ngx_log_error(NGX_LOG_ALERT, cycle->log, err,
846d6ea7e406 ngx_select_repair_fd_sets()
Igor Sysoev <igor@sysoev.ru>
parents: 2779
diff changeset
474 "invalid descriptor #%d in read fd_set", s);
846d6ea7e406 ngx_select_repair_fd_sets()
Igor Sysoev <igor@sysoev.ru>
parents: 2779
diff changeset
475
846d6ea7e406 ngx_select_repair_fd_sets()
Igor Sysoev <igor@sysoev.ru>
parents: 2779
diff changeset
476 FD_CLR(s, &master_read_fd_set);
846d6ea7e406 ngx_select_repair_fd_sets()
Igor Sysoev <igor@sysoev.ru>
parents: 2779
diff changeset
477 }
846d6ea7e406 ngx_select_repair_fd_sets()
Igor Sysoev <igor@sysoev.ru>
parents: 2779
diff changeset
478 }
846d6ea7e406 ngx_select_repair_fd_sets()
Igor Sysoev <igor@sysoev.ru>
parents: 2779
diff changeset
479
846d6ea7e406 ngx_select_repair_fd_sets()
Igor Sysoev <igor@sysoev.ru>
parents: 2779
diff changeset
480 for (i = 0; i < master_write_fd_set.fd_count; i++) {
846d6ea7e406 ngx_select_repair_fd_sets()
Igor Sysoev <igor@sysoev.ru>
parents: 2779
diff changeset
481
846d6ea7e406 ngx_select_repair_fd_sets()
Igor Sysoev <igor@sysoev.ru>
parents: 2779
diff changeset
482 s = master_write_fd_set.fd_array[i];
846d6ea7e406 ngx_select_repair_fd_sets()
Igor Sysoev <igor@sysoev.ru>
parents: 2779
diff changeset
483 len = sizeof(int);
846d6ea7e406 ngx_select_repair_fd_sets()
Igor Sysoev <igor@sysoev.ru>
parents: 2779
diff changeset
484
846d6ea7e406 ngx_select_repair_fd_sets()
Igor Sysoev <igor@sysoev.ru>
parents: 2779
diff changeset
485 if (getsockopt(s, SOL_SOCKET, SO_TYPE, (char *) &n, &len) == -1) {
846d6ea7e406 ngx_select_repair_fd_sets()
Igor Sysoev <igor@sysoev.ru>
parents: 2779
diff changeset
486 err = ngx_socket_errno;
846d6ea7e406 ngx_select_repair_fd_sets()
Igor Sysoev <igor@sysoev.ru>
parents: 2779
diff changeset
487
846d6ea7e406 ngx_select_repair_fd_sets()
Igor Sysoev <igor@sysoev.ru>
parents: 2779
diff changeset
488 ngx_log_error(NGX_LOG_ALERT, cycle->log, err,
846d6ea7e406 ngx_select_repair_fd_sets()
Igor Sysoev <igor@sysoev.ru>
parents: 2779
diff changeset
489 "invalid descriptor #%d in write fd_set", s);
846d6ea7e406 ngx_select_repair_fd_sets()
Igor Sysoev <igor@sysoev.ru>
parents: 2779
diff changeset
490
846d6ea7e406 ngx_select_repair_fd_sets()
Igor Sysoev <igor@sysoev.ru>
parents: 2779
diff changeset
491 FD_CLR(s, &master_write_fd_set);
846d6ea7e406 ngx_select_repair_fd_sets()
Igor Sysoev <igor@sysoev.ru>
parents: 2779
diff changeset
492 }
846d6ea7e406 ngx_select_repair_fd_sets()
Igor Sysoev <igor@sysoev.ru>
parents: 2779
diff changeset
493 }
846d6ea7e406 ngx_select_repair_fd_sets()
Igor Sysoev <igor@sysoev.ru>
parents: 2779
diff changeset
494
846d6ea7e406 ngx_select_repair_fd_sets()
Igor Sysoev <igor@sysoev.ru>
parents: 2779
diff changeset
495 #else
846d6ea7e406 ngx_select_repair_fd_sets()
Igor Sysoev <igor@sysoev.ru>
parents: 2779
diff changeset
496
846d6ea7e406 ngx_select_repair_fd_sets()
Igor Sysoev <igor@sysoev.ru>
parents: 2779
diff changeset
497 for (s = 0; s <= max_fd; s++) {
846d6ea7e406 ngx_select_repair_fd_sets()
Igor Sysoev <igor@sysoev.ru>
parents: 2779
diff changeset
498
846d6ea7e406 ngx_select_repair_fd_sets()
Igor Sysoev <igor@sysoev.ru>
parents: 2779
diff changeset
499 if (FD_ISSET(s, &master_read_fd_set) == 0) {
846d6ea7e406 ngx_select_repair_fd_sets()
Igor Sysoev <igor@sysoev.ru>
parents: 2779
diff changeset
500 continue;
846d6ea7e406 ngx_select_repair_fd_sets()
Igor Sysoev <igor@sysoev.ru>
parents: 2779
diff changeset
501 }
846d6ea7e406 ngx_select_repair_fd_sets()
Igor Sysoev <igor@sysoev.ru>
parents: 2779
diff changeset
502
846d6ea7e406 ngx_select_repair_fd_sets()
Igor Sysoev <igor@sysoev.ru>
parents: 2779
diff changeset
503 len = sizeof(int);
846d6ea7e406 ngx_select_repair_fd_sets()
Igor Sysoev <igor@sysoev.ru>
parents: 2779
diff changeset
504
846d6ea7e406 ngx_select_repair_fd_sets()
Igor Sysoev <igor@sysoev.ru>
parents: 2779
diff changeset
505 if (getsockopt(s, SOL_SOCKET, SO_TYPE, &n, &len) == -1) {
846d6ea7e406 ngx_select_repair_fd_sets()
Igor Sysoev <igor@sysoev.ru>
parents: 2779
diff changeset
506 err = ngx_socket_errno;
846d6ea7e406 ngx_select_repair_fd_sets()
Igor Sysoev <igor@sysoev.ru>
parents: 2779
diff changeset
507
846d6ea7e406 ngx_select_repair_fd_sets()
Igor Sysoev <igor@sysoev.ru>
parents: 2779
diff changeset
508 ngx_log_error(NGX_LOG_ALERT, cycle->log, err,
846d6ea7e406 ngx_select_repair_fd_sets()
Igor Sysoev <igor@sysoev.ru>
parents: 2779
diff changeset
509 "invalid descriptor #%d in read fd_set", s);
846d6ea7e406 ngx_select_repair_fd_sets()
Igor Sysoev <igor@sysoev.ru>
parents: 2779
diff changeset
510
846d6ea7e406 ngx_select_repair_fd_sets()
Igor Sysoev <igor@sysoev.ru>
parents: 2779
diff changeset
511 FD_CLR(s, &master_read_fd_set);
846d6ea7e406 ngx_select_repair_fd_sets()
Igor Sysoev <igor@sysoev.ru>
parents: 2779
diff changeset
512 }
846d6ea7e406 ngx_select_repair_fd_sets()
Igor Sysoev <igor@sysoev.ru>
parents: 2779
diff changeset
513 }
846d6ea7e406 ngx_select_repair_fd_sets()
Igor Sysoev <igor@sysoev.ru>
parents: 2779
diff changeset
514
846d6ea7e406 ngx_select_repair_fd_sets()
Igor Sysoev <igor@sysoev.ru>
parents: 2779
diff changeset
515 for (s = 0; s <= max_fd; s++) {
846d6ea7e406 ngx_select_repair_fd_sets()
Igor Sysoev <igor@sysoev.ru>
parents: 2779
diff changeset
516
846d6ea7e406 ngx_select_repair_fd_sets()
Igor Sysoev <igor@sysoev.ru>
parents: 2779
diff changeset
517 if (FD_ISSET(s, &master_write_fd_set) == 0) {
846d6ea7e406 ngx_select_repair_fd_sets()
Igor Sysoev <igor@sysoev.ru>
parents: 2779
diff changeset
518 continue;
846d6ea7e406 ngx_select_repair_fd_sets()
Igor Sysoev <igor@sysoev.ru>
parents: 2779
diff changeset
519 }
846d6ea7e406 ngx_select_repair_fd_sets()
Igor Sysoev <igor@sysoev.ru>
parents: 2779
diff changeset
520
846d6ea7e406 ngx_select_repair_fd_sets()
Igor Sysoev <igor@sysoev.ru>
parents: 2779
diff changeset
521 len = sizeof(int);
846d6ea7e406 ngx_select_repair_fd_sets()
Igor Sysoev <igor@sysoev.ru>
parents: 2779
diff changeset
522
846d6ea7e406 ngx_select_repair_fd_sets()
Igor Sysoev <igor@sysoev.ru>
parents: 2779
diff changeset
523 if (getsockopt(s, SOL_SOCKET, SO_TYPE, &n, &len) == -1) {
846d6ea7e406 ngx_select_repair_fd_sets()
Igor Sysoev <igor@sysoev.ru>
parents: 2779
diff changeset
524 err = ngx_socket_errno;
846d6ea7e406 ngx_select_repair_fd_sets()
Igor Sysoev <igor@sysoev.ru>
parents: 2779
diff changeset
525
846d6ea7e406 ngx_select_repair_fd_sets()
Igor Sysoev <igor@sysoev.ru>
parents: 2779
diff changeset
526 ngx_log_error(NGX_LOG_ALERT, cycle->log, err,
846d6ea7e406 ngx_select_repair_fd_sets()
Igor Sysoev <igor@sysoev.ru>
parents: 2779
diff changeset
527 "invalid descriptor #%d in write fd_set", s);
846d6ea7e406 ngx_select_repair_fd_sets()
Igor Sysoev <igor@sysoev.ru>
parents: 2779
diff changeset
528
846d6ea7e406 ngx_select_repair_fd_sets()
Igor Sysoev <igor@sysoev.ru>
parents: 2779
diff changeset
529 FD_CLR(s, &master_write_fd_set);
846d6ea7e406 ngx_select_repair_fd_sets()
Igor Sysoev <igor@sysoev.ru>
parents: 2779
diff changeset
530 }
846d6ea7e406 ngx_select_repair_fd_sets()
Igor Sysoev <igor@sysoev.ru>
parents: 2779
diff changeset
531 }
846d6ea7e406 ngx_select_repair_fd_sets()
Igor Sysoev <igor@sysoev.ru>
parents: 2779
diff changeset
532
846d6ea7e406 ngx_select_repair_fd_sets()
Igor Sysoev <igor@sysoev.ru>
parents: 2779
diff changeset
533 max_fd = -1;
846d6ea7e406 ngx_select_repair_fd_sets()
Igor Sysoev <igor@sysoev.ru>
parents: 2779
diff changeset
534
846d6ea7e406 ngx_select_repair_fd_sets()
Igor Sysoev <igor@sysoev.ru>
parents: 2779
diff changeset
535 #endif
846d6ea7e406 ngx_select_repair_fd_sets()
Igor Sysoev <igor@sysoev.ru>
parents: 2779
diff changeset
536 }
846d6ea7e406 ngx_select_repair_fd_sets()
Igor Sysoev <igor@sysoev.ru>
parents: 2779
diff changeset
537
846d6ea7e406 ngx_select_repair_fd_sets()
Igor Sysoev <igor@sysoev.ru>
parents: 2779
diff changeset
538
501
d4ea69372b94 nginx-0.1.25-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 487
diff changeset
539 static char *
d4ea69372b94 nginx-0.1.25-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 487
diff changeset
540 ngx_select_init_conf(ngx_cycle_t *cycle, void *conf)
91
637625a2acdb nginx-0.0.1-2003-05-19-20:39:14 import
Igor Sysoev <igor@sysoev.ru>
parents: 87
diff changeset
541 {
637625a2acdb nginx-0.0.1-2003-05-19-20:39:14 import
Igor Sysoev <igor@sysoev.ru>
parents: 87
diff changeset
542 ngx_event_conf_t *ecf;
637625a2acdb nginx-0.0.1-2003-05-19-20:39:14 import
Igor Sysoev <igor@sysoev.ru>
parents: 87
diff changeset
543
114
ac69ab96328d nginx-0.0.1-2003-07-07-10:11:50 import
Igor Sysoev <igor@sysoev.ru>
parents: 107
diff changeset
544 ecf = ngx_event_get_conf(cycle->conf_ctx, ngx_event_core_module);
91
637625a2acdb nginx-0.0.1-2003-05-19-20:39:14 import
Igor Sysoev <igor@sysoev.ru>
parents: 87
diff changeset
545
321
32847588a82a nginx-0.0.3-2004-04-19-20:36:08 import
Igor Sysoev <igor@sysoev.ru>
parents: 318
diff changeset
546 if (ecf->use != ngx_select_module.ctx_index) {
32847588a82a nginx-0.0.3-2004-04-19-20:36:08 import
Igor Sysoev <igor@sysoev.ru>
parents: 318
diff changeset
547 return NGX_CONF_OK;
32847588a82a nginx-0.0.3-2004-04-19-20:36:08 import
Igor Sysoev <igor@sysoev.ru>
parents: 318
diff changeset
548 }
32847588a82a nginx-0.0.3-2004-04-19-20:36:08 import
Igor Sysoev <igor@sysoev.ru>
parents: 318
diff changeset
549
121
b3655b21375a nginx-0.0.1-2003-07-22-23:53:10 import
Igor Sysoev <igor@sysoev.ru>
parents: 120
diff changeset
550 /* disable warning: the default FD_SETSIZE is 1024U in FreeBSD 5.x */
103
6dfda4cf5200 nginx-0.0.1-2003-06-11-19:28:34 import
Igor Sysoev <igor@sysoev.ru>
parents: 102
diff changeset
551
461
a88a3e4e158f nginx-0.1.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 444
diff changeset
552 #if !(NGX_WIN32)
563
9c2f3ed7a247 nginx-0.3.3-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 557
diff changeset
553
2062
90312b616162 prepare to allow various number of connections in child processes
Igor Sysoev <igor@sysoev.ru>
parents: 1704
diff changeset
554 if (cycle->connection_n > FD_SETSIZE) {
248
e885208c518b nginx-0.0.2-2004-02-03-00:19:52 import
Igor Sysoev <igor@sysoev.ru>
parents: 245
diff changeset
555 ngx_log_error(NGX_LOG_EMERG, cycle->log, 0,
e885208c518b nginx-0.0.2-2004-02-03-00:19:52 import
Igor Sysoev <igor@sysoev.ru>
parents: 245
diff changeset
556 "the maximum number of files "
2062
90312b616162 prepare to allow various number of connections in child processes
Igor Sysoev <igor@sysoev.ru>
parents: 1704
diff changeset
557 "supported by select() is %ud", FD_SETSIZE);
248
e885208c518b nginx-0.0.2-2004-02-03-00:19:52 import
Igor Sysoev <igor@sysoev.ru>
parents: 245
diff changeset
558 return NGX_CONF_ERROR;
91
637625a2acdb nginx-0.0.1-2003-05-19-20:39:14 import
Igor Sysoev <igor@sysoev.ru>
parents: 87
diff changeset
559 }
563
9c2f3ed7a247 nginx-0.3.3-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 557
diff changeset
560
355
0fb6c53fb135 nginx-0.0.7-2004-06-15-21:47:16 import
Igor Sysoev <igor@sysoev.ru>
parents: 323
diff changeset
561 #endif
91
637625a2acdb nginx-0.0.1-2003-05-19-20:39:14 import
Igor Sysoev <igor@sysoev.ru>
parents: 87
diff changeset
562
461
a88a3e4e158f nginx-0.1.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 444
diff changeset
563 #if (NGX_THREADS) && !(NGX_WIN32)
563
9c2f3ed7a247 nginx-0.3.3-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 557
diff changeset
564
381
02a511569afb nginx-0.0.7-2004-07-07-19:01:00 import
Igor Sysoev <igor@sysoev.ru>
parents: 380
diff changeset
565 ngx_log_error(NGX_LOG_EMERG, cycle->log, 0,
02a511569afb nginx-0.0.7-2004-07-07-19:01:00 import
Igor Sysoev <igor@sysoev.ru>
parents: 380
diff changeset
566 "select() is not supported in the threaded mode");
02a511569afb nginx-0.0.7-2004-07-07-19:01:00 import
Igor Sysoev <igor@sysoev.ru>
parents: 380
diff changeset
567 return NGX_CONF_ERROR;
563
9c2f3ed7a247 nginx-0.3.3-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 557
diff changeset
568
381
02a511569afb nginx-0.0.7-2004-07-07-19:01:00 import
Igor Sysoev <igor@sysoev.ru>
parents: 380
diff changeset
569 #else
563
9c2f3ed7a247 nginx-0.3.3-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 557
diff changeset
570
91
637625a2acdb nginx-0.0.1-2003-05-19-20:39:14 import
Igor Sysoev <igor@sysoev.ru>
parents: 87
diff changeset
571 return NGX_CONF_OK;
563
9c2f3ed7a247 nginx-0.3.3-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 557
diff changeset
572
381
02a511569afb nginx-0.0.7-2004-07-07-19:01:00 import
Igor Sysoev <igor@sysoev.ru>
parents: 380
diff changeset
573 #endif
91
637625a2acdb nginx-0.0.1-2003-05-19-20:39:14 import
Igor Sysoev <igor@sysoev.ru>
parents: 87
diff changeset
574 }