Mercurial > hg > nginx
annotate src/os/unix/ngx_recv.c @ 6768:d9c180fcbfa7 stable-1.10
Event pipe: do not set file's thread_handler if not needed.
This fixes a problem with aio threads and sendfile with aio_write switched
off, as observed with range requests after fc72784b1f52 (1.9.13). Potential
problems with sendfile in threads were previously described in 9fd738b85fad,
and this seems to be one of them.
The problem occurred as file's thread_handler was set to NULL by event pipe
code after a sendfile thread task was scheduled. As a result, no sendfile
completion code was executed, and the same buffer was additionally sent
using non-threaded sendfile. Fix is to avoid modifying file's thread_handler
if aio_write is switched off.
Note that with "aio_write on" it is still possible that sendfile will use
thread_handler as set by event pipe. This is believed to be safe though,
as handlers used are compatible.
author | Maxim Dounin <mdounin@mdounin.ru> |
---|---|
date | Thu, 01 Sep 2016 20:05:23 +0300 |
parents | 151fd02a4317 |
children | f7849bfb6d21 |
rev | line source |
---|---|
441
da8c5707af39
nginx-0.1.0-2004-09-28-12:34:51 import; set copyright and remove unused files
Igor Sysoev <igor@sysoev.ru>
parents:
375
diff
changeset
|
1 |
da8c5707af39
nginx-0.1.0-2004-09-28-12:34:51 import; set copyright and remove unused files
Igor Sysoev <igor@sysoev.ru>
parents:
375
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 |
4412 | 4 * Copyright (C) Nginx, Inc. |
441
da8c5707af39
nginx-0.1.0-2004-09-28-12:34:51 import; set copyright and remove unused files
Igor Sysoev <igor@sysoev.ru>
parents:
375
diff
changeset
|
5 */ |
da8c5707af39
nginx-0.1.0-2004-09-28-12:34:51 import; set copyright and remove unused files
Igor Sysoev <igor@sysoev.ru>
parents:
375
diff
changeset
|
6 |
91
637625a2acdb
nginx-0.0.1-2003-05-19-20:39:14 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
7 |
637625a2acdb
nginx-0.0.1-2003-05-19-20:39:14 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
8 #include <ngx_config.h> |
637625a2acdb
nginx-0.0.1-2003-05-19-20:39:14 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
9 #include <ngx_core.h> |
103
6dfda4cf5200
nginx-0.0.1-2003-06-11-19:28:34 import
Igor Sysoev <igor@sysoev.ru>
parents:
96
diff
changeset
|
10 #include <ngx_event.h> |
96
a23d010f356d
nginx-0.0.1-2003-05-27-16:18:54 import
Igor Sysoev <igor@sysoev.ru>
parents:
93
diff
changeset
|
11 |
91
637625a2acdb
nginx-0.0.1-2003-05-19-20:39:14 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
12 |
1680 | 13 ssize_t |
14 ngx_unix_recv(ngx_connection_t *c, u_char *buf, size_t size) | |
91
637625a2acdb
nginx-0.0.1-2003-05-19-20:39:14 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
15 { |
637625a2acdb
nginx-0.0.1-2003-05-19-20:39:14 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
16 ssize_t n; |
253
b6793bc5034b
nginx-0.0.2-2004-02-09-10:46:43 import
Igor Sysoev <igor@sysoev.ru>
parents:
218
diff
changeset
|
17 ngx_err_t err; |
96
a23d010f356d
nginx-0.0.1-2003-05-27-16:18:54 import
Igor Sysoev <igor@sysoev.ru>
parents:
93
diff
changeset
|
18 ngx_event_t *rev; |
91
637625a2acdb
nginx-0.0.1-2003-05-19-20:39:14 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
19 |
96
a23d010f356d
nginx-0.0.1-2003-05-27-16:18:54 import
Igor Sysoev <igor@sysoev.ru>
parents:
93
diff
changeset
|
20 rev = c->read; |
91
637625a2acdb
nginx-0.0.1-2003-05-19-20:39:14 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
21 |
6507
8ee94ecd3a50
Merged implementations of ngx_unix_recv().
Valentin Bartenev <vbart@nginx.com>
parents:
6506
diff
changeset
|
22 #if (NGX_HAVE_KQUEUE) |
8ee94ecd3a50
Merged implementations of ngx_unix_recv().
Valentin Bartenev <vbart@nginx.com>
parents:
6506
diff
changeset
|
23 |
455 | 24 if (ngx_event_flags & NGX_USE_KQUEUE_EVENT) { |
218
05592fd7a436
nginx-0.0.1-2004-01-05-23:55:48 import
Igor Sysoev <igor@sysoev.ru>
parents:
188
diff
changeset
|
25 ngx_log_debug3(NGX_LOG_DEBUG_EVENT, c->log, 0, |
05592fd7a436
nginx-0.0.1-2004-01-05-23:55:48 import
Igor Sysoev <igor@sysoev.ru>
parents:
188
diff
changeset
|
26 "recv: eof:%d, avail:%d, err:%d", |
375
744ccb59062d
nginx-0.0.7-2004-07-02-19:54:34 import
Igor Sysoev <igor@sysoev.ru>
parents:
328
diff
changeset
|
27 rev->pending_eof, rev->available, rev->kq_errno); |
91
637625a2acdb
nginx-0.0.1-2003-05-19-20:39:14 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
28 |
96
a23d010f356d
nginx-0.0.1-2003-05-27-16:18:54 import
Igor Sysoev <igor@sysoev.ru>
parents:
93
diff
changeset
|
29 if (rev->available == 0) { |
587 | 30 if (rev->pending_eof) { |
148
5afee0074707
nginx-0.0.1-2003-10-17-00:19:16 import
Igor Sysoev <igor@sysoev.ru>
parents:
144
diff
changeset
|
31 rev->ready = 0; |
163
fb61ba77beba
nginx-0.0.1-2003-10-28-18:45:41 import
Igor Sysoev <igor@sysoev.ru>
parents:
148
diff
changeset
|
32 rev->eof = 1; |
fb61ba77beba
nginx-0.0.1-2003-10-28-18:45:41 import
Igor Sysoev <igor@sysoev.ru>
parents:
148
diff
changeset
|
33 |
fb61ba77beba
nginx-0.0.1-2003-10-28-18:45:41 import
Igor Sysoev <igor@sysoev.ru>
parents:
148
diff
changeset
|
34 if (rev->kq_errno) { |
fb61ba77beba
nginx-0.0.1-2003-10-28-18:45:41 import
Igor Sysoev <igor@sysoev.ru>
parents:
148
diff
changeset
|
35 rev->error = 1; |
fb61ba77beba
nginx-0.0.1-2003-10-28-18:45:41 import
Igor Sysoev <igor@sysoev.ru>
parents:
148
diff
changeset
|
36 ngx_set_socket_errno(rev->kq_errno); |
218
05592fd7a436
nginx-0.0.1-2004-01-05-23:55:48 import
Igor Sysoev <igor@sysoev.ru>
parents:
188
diff
changeset
|
37 |
537 | 38 return ngx_connection_error(c, rev->kq_errno, |
39 "kevent() reported about an closed connection"); | |
96
a23d010f356d
nginx-0.0.1-2003-05-27-16:18:54 import
Igor Sysoev <igor@sysoev.ru>
parents:
93
diff
changeset
|
40 } |
163
fb61ba77beba
nginx-0.0.1-2003-10-28-18:45:41 import
Igor Sysoev <igor@sysoev.ru>
parents:
148
diff
changeset
|
41 |
96
a23d010f356d
nginx-0.0.1-2003-05-27-16:18:54 import
Igor Sysoev <igor@sysoev.ru>
parents:
93
diff
changeset
|
42 return 0; |
587 | 43 |
44 } else { | |
1875
c11d96cbad75
reset ready flag if no data is available,
Igor Sysoev <igor@sysoev.ru>
parents:
1681
diff
changeset
|
45 rev->ready = 0; |
587 | 46 return NGX_AGAIN; |
96
a23d010f356d
nginx-0.0.1-2003-05-27-16:18:54 import
Igor Sysoev <igor@sysoev.ru>
parents:
93
diff
changeset
|
47 } |
91
637625a2acdb
nginx-0.0.1-2003-05-19-20:39:14 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
48 } |
637625a2acdb
nginx-0.0.1-2003-05-19-20:39:14 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
49 } |
637625a2acdb
nginx-0.0.1-2003-05-19-20:39:14 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
50 |
6507
8ee94ecd3a50
Merged implementations of ngx_unix_recv().
Valentin Bartenev <vbart@nginx.com>
parents:
6506
diff
changeset
|
51 #endif |
8ee94ecd3a50
Merged implementations of ngx_unix_recv().
Valentin Bartenev <vbart@nginx.com>
parents:
6506
diff
changeset
|
52 |
96
a23d010f356d
nginx-0.0.1-2003-05-27-16:18:54 import
Igor Sysoev <igor@sysoev.ru>
parents:
93
diff
changeset
|
53 do { |
a23d010f356d
nginx-0.0.1-2003-05-27-16:18:54 import
Igor Sysoev <igor@sysoev.ru>
parents:
93
diff
changeset
|
54 n = recv(c->fd, buf, size, 0); |
91
637625a2acdb
nginx-0.0.1-2003-05-19-20:39:14 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
55 |
253
b6793bc5034b
nginx-0.0.2-2004-02-09-10:46:43 import
Igor Sysoev <igor@sysoev.ru>
parents:
218
diff
changeset
|
56 ngx_log_debug3(NGX_LOG_DEBUG_EVENT, c->log, 0, |
6480 | 57 "recv: fd:%d %z of %uz", c->fd, n, size); |
93
738fe44c70d5
nginx-0.0.1-2003-05-21-17:28:21 import
Igor Sysoev <igor@sysoev.ru>
parents:
91
diff
changeset
|
58 |
6506
dc1ae0056a1e
Fixed small inconsistency in handling EOF among receive functions.
Valentin Bartenev <vbart@nginx.com>
parents:
6480
diff
changeset
|
59 if (n == 0) { |
dc1ae0056a1e
Fixed small inconsistency in handling EOF among receive functions.
Valentin Bartenev <vbart@nginx.com>
parents:
6480
diff
changeset
|
60 rev->ready = 0; |
dc1ae0056a1e
Fixed small inconsistency in handling EOF among receive functions.
Valentin Bartenev <vbart@nginx.com>
parents:
6480
diff
changeset
|
61 rev->eof = 1; |
dc1ae0056a1e
Fixed small inconsistency in handling EOF among receive functions.
Valentin Bartenev <vbart@nginx.com>
parents:
6480
diff
changeset
|
62 |
6507
8ee94ecd3a50
Merged implementations of ngx_unix_recv().
Valentin Bartenev <vbart@nginx.com>
parents:
6506
diff
changeset
|
63 #if (NGX_HAVE_KQUEUE) |
8ee94ecd3a50
Merged implementations of ngx_unix_recv().
Valentin Bartenev <vbart@nginx.com>
parents:
6506
diff
changeset
|
64 |
6506
dc1ae0056a1e
Fixed small inconsistency in handling EOF among receive functions.
Valentin Bartenev <vbart@nginx.com>
parents:
6480
diff
changeset
|
65 /* |
dc1ae0056a1e
Fixed small inconsistency in handling EOF among receive functions.
Valentin Bartenev <vbart@nginx.com>
parents:
6480
diff
changeset
|
66 * on FreeBSD recv() may return 0 on closed socket |
dc1ae0056a1e
Fixed small inconsistency in handling EOF among receive functions.
Valentin Bartenev <vbart@nginx.com>
parents:
6480
diff
changeset
|
67 * even if kqueue reported about available data |
dc1ae0056a1e
Fixed small inconsistency in handling EOF among receive functions.
Valentin Bartenev <vbart@nginx.com>
parents:
6480
diff
changeset
|
68 */ |
dc1ae0056a1e
Fixed small inconsistency in handling EOF among receive functions.
Valentin Bartenev <vbart@nginx.com>
parents:
6480
diff
changeset
|
69 |
dc1ae0056a1e
Fixed small inconsistency in handling EOF among receive functions.
Valentin Bartenev <vbart@nginx.com>
parents:
6480
diff
changeset
|
70 if (ngx_event_flags & NGX_USE_KQUEUE_EVENT) { |
dc1ae0056a1e
Fixed small inconsistency in handling EOF among receive functions.
Valentin Bartenev <vbart@nginx.com>
parents:
6480
diff
changeset
|
71 rev->available = 0; |
dc1ae0056a1e
Fixed small inconsistency in handling EOF among receive functions.
Valentin Bartenev <vbart@nginx.com>
parents:
6480
diff
changeset
|
72 } |
dc1ae0056a1e
Fixed small inconsistency in handling EOF among receive functions.
Valentin Bartenev <vbart@nginx.com>
parents:
6480
diff
changeset
|
73 |
6507
8ee94ecd3a50
Merged implementations of ngx_unix_recv().
Valentin Bartenev <vbart@nginx.com>
parents:
6506
diff
changeset
|
74 #endif |
8ee94ecd3a50
Merged implementations of ngx_unix_recv().
Valentin Bartenev <vbart@nginx.com>
parents:
6506
diff
changeset
|
75 |
6506
dc1ae0056a1e
Fixed small inconsistency in handling EOF among receive functions.
Valentin Bartenev <vbart@nginx.com>
parents:
6480
diff
changeset
|
76 return 0; |
dc1ae0056a1e
Fixed small inconsistency in handling EOF among receive functions.
Valentin Bartenev <vbart@nginx.com>
parents:
6480
diff
changeset
|
77 } |
dc1ae0056a1e
Fixed small inconsistency in handling EOF among receive functions.
Valentin Bartenev <vbart@nginx.com>
parents:
6480
diff
changeset
|
78 |
dc1ae0056a1e
Fixed small inconsistency in handling EOF among receive functions.
Valentin Bartenev <vbart@nginx.com>
parents:
6480
diff
changeset
|
79 if (n > 0) { |
dc1ae0056a1e
Fixed small inconsistency in handling EOF among receive functions.
Valentin Bartenev <vbart@nginx.com>
parents:
6480
diff
changeset
|
80 |
6507
8ee94ecd3a50
Merged implementations of ngx_unix_recv().
Valentin Bartenev <vbart@nginx.com>
parents:
6506
diff
changeset
|
81 #if (NGX_HAVE_KQUEUE) |
8ee94ecd3a50
Merged implementations of ngx_unix_recv().
Valentin Bartenev <vbart@nginx.com>
parents:
6506
diff
changeset
|
82 |
455 | 83 if (ngx_event_flags & NGX_USE_KQUEUE_EVENT) { |
96
a23d010f356d
nginx-0.0.1-2003-05-27-16:18:54 import
Igor Sysoev <igor@sysoev.ru>
parents:
93
diff
changeset
|
84 rev->available -= n; |
163
fb61ba77beba
nginx-0.0.1-2003-10-28-18:45:41 import
Igor Sysoev <igor@sysoev.ru>
parents:
148
diff
changeset
|
85 |
fb61ba77beba
nginx-0.0.1-2003-10-28-18:45:41 import
Igor Sysoev <igor@sysoev.ru>
parents:
148
diff
changeset
|
86 /* |
583 | 87 * rev->available may be negative here because some additional |
587 | 88 * bytes may be received between kevent() and recv() |
163
fb61ba77beba
nginx-0.0.1-2003-10-28-18:45:41 import
Igor Sysoev <igor@sysoev.ru>
parents:
148
diff
changeset
|
89 */ |
fb61ba77beba
nginx-0.0.1-2003-10-28-18:45:41 import
Igor Sysoev <igor@sysoev.ru>
parents:
148
diff
changeset
|
90 |
144
ef8c87afcfc5
nginx-0.0.1-2003-10-12-20:49:16 import
Igor Sysoev <igor@sysoev.ru>
parents:
103
diff
changeset
|
91 if (rev->available <= 0) { |
375
744ccb59062d
nginx-0.0.7-2004-07-02-19:54:34 import
Igor Sysoev <igor@sysoev.ru>
parents:
328
diff
changeset
|
92 if (!rev->pending_eof) { |
148
5afee0074707
nginx-0.0.1-2003-10-17-00:19:16 import
Igor Sysoev <igor@sysoev.ru>
parents:
144
diff
changeset
|
93 rev->ready = 0; |
5afee0074707
nginx-0.0.1-2003-10-17-00:19:16 import
Igor Sysoev <igor@sysoev.ru>
parents:
144
diff
changeset
|
94 } |
5afee0074707
nginx-0.0.1-2003-10-17-00:19:16 import
Igor Sysoev <igor@sysoev.ru>
parents:
144
diff
changeset
|
95 |
6508
151fd02a4317
Simplified ngx_unix_recv() and ngx_readv_chain().
Ruslan Ermilov <ru@nginx.com>
parents:
6507
diff
changeset
|
96 rev->available = 0; |
96
a23d010f356d
nginx-0.0.1-2003-05-27-16:18:54 import
Igor Sysoev <igor@sysoev.ru>
parents:
93
diff
changeset
|
97 } |
91
637625a2acdb
nginx-0.0.1-2003-05-19-20:39:14 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
98 |
96
a23d010f356d
nginx-0.0.1-2003-05-27-16:18:54 import
Igor Sysoev <igor@sysoev.ru>
parents:
93
diff
changeset
|
99 return n; |
a23d010f356d
nginx-0.0.1-2003-05-27-16:18:54 import
Igor Sysoev <igor@sysoev.ru>
parents:
93
diff
changeset
|
100 } |
91
637625a2acdb
nginx-0.0.1-2003-05-19-20:39:14 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
101 |
6507
8ee94ecd3a50
Merged implementations of ngx_unix_recv().
Valentin Bartenev <vbart@nginx.com>
parents:
6506
diff
changeset
|
102 #endif |
8ee94ecd3a50
Merged implementations of ngx_unix_recv().
Valentin Bartenev <vbart@nginx.com>
parents:
6506
diff
changeset
|
103 |
5267
13c006f0c40e
Events: honor NGX_USE_GREEDY_EVENT when kqueue support is enabled.
Valentin Bartenev <vbart@nginx.com>
parents:
4412
diff
changeset
|
104 if ((size_t) n < size |
13c006f0c40e
Events: honor NGX_USE_GREEDY_EVENT when kqueue support is enabled.
Valentin Bartenev <vbart@nginx.com>
parents:
4412
diff
changeset
|
105 && !(ngx_event_flags & NGX_USE_GREEDY_EVENT)) |
13c006f0c40e
Events: honor NGX_USE_GREEDY_EVENT when kqueue support is enabled.
Valentin Bartenev <vbart@nginx.com>
parents:
4412
diff
changeset
|
106 { |
96
a23d010f356d
nginx-0.0.1-2003-05-27-16:18:54 import
Igor Sysoev <igor@sysoev.ru>
parents:
93
diff
changeset
|
107 rev->ready = 0; |
a23d010f356d
nginx-0.0.1-2003-05-27-16:18:54 import
Igor Sysoev <igor@sysoev.ru>
parents:
93
diff
changeset
|
108 } |
a23d010f356d
nginx-0.0.1-2003-05-27-16:18:54 import
Igor Sysoev <igor@sysoev.ru>
parents:
93
diff
changeset
|
109 |
a23d010f356d
nginx-0.0.1-2003-05-27-16:18:54 import
Igor Sysoev <igor@sysoev.ru>
parents:
93
diff
changeset
|
110 return n; |
91
637625a2acdb
nginx-0.0.1-2003-05-19-20:39:14 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
111 } |
637625a2acdb
nginx-0.0.1-2003-05-19-20:39:14 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
112 |
253
b6793bc5034b
nginx-0.0.2-2004-02-09-10:46:43 import
Igor Sysoev <igor@sysoev.ru>
parents:
218
diff
changeset
|
113 err = ngx_socket_errno; |
b6793bc5034b
nginx-0.0.2-2004-02-09-10:46:43 import
Igor Sysoev <igor@sysoev.ru>
parents:
218
diff
changeset
|
114 |
b6793bc5034b
nginx-0.0.2-2004-02-09-10:46:43 import
Igor Sysoev <igor@sysoev.ru>
parents:
218
diff
changeset
|
115 if (err == NGX_EAGAIN || err == NGX_EINTR) { |
257
70e1c7d2b83d
nginx-0.0.2-2004-02-11-20:08:49 import
Igor Sysoev <igor@sysoev.ru>
parents:
256
diff
changeset
|
116 ngx_log_debug0(NGX_LOG_DEBUG_EVENT, c->log, err, |
253
b6793bc5034b
nginx-0.0.2-2004-02-09-10:46:43 import
Igor Sysoev <igor@sysoev.ru>
parents:
218
diff
changeset
|
117 "recv() not ready"); |
b6793bc5034b
nginx-0.0.2-2004-02-09-10:46:43 import
Igor Sysoev <igor@sysoev.ru>
parents:
218
diff
changeset
|
118 n = NGX_AGAIN; |
91
637625a2acdb
nginx-0.0.1-2003-05-19-20:39:14 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
119 |
253
b6793bc5034b
nginx-0.0.2-2004-02-09-10:46:43 import
Igor Sysoev <igor@sysoev.ru>
parents:
218
diff
changeset
|
120 } else { |
b6793bc5034b
nginx-0.0.2-2004-02-09-10:46:43 import
Igor Sysoev <igor@sysoev.ru>
parents:
218
diff
changeset
|
121 n = ngx_connection_error(c, err, "recv() failed"); |
b6793bc5034b
nginx-0.0.2-2004-02-09-10:46:43 import
Igor Sysoev <igor@sysoev.ru>
parents:
218
diff
changeset
|
122 break; |
b6793bc5034b
nginx-0.0.2-2004-02-09-10:46:43 import
Igor Sysoev <igor@sysoev.ru>
parents:
218
diff
changeset
|
123 } |
91
637625a2acdb
nginx-0.0.1-2003-05-19-20:39:14 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
124 |
253
b6793bc5034b
nginx-0.0.2-2004-02-09-10:46:43 import
Igor Sysoev <igor@sysoev.ru>
parents:
218
diff
changeset
|
125 } while (err == NGX_EINTR); |
188
0061d1f0908d
nginx-0.0.1-2003-11-18-11:04:34 import
Igor Sysoev <igor@sysoev.ru>
parents:
184
diff
changeset
|
126 |
0061d1f0908d
nginx-0.0.1-2003-11-18-11:04:34 import
Igor Sysoev <igor@sysoev.ru>
parents:
184
diff
changeset
|
127 rev->ready = 0; |
0061d1f0908d
nginx-0.0.1-2003-11-18-11:04:34 import
Igor Sysoev <igor@sysoev.ru>
parents:
184
diff
changeset
|
128 |
3642 | 129 if (n == NGX_ERROR) { |
184
1bf718ce0dde
nginx-0.0.1-2003-11-14-10:20:34 import
Igor Sysoev <igor@sysoev.ru>
parents:
163
diff
changeset
|
130 rev->error = 1; |
1bf718ce0dde
nginx-0.0.1-2003-11-14-10:20:34 import
Igor Sysoev <igor@sysoev.ru>
parents:
163
diff
changeset
|
131 } |
1bf718ce0dde
nginx-0.0.1-2003-11-14-10:20:34 import
Igor Sysoev <igor@sysoev.ru>
parents:
163
diff
changeset
|
132 |
91
637625a2acdb
nginx-0.0.1-2003-05-19-20:39:14 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
133 return n; |
637625a2acdb
nginx-0.0.1-2003-05-19-20:39:14 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
134 } |