Mercurial > hg > nginx
diff src/event/ngx_event_pipe.c @ 343:6bdf858bff8c
nginx-0.0.3-2004-05-28-19:49:23 import; rename ngx_hunk_t to ngx_buf_t
author | Igor Sysoev <igor@sysoev.ru> |
---|---|
date | Fri, 28 May 2004 15:49:23 +0000 |
parents | bcbe876f4262 |
children | e366ba5db8f8 |
line wrap: on
line diff
--- a/src/event/ngx_event_pipe.c +++ b/src/event/ngx_event_pipe.c @@ -5,19 +5,19 @@ #include <ngx_event_pipe.h> -static int ngx_event_pipe_read_upstream(ngx_event_pipe_t *p); -static int ngx_event_pipe_write_to_downstream(ngx_event_pipe_t *p); +static ngx_int_t ngx_event_pipe_read_upstream(ngx_event_pipe_t *p); +static ngx_int_t 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_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); +static ngx_int_t ngx_event_pipe_write_chain_to_temp_file(ngx_event_pipe_t *p); +ngx_inline static void ngx_event_pipe_remove_shadow_links(ngx_buf_t *buf); +ngx_inline static void ngx_event_pipe_free_shadow_raw_buf(ngx_chain_t **free, + ngx_buf_t *buf); +ngx_inline static void ngx_event_pipe_add_free_buf(ngx_chain_t **chain, + ngx_chain_t *cl); +static ngx_int_t ngx_event_pipe_drain_chains(ngx_event_pipe_t *p); -int ngx_event_pipe(ngx_event_pipe_t *p, int do_write) +ngx_int_t ngx_event_pipe(ngx_event_pipe_t *p, int do_write) { u_int flags; ngx_event_t *rev, *wev; @@ -73,10 +73,10 @@ int ngx_event_pipe(ngx_event_pipe_t *p, } -int ngx_event_pipe_read_upstream(ngx_event_pipe_t *p) +ngx_int_t ngx_event_pipe_read_upstream(ngx_event_pipe_t *p) { int n, rc, size; - ngx_hunk_t *h; + ngx_buf_t *b; ngx_chain_t *chain, *cl, *tl; if (p->upstream_eof || p->upstream_error || p->upstream_done) { @@ -92,16 +92,16 @@ int ngx_event_pipe_read_upstream(ngx_eve break; } - if (p->preread_hunks == NULL && !p->upstream->read->ready) { + if (p->preread_bufs == NULL && !p->upstream->read->ready) { break; } - if (p->preread_hunks) { + if (p->preread_bufs) { - /* use the pre-read hunks if they exist */ + /* use the pre-read bufs if they exist */ - chain = p->preread_hunks; - p->preread_hunks = NULL; + chain = p->preread_bufs; + p->preread_bufs = NULL; n = p->preread_size; ngx_log_debug1(NGX_LOG_DEBUG_EVENT, p->log, 0, @@ -115,7 +115,7 @@ int ngx_event_pipe_read_upstream(ngx_eve /* * kqueue notifies about the end of file or a pending error. - * This test allows not to allocate a hunk on these conditions + * This test allows not to allocate a buf on these conditions * and not to call ngx_recv_chain(). */ @@ -142,34 +142,36 @@ int ngx_event_pipe_read_upstream(ngx_eve break; } - if (p->free_raw_hunks) { + if (p->free_raw_bufs) { - /* use the free hunks if they exist */ + /* use the free bufs if they exist */ - chain = p->free_raw_hunks; + chain = p->free_raw_bufs; if (p->single_buf) { - p->free_raw_hunks = p->free_raw_hunks->next; + p->free_raw_bufs = p->free_raw_bufs->next; chain->next = NULL; } else { - p->free_raw_hunks = NULL; + p->free_raw_bufs = NULL; } - } else if (p->hunks < p->bufs.num) { + } else if (p->allocated < p->bufs.num) { - /* allocate a new hunk if it's still allowed */ + /* allocate a new buf if it's still allowed */ - ngx_test_null(h, ngx_create_temp_hunk(p->pool, p->bufs.size), - NGX_ABORT); - p->hunks++; + if (!(b = ngx_create_temp_buf(p->pool, p->bufs.size))) { + return NGX_ABORT; + } - ngx_alloc_link_and_set_hunk(tl, h, p->pool, NGX_ABORT); + p->allocated++; + + ngx_alloc_link_and_set_buf(tl, b, p->pool, NGX_ABORT); chain = tl; } else if (!p->cachable && p->downstream->write->ready) { /* - * if the hunks are not needed to be saved in a cache and - * a downstream is ready then write the hunks to a downstream + * if the bufs are not needed to be saved in a cache and + * a downstream is ready then write the bufs to a downstream */ p->upstream_blocked = 1; @@ -184,7 +186,7 @@ int ngx_event_pipe_read_upstream(ngx_eve { /* - * if it's allowed then save some hunks from r->in + * if it's allowed then save some bufs from r->in * to a temporary file, and add them to a r->out chain */ @@ -210,17 +212,17 @@ int ngx_event_pipe_read_upstream(ngx_eve return rc; } - chain = p->free_raw_hunks; + chain = p->free_raw_bufs; if (p->single_buf) { - p->free_raw_hunks = p->free_raw_hunks->next; + p->free_raw_bufs = p->free_raw_bufs->next; chain->next = NULL; } else { - p->free_raw_hunks = NULL; + p->free_raw_bufs = NULL; } } else { - /* if there're no hunks to read in then disable a level event */ + /* if there're no bufs to read in then disable a level event */ ngx_log_debug0(NGX_LOG_DEBUG_EVENT, p->log, 0, "no pipe hunks to read in"); @@ -233,10 +235,10 @@ int ngx_event_pipe_read_upstream(ngx_eve ngx_log_debug1(NGX_LOG_DEBUG_EVENT, p->log, 0, "pipe recv chain: %d", n); - if (p->free_raw_hunks) { - chain->next = p->free_raw_hunks; + if (p->free_raw_bufs) { + chain->next = p->free_raw_bufs; } - p->free_raw_hunks = chain; + p->free_raw_bufs = chain; if (n == NGX_ERROR) { p->upstream_error = 1; @@ -245,7 +247,7 @@ int ngx_event_pipe_read_upstream(ngx_eve if (n == NGX_AGAIN) { if (p->single_buf) { - ngx_event_pipe_remove_shadow_links(chain->hunk); + ngx_event_pipe_remove_shadow_links(chain->buf); } break; @@ -264,16 +266,16 @@ int ngx_event_pipe_read_upstream(ngx_eve while (cl && n > 0) { - ngx_event_pipe_remove_shadow_links(cl->hunk); + ngx_event_pipe_remove_shadow_links(cl->buf); - size = cl->hunk->end - cl->hunk->last; + size = cl->buf->end - cl->buf->last; if (n >= size) { - cl->hunk->last = cl->hunk->end; + cl->buf->last = cl->buf->end; - /* STUB */ cl->hunk->num = p->num++; + /* STUB */ cl->buf->num = p->num++; - if (p->input_filter(p, cl->hunk) == NGX_ERROR) { + if (p->input_filter(p, cl->buf) == NGX_ERROR) { return NGX_ABORT; } @@ -281,56 +283,56 @@ int ngx_event_pipe_read_upstream(ngx_eve cl = cl->next; } else { - cl->hunk->last += n; + cl->buf->last += n; n = 0; } } - p->free_raw_hunks = cl; + p->free_raw_bufs = cl; } -#if (NGX_DEBUG0) +#if (NGX_DEBUG) - if (p->in || p->busy || p->free_raw_hunks) { + if (p->in || p->busy || p->free_raw_bufs) { ngx_log_debug0(NGX_LOG_DEBUG_EVENT, p->log, 0, "pipe buf"); } for (cl = p->in; cl; cl = cl->next) { ngx_log_debug3(NGX_LOG_DEBUG_EVENT, p->log, 0, "pipe buf in " PTR_FMT ", pos " PTR_FMT ", size: %d", - cl->hunk->start, cl->hunk->pos, - cl->hunk->last - cl->hunk->pos); + cl->buf->start, cl->buf->pos, + cl->buf->last - cl->buf->pos); } for (cl = p->busy; cl; cl = cl->next) { ngx_log_debug3(NGX_LOG_DEBUG_EVENT, p->log, 0, "pipe buf busy " PTR_FMT ", pos " PTR_FMT ", size: %d", - cl->hunk->start, cl->hunk->pos, - cl->hunk->last - cl->hunk->pos); + cl->buf->start, cl->buf->pos, + cl->buf->last - cl->buf->pos); } - for (cl = p->free_raw_hunks; cl; cl = cl->next) { + for (cl = p->free_raw_bufs; cl; cl = cl->next) { ngx_log_debug3(NGX_LOG_DEBUG_EVENT, p->log, 0, "pipe buf free " PTR_FMT ", last " PTR_FMT ", size: %d", - cl->hunk->start, cl->hunk->last, - cl->hunk->end - cl->hunk->last); + cl->buf->start, cl->buf->last, + cl->buf->end - cl->buf->last); } #endif - if ((p->upstream_eof || p->upstream_error) && p->free_raw_hunks) { + if ((p->upstream_eof || p->upstream_error) && p->free_raw_bufs) { - /* STUB */ p->free_raw_hunks->hunk->num = p->num++; + /* STUB */ p->free_raw_bufs->buf->num = p->num++; - if (p->input_filter(p, p->free_raw_hunks->hunk) == NGX_ERROR) { + if (p->input_filter(p, p->free_raw_bufs->buf) == NGX_ERROR) { return NGX_ABORT; } - p->free_raw_hunks = p->free_raw_hunks->next; + p->free_raw_bufs = p->free_raw_bufs->next; if (p->free_bufs) { - for (cl = p->free_raw_hunks; cl; cl = cl->next) { - ngx_pfree(p->pool, cl->hunk->start); + for (cl = p->free_raw_bufs; cl; cl = cl->next) { + ngx_pfree(p->pool, cl->buf->start); } } } @@ -345,11 +347,11 @@ int ngx_event_pipe_read_upstream(ngx_eve } -int ngx_event_pipe_write_to_downstream(ngx_event_pipe_t *p) +ngx_int_t ngx_event_pipe_write_to_downstream(ngx_event_pipe_t *p) { size_t bsize; ngx_uint_t flush; - ngx_hunk_t *h; + ngx_buf_t *b; ngx_chain_t *out, **ll, *cl, *tl; ngx_log_debug1(NGX_LOG_DEBUG_EVENT, p->log, 0, @@ -391,7 +393,7 @@ int ngx_event_pipe_write_to_downstream(n ngx_log_debug0(NGX_LOG_DEBUG_EVENT, p->log, 0, "pipe write downstream done"); - /* TODO: free unused hunks */ + /* TODO: free unused bufs */ p->downstream_done = 1; break; @@ -401,12 +403,12 @@ int ngx_event_pipe_write_to_downstream(n break; } - /* bsize is the size of the busy hunks */ + /* bsize is the size of the busy bufs */ bsize = 0; for (cl = p->busy; cl; cl = cl->next) { - bsize += cl->hunk->end - cl->hunk->start; + bsize += cl->buf->end - cl->buf->start; } ngx_log_debug1(NGX_LOG_DEBUG_EVENT, p->log, 0, @@ -420,19 +422,19 @@ int ngx_event_pipe_write_to_downstream(n if (p->out) { cl = p->out; - if (bsize + ngx_hunk_size(cl->hunk) > p->busy_size) { + if (bsize + ngx_buf_size(cl->buf) > p->busy_size) { flush = 1; break; } p->out = p->out->next; - ngx_event_pipe_free_shadow_raw_hunk(&p->free_raw_hunks, - cl->hunk); + ngx_event_pipe_free_shadow_raw_buf(&p->free_raw_bufs, + cl->buf); } else if (!p->cachable && p->in) { cl = p->in; - if (bsize + ngx_hunk_size(cl->hunk) > p->busy_size) { + if (bsize + ngx_buf_size(cl->buf) > p->busy_size) { flush = 1; break; } @@ -443,7 +445,7 @@ int ngx_event_pipe_write_to_downstream(n break; } - bsize += ngx_hunk_size(cl->hunk); + bsize += ngx_buf_size(cl->buf); cl->next = NULL; ngx_chain_add_link(out, ll, cl); } @@ -464,43 +466,33 @@ int ngx_event_pipe_write_to_downstream(n for (cl = p->free; cl; cl = cl->next) { - if (cl->hunk->type & NGX_HUNK_TEMP_FILE) { + if (cl->buf->temp_file) { if (p->cachable || !p->cyclic_temp_file) { continue; } - /* reset p->temp_offset if all hunks had been sent */ + /* reset p->temp_offset if all bufs had been sent */ - if (cl->hunk->file_last == p->temp_file->offset) { + if (cl->buf->file_last == p->temp_file->offset) { p->temp_file->offset = 0; } } - /* TODO: free hunk if p->free_bufs && upstream done */ + /* TODO: free buf if p->free_bufs && upstream done */ - /* add the free shadow raw hunk to p->free_raw_hunks */ + /* add the free shadow raw buf to p->free_raw_bufs */ - if (cl->hunk->type & NGX_HUNK_LAST_SHADOW) { - h = cl->hunk->shadow; - h->pos = h->last = h->start; - h->shadow = NULL; - ngx_alloc_link_and_set_hunk(tl, h, p->pool, NGX_ABORT); - ngx_event_pipe_add_free_hunk(&p->free_raw_hunks, tl); + if (cl->buf->last_shadow) { + b = cl->buf->shadow; + b->pos = b->last = b->start; + b->shadow = NULL; + ngx_alloc_link_and_set_buf(tl, b, p->pool, NGX_ABORT); + ngx_event_pipe_add_free_buf(&p->free_raw_bufs, tl); - cl->hunk->type &= ~NGX_HUNK_LAST_SHADOW; + cl->buf->last_shadow = 0; } - cl->hunk->shadow = NULL; -#if 0 - if (p->cyclic_temp_file && (cl->hunk->type & NGX_HUNK_TEMP_FILE)) { - - /* reset p->temp_offset if all hunks had been sent */ - - if (cl->hunk->file_last == p->temp_file->offset) { - p->temp_file->offset = 0; - } - } -#endif + cl->buf->shadow = NULL; } } @@ -508,14 +500,14 @@ int ngx_event_pipe_write_to_downstream(n } -static int ngx_event_pipe_write_chain_to_temp_file(ngx_event_pipe_t *p) +static ngx_int_t ngx_event_pipe_write_chain_to_temp_file(ngx_event_pipe_t *p) { - int size, hsize; - ngx_hunk_t *h; + size_t size, bsize; + ngx_buf_t *b; ngx_chain_t *cl, *tl, *next, *out, **ll, **last_free, fl; - if (p->hunk_to_file) { - fl.hunk = p->hunk_to_file; + if (p->buf_to_file) { + fl.buf = p->buf_to_file; fl.next = p->in; out = &fl; @@ -533,19 +525,19 @@ static int ngx_event_pipe_write_chain_to "pipe offset: %d", p->temp_file->offset); do { - hsize = cl->hunk->last - cl->hunk->pos; + bsize = cl->buf->last - cl->buf->pos; ngx_log_debug3(NGX_LOG_DEBUG_EVENT, p->log, 0, "pipe buf " PTR_FMT ", pos " PTR_FMT ", size: %d", - cl->hunk->start, cl->hunk->pos, hsize); + cl->buf->start, cl->buf->pos, bsize); - if ((size + hsize > p->temp_file_write_size) - || (p->temp_file->offset + size + hsize > p->max_temp_file_size)) + if ((size + bsize > p->temp_file_write_size) + || (p->temp_file->offset + size + bsize > p->max_temp_file_size)) { break; } - size += hsize; + size += bsize; ll = &cl->next; cl = cl->next; @@ -571,16 +563,16 @@ static int ngx_event_pipe_write_chain_to return NGX_ABORT; } - for (last_free = &p->free_raw_hunks; + for (last_free = &p->free_raw_bufs; *last_free != NULL; last_free = &(*last_free)->next) { /* void */ } - if (p->hunk_to_file) { - p->temp_file->offset = p->hunk_to_file->last - p->hunk_to_file->pos; - p->hunk_to_file = NULL; + if (p->buf_to_file) { + p->temp_file->offset = p->buf_to_file->last - p->buf_to_file->pos; + p->buf_to_file = NULL; out = out->next; } @@ -588,27 +580,20 @@ static int ngx_event_pipe_write_chain_to next = cl->next; cl->next = NULL; - h = cl->hunk; - h->file = &p->temp_file->file; - h->file_pos = p->temp_file->offset; - p->temp_file->offset += h->last - h->pos; - h->file_last = p->temp_file->offset; - - h->type |= NGX_HUNK_FILE|NGX_HUNK_TEMP_FILE; + b = cl->buf; + b->file = &p->temp_file->file; + b->file_pos = p->temp_file->offset; + p->temp_file->offset += b->last - b->pos; + b->file_last = p->temp_file->offset; -#if 0 - if (p->cachable) { - h->type |= NGX_HUNK_FILE; - } else { - h->type |= NGX_HUNK_FILE|NGX_HUNK_TEMP_FILE; - } -#endif + b->in_file = 1; + b->temp_file = 1; 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_link_and_set_hunk(tl, h->shadow, p->pool, NGX_ABORT); + if (b->last_shadow) { + b->shadow->last = b->shadow->pos = b->shadow->start; + ngx_alloc_link_and_set_buf(tl, b->shadow, p->pool, NGX_ABORT); *last_free = tl; last_free = &tl->next; } @@ -620,32 +605,35 @@ static int ngx_event_pipe_write_chain_to /* the copy input filter */ -int ngx_event_pipe_copy_input_filter(ngx_event_pipe_t *p, ngx_hunk_t *hunk) +ngx_int_t ngx_event_pipe_copy_input_filter(ngx_event_pipe_t *p, ngx_buf_t *buf) { - ngx_hunk_t *h; + ngx_buf_t *b; ngx_chain_t *cl; - if (hunk->pos == hunk->last) { + if (buf->pos == buf->last) { return NGX_OK; } if (p->free) { - h = p->free->hunk; + b = p->free->buf; p->free = p->free->next; } else { - ngx_test_null(h, ngx_alloc_hunk(p->pool), NGX_ERROR); + if (!(b = ngx_alloc_buf(p->pool))) { + return NGX_ERROR; + } } - ngx_memcpy(h, hunk, sizeof(ngx_hunk_t)); - h->shadow = hunk; - h->tag = p->tag; - h->type |= NGX_HUNK_LAST_SHADOW|NGX_HUNK_RECYCLED; - hunk->shadow = h; + ngx_memcpy(b, buf, sizeof(ngx_buf_t)); + b->shadow = buf; + b->tag = p->tag; + b->last_shadow = 1; + b->recycled = 1; + buf->shadow = b; - ngx_alloc_link_and_set_hunk(cl, h, p->pool, NGX_ERROR); + ngx_alloc_link_and_set_buf(cl, b, p->pool, NGX_ERROR); - ngx_log_debug1(NGX_LOG_DEBUG_EVENT, p->log, 0, "hunk #%d", h->num); + ngx_log_debug1(NGX_LOG_DEBUG_EVENT, p->log, 0, "buf #%d", b->num); ngx_chain_add_link(p->in, p->last_in, cl); @@ -653,56 +641,65 @@ int ngx_event_pipe_copy_input_filter(ngx } -ngx_inline static void ngx_event_pipe_remove_shadow_links(ngx_hunk_t *hunk) +ngx_inline static void ngx_event_pipe_remove_shadow_links(ngx_buf_t *buf) { - ngx_hunk_t *h, *next; + ngx_buf_t *b, *next; - if (hunk->shadow == NULL) { + if (buf->shadow == NULL) { return; } - h = hunk->shadow; + b = buf->shadow; - while (!(h->type & NGX_HUNK_LAST_SHADOW)) { - next = h->shadow; - h->type &= ~(NGX_HUNK_TEMP|NGX_HUNK_IN_MEMORY|NGX_HUNK_RECYCLED); - h->shadow = NULL; - h = next; + while (!b->last_shadow) { + next = b->shadow; +#if 0 + b->type &= ~(NGX_HUNK_TEMP|NGX_HUNK_IN_MEMORY|NGX_HUNK_RECYCLED); +#endif + b->temporary = 0; + b->recycled = 0; + b->shadow = NULL; + b = next; } - h->type &= ~(NGX_HUNK_TEMP +#if 0 + b->type &= ~(NGX_HUNK_TEMP |NGX_HUNK_IN_MEMORY |NGX_HUNK_RECYCLED |NGX_HUNK_LAST_SHADOW); - h->shadow = NULL; +#endif - hunk->shadow = NULL; + b->temporary = 0; + b->recycled = 0; + b->last_shadow = 0; + + b->shadow = NULL; + + buf->shadow = NULL; } -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_free_shadow_raw_buf(ngx_chain_t **free, + ngx_buf_t *buf) { - ngx_hunk_t *s; + ngx_buf_t *s; ngx_chain_t *cl, **ll; - if (h->shadow == NULL) { + if (buf->shadow == NULL) { return; } - for (s = h->shadow; !(s->type & NGX_HUNK_LAST_SHADOW); s = s->shadow) { - /* void */ - } + for (s = buf->shadow; !s->last_shadow; s = s->shadow) { /* void */ } ll = free; for (cl = *free ; cl; cl = cl->next) { - if (cl->hunk == s) { + if (cl->buf == s) { *ll = cl->next; break; } - if (cl->hunk->shadow) { + if (cl->buf->shadow) { break; } @@ -711,15 +708,15 @@ ngx_inline static void ngx_event_pipe_fr } -ngx_inline static void ngx_event_pipe_add_free_hunk(ngx_chain_t **chain, - ngx_chain_t *cl) +ngx_inline static void ngx_event_pipe_add_free_buf(ngx_chain_t **chain, + ngx_chain_t *cl) { if (*chain == NULL) { *chain = cl; return; } - if ((*chain)->hunk->pos != (*chain)->hunk->last) { + if ((*chain)->buf->pos != (*chain)->buf->last) { cl->next = (*chain)->next; (*chain)->next = cl; @@ -730,9 +727,9 @@ ngx_inline static void ngx_event_pipe_ad } -static int ngx_event_pipe_drain_chains(ngx_event_pipe_t *p) +static ngx_int_t ngx_event_pipe_drain_chains(ngx_event_pipe_t *p) { - ngx_hunk_t *h; + ngx_buf_t *b; ngx_chain_t *cl, *tl; for ( ;; ) { @@ -753,17 +750,17 @@ static int ngx_event_pipe_drain_chains(n } 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_link_and_set_hunk(tl, h, p->pool, NGX_ABORT); - ngx_event_pipe_add_free_hunk(&p->free_raw_hunks, tl); + if (cl->buf->last_shadow) { + b = cl->buf->shadow; + b->pos = b->last = b->start; + b->shadow = NULL; + ngx_alloc_link_and_set_buf(tl, b, p->pool, NGX_ABORT); + ngx_event_pipe_add_free_buf(&p->free_raw_bufs, tl); - cl->hunk->type &= ~NGX_HUNK_LAST_SHADOW; + cl->buf->last_shadow = 0; } - cl->hunk->shadow = NULL; + cl->buf->shadow = NULL; tl = cl->next; cl->next = p->free; p->free = cl;