diff options
| author | Igor Sysoev <igor@sysoev.ru> | 2003-11-02 22:56:18 +0000 |
|---|---|---|
| committer | Igor Sysoev <igor@sysoev.ru> | 2003-11-02 22:56:18 +0000 |
| commit | 659774979feb9741a441505e26774b35830fd4ca (patch) | |
| tree | 596059bbe20959ad54cbfde8bcdf24cd7f9e9f83 /src/event | |
| parent | fe0f5cc6e1e48412235ae91c2f71ec2ec9110a60 (diff) | |
| download | nginx-659774979feb9741a441505e26774b35830fd4ca.tar.gz nginx-659774979feb9741a441505e26774b35830fd4ca.tar.bz2 | |
nginx-0.0.1-2003-11-03-01:56:18 import
Diffstat (limited to 'src/event')
| -rw-r--r-- | src/event/modules/ngx_kqueue_module.c | 4 | ||||
| -rw-r--r-- | src/event/ngx_event.h | 1 | ||||
| -rw-r--r-- | src/event/ngx_event_pipe.c | 81 | ||||
| -rw-r--r-- | src/event/ngx_event_pipe.h | 6 |
4 files changed, 48 insertions, 44 deletions
diff --git a/src/event/modules/ngx_kqueue_module.c b/src/event/modules/ngx_kqueue_module.c index 26e109b1a..c896a8380 100644 --- a/src/event/modules/ngx_kqueue_module.c +++ b/src/event/modules/ngx_kqueue_module.c @@ -380,7 +380,9 @@ static int ngx_kqueue_process_events(ngx_log_t *log) for (i = 0; i < events; i++) { #if (NGX_DEBUG_EVENT) - if (event_list[i].ident > 0x8000000) { + if (event_list[i].ident > 0x8000000 + && event_list[i].ident != (unsigned) -1) + { ngx_log_debug(log, "kevent: %08x: ft:%d fl:%08x ff:%08x d:%d ud:%08x" _ event_list[i].ident _ event_list[i].filter _ diff --git a/src/event/ngx_event.h b/src/event/ngx_event.h index 629e83d14..7e384693f 100644 --- a/src/event/ngx_event.h +++ b/src/event/ngx_event.h @@ -22,6 +22,7 @@ typedef struct { struct ngx_event_s { void *data; + /* TODO rename to handler, move flags to struct start */ void (*event_handler)(ngx_event_t *ev); void *context; diff --git a/src/event/ngx_event_pipe.c b/src/event/ngx_event_pipe.c index 0d6e89159..6f3d136a1 100644 --- a/src/event/ngx_event_pipe.c +++ b/src/event/ngx_event_pipe.c @@ -42,24 +42,28 @@ int ngx_event_pipe(ngx_event_pipe_t *p, int do_write) do_write = 1; } - rev = p->upstream->read; + if (p->upstream->fd != -1) { + rev = p->upstream->read; - if (ngx_handle_read_event(rev, (rev->eof || rev->error)) == NGX_ERROR) { - return NGX_ABORT; - } + if (ngx_handle_read_event(rev, (rev->eof || rev->error)) == NGX_ERROR) { + return NGX_ABORT; + } - if (rev->active) { - ngx_add_timer(rev, p->read_timeout); + if (rev->active) { + ngx_add_timer(rev, p->read_timeout); + } } - wev = p->downstream->write; + if (p->downstream->fd != -1) { + wev = p->downstream->write; - if (ngx_handle_write_event(wev, p->send_lowat) == NGX_ERROR) { - return NGX_ABORT; - } + if (ngx_handle_write_event(wev, p->send_lowat) == NGX_ERROR) { + return NGX_ABORT; + } - if (wev->active) { - ngx_add_timer(wev, p->send_timeout); + if (wev->active) { + ngx_add_timer(wev, p->send_timeout); + } } return NGX_OK; @@ -166,7 +170,9 @@ int ngx_event_pipe_read_upstream(ngx_event_pipe_t *p) break; - } else if (p->cachable || p->temp_offset < p->max_temp_file_size) { + } else if (p->cachable + || p->temp_file->offset < p->max_temp_file_size) + { /* * if it's allowed then save some hunks from r->in @@ -175,7 +181,7 @@ int ngx_event_pipe_read_upstream(ngx_event_pipe_t *p) rc = ngx_event_pipe_write_chain_to_temp_file(p); - ngx_log_debug(p->log, "temp offset: %d" _ p->temp_offset); + ngx_log_debug(p->log, "temp offset: %d" _ p->temp_file->offset); if (rc == NGX_AGAIN) { if (ngx_event_flags & NGX_USE_LEVEL_EVENT @@ -414,8 +420,8 @@ int ngx_event_pipe_write_to_downstream(ngx_event_pipe_t *p) /* reset p->temp_offset if all hunks had been sent */ - if (cl->hunk->file_last == p->temp_offset) { - p->temp_offset = 0; + if (cl->hunk->file_last == p->temp_file->offset) { + p->temp_file->offset = 0; } } } @@ -428,37 +434,29 @@ 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) { int rc, size, hsize; + char *save_pos; ngx_hunk_t *h; ngx_chain_t *cl, *tl, *next, *out, **ll, **last_free; ngx_log_debug(p->log, "write to file"); - if (p->temp_file->fd == NGX_INVALID_FILE) { - rc = ngx_create_temp_file(p->temp_file, p->temp_path, p->pool, - p->cachable); - - if (rc == NGX_ERROR) { - return NGX_ABORT; - } + out = p->in; - if (rc == NGX_AGAIN) { - return NGX_AGAIN; - } + if (out->hunk->type & NGX_HUNK_PREREAD) { + save_pos = out->hunk->pos; + out->hunk->pos = out->hunk->start; - if (!p->cachable && p->temp_file_warn) { - ngx_log_error(NGX_LOG_WARN, p->log, 0, p->temp_file_warn); - } + } else { + save_pos = NULL; } - out = p->in; - if (!p->cachable) { size = 0; cl = p->in; ll = NULL; -ngx_log_debug(p->log, "offset: %d" _ p->temp_offset); +ngx_log_debug(p->log, "offset: %d" _ p->temp_file->offset); do { hsize = cl->hunk->last - cl->hunk->pos; @@ -466,7 +464,7 @@ ngx_log_debug(p->log, "offset: %d" _ p->temp_offset); ngx_log_debug(p->log, "hunk size: %d" _ hsize); if ((size + hsize > p->temp_file_write_size) - || (p->temp_offset + size + hsize > p->max_temp_file_size)) + || (p->temp_file->offset + size + hsize > p->max_temp_file_size)) { break; } @@ -493,8 +491,7 @@ ngx_log_debug(p->log, "size: %d" _ size); p->last_in = &p->in; } - if (ngx_write_chain_to_file(p->temp_file, out, p->temp_offset, - p->pool) == NGX_ERROR) { + if (ngx_write_chain_to_temp_file(p->temp_file, out) == NGX_ERROR) { return NGX_ABORT; } @@ -505,15 +502,21 @@ ngx_log_debug(p->log, "size: %d" _ size); /* void */ } + if (out->hunk->type & NGX_HUNK_PREREAD) { + p->temp_file->offset += save_pos - out->hunk->pos; + out->hunk->pos = save_pos; + out->hunk->type &= ~NGX_HUNK_PREREAD; + } + for (cl = out; cl; cl = next) { next = cl->next; cl->next = NULL; h = cl->hunk; - h->file = p->temp_file; - h->file_pos = p->temp_offset; - p->temp_offset += h->last - h->pos; - h->file_last = p->temp_offset; + 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; if (p->cachable) { h->type |= NGX_HUNK_FILE; diff --git a/src/event/ngx_event_pipe.h b/src/event/ngx_event_pipe.h index 662d65f70..7eb4c57e2 100644 --- a/src/event/ngx_event_pipe.h +++ b/src/event/ngx_event_pipe.h @@ -54,7 +54,6 @@ struct ngx_event_pipe_s { size_t busy_size; - off_t temp_offset; off_t max_temp_file_size; int temp_file_write_size; @@ -71,9 +70,8 @@ struct ngx_event_pipe_s { ngx_chain_t *preread_hunks; int preread_size; - ngx_file_t *temp_file; - ngx_path_t *temp_path; - char *temp_file_warn; + ngx_temp_file_t *temp_file; + /* STUB */ int num; }; |
