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