Mercurial > hg > nginx
comparison src/event/ngx_event_pipe.c @ 164:84036764e215
nginx-0.0.1-2003-10-29-11:30:44 import
author | Igor Sysoev <igor@sysoev.ru> |
---|---|
date | Wed, 29 Oct 2003 08:30:44 +0000 |
parents | fb61ba77beba |
children | 389d7ee9fa60 |
comparison
equal
deleted
inserted
replaced
163:fb61ba77beba | 164:84036764e215 |
---|---|
17 static int ngx_event_pipe_drain_chains(ngx_event_pipe_t *p); | 17 static int ngx_event_pipe_drain_chains(ngx_event_pipe_t *p); |
18 | 18 |
19 | 19 |
20 int ngx_event_pipe(ngx_event_pipe_t *p, int do_write) | 20 int ngx_event_pipe(ngx_event_pipe_t *p, int do_write) |
21 { | 21 { |
22 ngx_event_t *rev, *wev; | |
23 | |
22 for ( ;; ) { | 24 for ( ;; ) { |
23 if (do_write) { | 25 if (do_write) { |
24 if (ngx_event_pipe_write_to_downstream(p) == NGX_ABORT) { | 26 if (ngx_event_pipe_write_to_downstream(p) == NGX_ABORT) { |
25 return NGX_ABORT; | 27 return NGX_ABORT; |
26 } | 28 } |
38 } | 40 } |
39 | 41 |
40 do_write = 1; | 42 do_write = 1; |
41 } | 43 } |
42 | 44 |
43 if (ngx_handle_read_event(p->upstream->read) == NGX_ERROR) { | 45 rev = p->upstream->read; |
46 | |
47 if (ngx_handle_read_event(rev, (rev->eof || rev->error)) == NGX_ERROR) { | |
44 return NGX_ABORT; | 48 return NGX_ABORT; |
45 } | 49 } |
46 | 50 |
47 if (ngx_handle_write_event(p->downstream->write, | 51 if (rev->active) { |
48 /* TODO: lowat */ 0) == NGX_ERROR) { | 52 ngx_add_timer(rev, p->read_timeout); |
53 } | |
54 | |
55 wev = p->downstream->write; | |
56 | |
57 if (ngx_handle_write_event(wev, p->send_lowat) == NGX_ERROR) { | |
49 return NGX_ABORT; | 58 return NGX_ABORT; |
59 } | |
60 | |
61 if (wev->active) { | |
62 ngx_add_timer(wev, p->send_timeout); | |
50 } | 63 } |
51 | 64 |
52 return NGX_OK; | 65 return NGX_OK; |
53 } | 66 } |
54 | 67 |
110 p->upstream_error = 1; | 123 p->upstream_error = 1; |
111 p->upstream_eof = 0; | 124 p->upstream_eof = 0; |
112 | 125 |
113 ngx_log_error(NGX_LOG_ERR, p->log, | 126 ngx_log_error(NGX_LOG_ERR, p->log, |
114 p->upstream->read->kq_errno, | 127 p->upstream->read->kq_errno, |
115 /* TODO: ngx_readv_chain_n */ | |
116 "readv() failed"); | 128 "readv() failed"); |
117 } | 129 } |
118 | 130 |
119 break; | 131 break; |
120 } | 132 } |
211 ngx_log_debug(p->log, "no hunks to read in"); | 223 ngx_log_debug(p->log, "no hunks to read in"); |
212 | 224 |
213 break; | 225 break; |
214 } | 226 } |
215 | 227 |
216 ngx_log_debug(p->log, "HUNK_FREE: %d" _ chain->hunk->num); | |
217 | |
218 n = ngx_recv_chain(p->upstream, chain); | 228 n = ngx_recv_chain(p->upstream, chain); |
219 | 229 |
220 ngx_log_debug(p->log, "recv_chain: %d" _ n); | 230 ngx_log_debug(p->log, "recv_chain: %d" _ n); |
221 | 231 |
222 p->free_raw_hunks = chain; | 232 p->free_raw_hunks = chain; |
341 | 351 |
342 p->out = p->out->next; | 352 p->out = p->out->next; |
343 ngx_event_pipe_free_shadow_raw_hunk(&p->free_raw_hunks, | 353 ngx_event_pipe_free_shadow_raw_hunk(&p->free_raw_hunks, |
344 cl->hunk); | 354 cl->hunk); |
345 | 355 |
346 ngx_log_debug(p->log, "HUNK OUT: %d %x" _ cl->hunk->num _ cl->hunk->type); | |
347 | |
348 } else if (!p->cachable && p->in) { | 356 } else if (!p->cachable && p->in) { |
349 cl = p->in; | 357 cl = p->in; |
350 | 358 |
351 if (!(p->upstream_eof || p->upstream_error || p->upstream_done) | 359 if (!(p->upstream_eof || p->upstream_error || p->upstream_done) |
352 && (bsize + ngx_hunk_size(cl->hunk) > p->busy_size)) | 360 && (bsize + ngx_hunk_size(cl->hunk) > p->busy_size)) |
353 { | 361 { |
354 break; | 362 break; |
355 } | 363 } |
356 | 364 |
357 p->in = p->in->next; | 365 p->in = p->in->next; |
358 | |
359 ngx_log_debug(p->log, "HUNK IN: %d" _ cl->hunk->num); | |
360 | 366 |
361 } else { | 367 } else { |
362 break; | 368 break; |
363 } | 369 } |
364 | 370 |