summaryrefslogtreecommitdiffhomepage
path: root/src/event
diff options
context:
space:
mode:
authorIgor Sysoev <igor@sysoev.ru>2003-11-02 22:56:18 +0000
committerIgor Sysoev <igor@sysoev.ru>2003-11-02 22:56:18 +0000
commit659774979feb9741a441505e26774b35830fd4ca (patch)
tree596059bbe20959ad54cbfde8bcdf24cd7f9e9f83 /src/event
parentfe0f5cc6e1e48412235ae91c2f71ec2ec9110a60 (diff)
downloadnginx-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.c4
-rw-r--r--src/event/ngx_event.h1
-rw-r--r--src/event/ngx_event_pipe.c81
-rw-r--r--src/event/ngx_event_pipe.h6
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;
};