Mercurial > hg > nginx-quic
diff src/event/ngx_event_pipe.c @ 155:46eb23d9471d
nginx-0.0.1-2003-10-22-20:38:26 import
author | Igor Sysoev <igor@sysoev.ru> |
---|---|
date | Wed, 22 Oct 2003 16:38:26 +0000 |
parents | eac26585476e |
children | fb61ba77beba |
line wrap: on
line diff
--- a/src/event/ngx_event_pipe.c +++ b/src/event/ngx_event_pipe.c @@ -9,12 +9,12 @@ static int ngx_event_pipe_read_upstream( static int ngx_event_pipe_write_to_downstream(ngx_event_pipe_t *p); static int ngx_event_pipe_write_chain_to_temp_file(ngx_event_pipe_t *p); -ngx_inline static void ngx_remove_shadow_links(ngx_hunk_t *hunk); -ngx_inline static void ngx_remove_shadow_free_raw_hunk(ngx_chain_t **free, - ngx_hunk_t *h); -ngx_inline static void ngx_add_after_partially_filled_hunk(ngx_chain_t **chain, - ngx_chain_t *ce); -static int ngx_drain_chains(ngx_event_pipe_t *p); +ngx_inline static void ngx_event_pipe_remove_shadow_links(ngx_hunk_t *hunk); +ngx_inline static void ngx_event_pipe_free_shadow_raw_hunk(ngx_chain_t **free, + ngx_hunk_t *h); +ngx_inline static void ngx_event_pipe_add_free_hunk(ngx_chain_t **chain, + ngx_chain_t *cl); +static int ngx_event_pipe_drain_chains(ngx_event_pipe_t *p); int ngx_event_pipe(ngx_event_pipe_t *p, int do_write) @@ -57,7 +57,7 @@ int ngx_event_pipe_read_upstream(ngx_eve { int n, rc, size; ngx_hunk_t *h; - ngx_chain_t *chain, *ce, *te; + ngx_chain_t *chain, *cl, *tl; if (p->upstream_eof || p->upstream_error || p->upstream_done) { return NGX_OK; @@ -131,8 +131,8 @@ int ngx_event_pipe_read_upstream(ngx_eve NGX_ABORT); p->hunks++; - ngx_alloc_ce_and_set_hunk(te, h, p->pool, NGX_ABORT); - chain = te; + ngx_alloc_link_and_set_hunk(tl, h, p->pool, NGX_ABORT); + chain = tl; } else if (!p->cachable && p->downstream->write->ready) { @@ -212,33 +212,33 @@ int ngx_event_pipe_read_upstream(ngx_eve } } - ce = chain; + cl = chain; - while (ce && n > 0) { + while (cl && n > 0) { - ngx_remove_shadow_links(ce->hunk); + ngx_event_pipe_remove_shadow_links(cl->hunk); - size = ce->hunk->end - ce->hunk->last; + size = cl->hunk->end - cl->hunk->last; if (n >= size) { - ce->hunk->last = ce->hunk->end; + cl->hunk->last = cl->hunk->end; - /* STUB */ ce->hunk->num = p->num++; + /* STUB */ cl->hunk->num = p->num++; - if (p->input_filter(p, ce->hunk) == NGX_ERROR) { + if (p->input_filter(p, cl->hunk) == NGX_ERROR) { return NGX_ABORT; } n -= size; - ce = ce->next; + cl = cl->next; } else { - ce->hunk->last += n; + cl->hunk->last += n; n = 0; } } - p->free_raw_hunks = ce; + p->free_raw_hunks = cl; } if ((p->upstream_eof || p->upstream_error) && p->free_raw_hunks) { @@ -263,15 +263,15 @@ int ngx_event_pipe_read_upstream(ngx_eve int ngx_event_pipe_write_to_downstream(ngx_event_pipe_t *p) { - size_t busy_len; + size_t bsize, to_write; ngx_hunk_t *h; - ngx_chain_t *out, **le, *ce, *te; + ngx_chain_t *out, **ll, *cl, *tl; ngx_log_debug(p->log, "write downstream: %d" _ p->downstream->write->ready); for ( ;; ) { if (p->downstream_error) { - return ngx_drain_chains(p); + return ngx_event_pipe_drain_chains(p); } if ((p->upstream_eof || p->upstream_error || p->upstream_done) @@ -285,95 +285,105 @@ int ngx_event_pipe_write_to_downstream(n break; } - busy_len = 0; + /* + * bsize is the busy hunks size + * to_write is the size of data that to be written + */ + + bsize = 0; + to_write = 0; if (!(p->upstream_eof || p->upstream_error || p->upstream_done)) { - /* calculate p->busy_len */ - for (ce = p->busy; ce; ce = ce->next) { - busy_len += ngx_hunk_size(ce->hunk); + for (cl = p->busy; cl; cl = cl->next) { + bsize += cl->hunk->end - cl->hunk->start; + to_write += ngx_hunk_size(cl->hunk); } } out = NULL; - le = NULL; + ll = NULL; for ( ;; ) { if (p->out) { - ce = p->out; + cl = p->out; if (!(p->upstream_eof || p->upstream_error || p->upstream_done) - && (busy_len + ngx_hunk_size(ce->hunk) > p->max_busy_len)) + && (bsize + ngx_hunk_size(cl->hunk) > p->busy_size)) { break; } p->out = p->out->next; - ngx_remove_shadow_free_raw_hunk(&p->free_raw_hunks, ce->hunk); + ngx_event_pipe_free_shadow_raw_hunk(&p->free_raw_hunks, + cl->hunk); -ngx_log_debug(p->log, "HUNK OUT: %d %x" _ ce->hunk->num _ ce->hunk->type); +ngx_log_debug(p->log, "HUNK OUT: %d %x" _ cl->hunk->num _ cl->hunk->type); } else if (!p->cachable && p->in) { - ce = p->in; + cl = p->in; if (!(p->upstream_eof || p->upstream_error || p->upstream_done) - && (busy_len + ngx_hunk_size(ce->hunk) > p->max_busy_len)) + && (bsize + ngx_hunk_size(cl->hunk) > p->busy_size)) { break; } p->in = p->in->next; -ngx_log_debug(p->log, "HUNK IN: %d" _ ce->hunk->num); +ngx_log_debug(p->log, "HUNK IN: %d" _ cl->hunk->num); } else { break; } - busy_len += ngx_hunk_size(ce->hunk); - ce->next = NULL; - ngx_chain_add_ce(out, le, ce); + bsize += ngx_hunk_size(cl->hunk); + cl->next = NULL; + ngx_chain_add_link(out, ll, cl); } if (out == NULL) { - ngx_log_debug(p->log, "no hunks to write BUSY: %d" _ busy_len); + ngx_log_debug(p->log, "no hunks to write BUSY: %d" _ to_write); - if (!p->upstream_blocked || busy_len == 0) { + if (!(p->upstream_blocked && to_write)) { break; } - /* if the upstream is blocked then write the busy hunks */ + /* + * if the upstream is blocked and there are the busy hunks + * to write then write these hunks + */ } if (p->output_filter(p->output_ctx, out) == NGX_ERROR) { p->downstream_error = 1; - /* handle the downstream error at the begin of the cycle. */ + /* handle the downstream error at the begin of a cycle */ continue; } ngx_chain_update_chains(&p->free, &p->busy, &out, p->tag); - for (ce = p->free; ce; ce = ce->next) { + for (cl = p->free; cl; cl = cl->next) { /* add the free shadow raw hunk to p->free_raw_hunks */ - if (ce->hunk->type & NGX_HUNK_LAST_SHADOW) { - h = ce->hunk->shadow; + if (cl->hunk->type & NGX_HUNK_LAST_SHADOW) { + h = cl->hunk->shadow; h->pos = h->last = h->start; h->shadow = NULL; - ngx_alloc_ce_and_set_hunk(te, h, p->pool, NGX_ABORT); - ngx_add_after_partially_filled_hunk(&p->free_raw_hunks, te); + ngx_alloc_link_and_set_hunk(tl, h, p->pool, NGX_ABORT); + ngx_event_pipe_add_free_hunk(&p->free_raw_hunks, tl); - ce->hunk->type &= ~NGX_HUNK_LAST_SHADOW; + cl->hunk->type &= ~NGX_HUNK_LAST_SHADOW; } - ce->hunk->shadow = NULL; + cl->hunk->shadow = NULL; - if (p->cyclic_temp_file && (ce->hunk->type & NGX_HUNK_TEMP_FILE)) { + if (p->cyclic_temp_file && (cl->hunk->type & NGX_HUNK_TEMP_FILE)) { /* reset p->temp_offset if all hunks had been sent */ - if (ce->hunk->file_last == p->temp_offset) { + if (cl->hunk->file_last == p->temp_offset) { p->temp_offset = 0; } } @@ -388,7 +398,7 @@ static int ngx_event_pipe_write_chain_to { int rc, size, hsize; ngx_hunk_t *h; - ngx_chain_t *ce, *te, *next, *out, **le, **last_free; + ngx_chain_t *cl, *tl, *next, *out, **ll, **last_free; ngx_log_debug(p->log, "write to file"); @@ -414,13 +424,13 @@ static int ngx_event_pipe_write_chain_to if (!p->cachable) { size = 0; - ce = p->in; - le = NULL; + cl = p->in; + ll = NULL; ngx_log_debug(p->log, "offset: %d" _ p->temp_offset); do { - hsize = ce->hunk->last - ce->hunk->pos; + hsize = cl->hunk->last - cl->hunk->pos; ngx_log_debug(p->log, "hunk size: %d" _ hsize); @@ -431,16 +441,16 @@ ngx_log_debug(p->log, "hunk size: %d" _ } size += hsize; - le = &ce->next; - ce = ce->next; + ll = &cl->next; + cl = cl->next; - } while (ce); + } while (cl); ngx_log_debug(p->log, "size: %d" _ size); - if (ce) { - p->in = ce; - *le = NULL; + if (cl) { + p->in = cl; + *ll = NULL; } else { p->in = NULL; @@ -464,11 +474,11 @@ ngx_log_debug(p->log, "size: %d" _ size) /* void */ } - for (ce = out; ce; ce = next) { - next = ce->next; - ce->next = NULL; + for (cl = out; cl; cl = next) { + next = cl->next; + cl->next = NULL; - h = ce->hunk; + h = cl->hunk; h->file = p->temp_file; h->file_pos = p->temp_offset; p->temp_offset += h->last - h->pos; @@ -480,13 +490,13 @@ ngx_log_debug(p->log, "size: %d" _ size) h->type |= NGX_HUNK_FILE|NGX_HUNK_TEMP_FILE; } - ngx_chain_add_ce(p->out, p->last_out, ce); + ngx_chain_add_link(p->out, p->last_out, cl); if (h->type & NGX_HUNK_LAST_SHADOW) { h->shadow->last = h->shadow->pos = h->shadow->start; - ngx_alloc_ce_and_set_hunk(te, h->shadow, p->pool, NGX_ABORT); - *last_free = te; - last_free = &te->next; + ngx_alloc_link_and_set_hunk(tl, h->shadow, p->pool, NGX_ABORT); + *last_free = tl; + last_free = &tl->next; } } @@ -499,7 +509,7 @@ ngx_log_debug(p->log, "size: %d" _ size) int ngx_event_pipe_copy_input_filter(ngx_event_pipe_t *p, ngx_hunk_t *hunk) { ngx_hunk_t *h; - ngx_chain_t *ce; + ngx_chain_t *cl; if (hunk->pos == hunk->last) { return NGX_OK; @@ -519,15 +529,15 @@ int ngx_event_pipe_copy_input_filter(ngx h->type |= NGX_HUNK_LAST_SHADOW|NGX_HUNK_RECYCLED; hunk->shadow = h; - ngx_alloc_ce_and_set_hunk(ce, h, p->pool, NGX_ERROR); + ngx_alloc_link_and_set_hunk(cl, h, p->pool, NGX_ERROR); ngx_log_debug(p->log, "HUNK %d" _ h->num); - ngx_chain_add_ce(p->in, p->last_in, ce); + ngx_chain_add_link(p->in, p->last_in, cl); return NGX_OK; } -ngx_inline static void ngx_remove_shadow_links(ngx_hunk_t *hunk) +ngx_inline static void ngx_event_pipe_remove_shadow_links(ngx_hunk_t *hunk) { ngx_hunk_t *h, *next; @@ -554,11 +564,11 @@ ngx_inline static void ngx_remove_shadow } -ngx_inline static void ngx_remove_shadow_free_raw_hunk(ngx_chain_t **free, - ngx_hunk_t *h) +ngx_inline static void ngx_event_pipe_free_shadow_raw_hunk(ngx_chain_t **free, + ngx_hunk_t *h) { ngx_hunk_t *s; - ngx_chain_t *ce, **le; + ngx_chain_t *cl, **ll; if (h->shadow == NULL) { return; @@ -568,77 +578,77 @@ ngx_inline static void ngx_remove_shadow /* void */ } - le = free; + ll = free; - for (ce = *free ; ce; ce = ce->next) { - if (ce->hunk == s) { - *le = ce->next; + for (cl = *free ; cl; cl = cl->next) { + if (cl->hunk == s) { + *ll = cl->next; break; } - if (ce->hunk->shadow) { + if (cl->hunk->shadow) { break; } - le = &ce->next; + ll = &cl->next; } } -ngx_inline static void ngx_add_after_partially_filled_hunk(ngx_chain_t **chain, - ngx_chain_t *ce) +ngx_inline static void ngx_event_pipe_add_free_hunk(ngx_chain_t **chain, + ngx_chain_t *cl) { if (*chain == NULL) { - *chain = ce; + *chain = cl; return; } if ((*chain)->hunk->pos != (*chain)->hunk->last) { - ce->next = (*chain)->next; - (*chain)->next = ce; + cl->next = (*chain)->next; + (*chain)->next = cl; } else { - ce->next = (*chain); - (*chain) = ce; + cl->next = (*chain); + (*chain) = cl; } } -static int ngx_drain_chains(ngx_event_pipe_t *p) +static int ngx_event_pipe_drain_chains(ngx_event_pipe_t *p) { ngx_hunk_t *h; - ngx_chain_t *ce, *te; + ngx_chain_t *cl, *tl; for ( ;; ) { if (p->busy) { - ce = p->busy; + cl = p->busy; } else if (p->out) { - ce = p->out; + cl = p->out; } else if (p->in) { - ce = p->in; + cl = p->in; } else { return NGX_OK; } - while (ce) { - if (ce->hunk->type & NGX_HUNK_LAST_SHADOW) { - h = ce->hunk->shadow; - /* THINK NEEDED ??? */ h->pos = h->last = h->start; + while (cl) { + if (cl->hunk->type & NGX_HUNK_LAST_SHADOW) { + h = cl->hunk->shadow; + h->pos = h->last = h->start; h->shadow = NULL; - ngx_alloc_ce_and_set_hunk(te, h, p->pool, NGX_ABORT); - ngx_add_after_partially_filled_hunk(&p->free_raw_hunks, te); + ngx_alloc_link_and_set_hunk(tl, h, p->pool, NGX_ABORT); + ngx_event_pipe_add_free_hunk(&p->free_raw_hunks, tl); - ce->hunk->type &= ~NGX_HUNK_LAST_SHADOW; + cl->hunk->type &= ~NGX_HUNK_LAST_SHADOW; } - ce->hunk->shadow = NULL; - te = ce->next; - ce->next = p->free; - p->free = ce; - ce = te; + cl->hunk->shadow = NULL; + tl = cl->next; + cl->next = p->free; + p->free = cl; + cl = tl; } } }