diff options
Diffstat (limited to 'src/event')
| -rw-r--r-- | src/event/ngx_event.h | 9 | ||||
| -rw-r--r-- | src/event/ngx_event_pipe.c | 20 | ||||
| -rw-r--r-- | src/event/ngx_event_pipe.h | 2 | ||||
| -rw-r--r-- | src/event/ngx_event_timer.c | 1 |
4 files changed, 28 insertions, 4 deletions
diff --git a/src/event/ngx_event.h b/src/event/ngx_event.h index 7e384693f..0e020db15 100644 --- a/src/event/ngx_event.h +++ b/src/event/ngx_event.h @@ -371,7 +371,8 @@ ngx_inline static int ngx_handle_read_event(ngx_event_t *rev, int close) if (!rev->active && !rev->ready) { if (ngx_add_event(rev, NGX_READ_EVENT, NGX_LEVEL_EVENT) - == NGX_ERROR) { + == NGX_ERROR) + { return NGX_ERROR; } @@ -380,7 +381,8 @@ ngx_inline static int ngx_handle_read_event(ngx_event_t *rev, int close) if (rev->active && (rev->ready || close)) { if (ngx_del_event(rev, NGX_READ_EVENT, close ? NGX_CLOSE_EVENT : 0) - == NGX_ERROR) { + == NGX_ERROR) + { return NGX_ERROR; } @@ -399,7 +401,8 @@ ngx_inline static int ngx_handle_level_read_event(ngx_event_t *rev) if (ngx_event_flags & NGX_USE_LEVEL_EVENT) { if (!rev->active && !rev->ready) { if (ngx_add_event(rev, NGX_READ_EVENT, NGX_LEVEL_EVENT) - == NGX_ERROR) { + == NGX_ERROR) + { return NGX_ERROR; } diff --git a/src/event/ngx_event_pipe.c b/src/event/ngx_event_pipe.c index 5ff090de3..8e08964f7 100644 --- a/src/event/ngx_event_pipe.c +++ b/src/event/ngx_event_pipe.c @@ -245,8 +245,10 @@ int ngx_event_pipe_read_upstream(ngx_event_pipe_t *p) p->upstream_eof = 1; break; } + } + p->read_length += n; cl = chain; while (cl && n > 0) { @@ -402,6 +404,18 @@ int ngx_event_pipe_write_to_downstream(ngx_event_pipe_t *p) for (cl = p->free; cl; cl = cl->next) { + if (cl->hunk->type & NGX_HUNK_TEMP_FILE) { + if (p->cachable || !p->cyclic_temp_file) { + continue; + } + + /* reset p->temp_offset if all hunks had been sent */ + + if (cl->hunk->file_last == p->temp_file->offset) { + p->temp_file->offset = 0; + } + } + /* TODO: free hunk if p->free_bufs && upstream done */ /* add the free shadow raw hunk to p->free_raw_hunks */ @@ -416,6 +430,7 @@ int ngx_event_pipe_write_to_downstream(ngx_event_pipe_t *p) } 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 */ @@ -424,6 +439,7 @@ int ngx_event_pipe_write_to_downstream(ngx_event_pipe_t *p) p->temp_file->offset = 0; } } +#endif } } @@ -518,11 +534,15 @@ ngx_log_debug(p->log, "size: %d" _ size); p->temp_file->offset += h->last - h->pos; h->file_last = p->temp_file->offset; + h->type |= NGX_HUNK_FILE|NGX_HUNK_TEMP_FILE; + +#if 0 if (p->cachable) { h->type |= NGX_HUNK_FILE; } else { h->type |= NGX_HUNK_FILE|NGX_HUNK_TEMP_FILE; } +#endif ngx_chain_add_link(p->out, p->last_out, cl); diff --git a/src/event/ngx_event_pipe.h b/src/event/ngx_event_pipe.h index 7eb4c57e2..f7cb6d00a 100644 --- a/src/event/ngx_event_pipe.h +++ b/src/event/ngx_event_pipe.h @@ -54,6 +54,8 @@ struct ngx_event_pipe_s { size_t busy_size; + off_t read_length; + off_t max_temp_file_size; int temp_file_write_size; diff --git a/src/event/ngx_event_timer.c b/src/event/ngx_event_timer.c index 53ca9cd19..fffd5728b 100644 --- a/src/event/ngx_event_timer.c +++ b/src/event/ngx_event_timer.c @@ -173,7 +173,6 @@ void ngx_event_expire_timers(ngx_msec_t timer) delta -= ev->timer_delta; ngx_del_timer(ev); - ev->timer_set = 0; if (ev->delayed) { ev->delayed = 0; |
