nginx-0.0.1-2003-11-05-20:03:41 import
diff --git a/src/event/ngx_event.h b/src/event/ngx_event.h
index 7e38469..0e020db 100644
--- a/src/event/ngx_event.h
+++ b/src/event/ngx_event.h
@@ -371,7 +371,8 @@
 
         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 @@
 
         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 @@
     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 5ff090d..8e08964 100644
--- a/src/event/ngx_event_pipe.c
+++ b/src/event/ngx_event_pipe.c
@@ -245,8 +245,10 @@
                 p->upstream_eof = 1;
                 break;
             }
+
         }
 
+        p->read_length += n;
         cl = chain;
 
         while (cl && n > 0) {
@@ -402,6 +404,18 @@
 
         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 @@
             }
             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 @@
                     p->temp_file->offset = 0;
                 }
             }
+#endif
         }
     }
 
@@ -518,11 +534,15 @@
         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 7eb4c57..f7cb6d0 100644
--- a/src/event/ngx_event_pipe.h
+++ b/src/event/ngx_event_pipe.h
@@ -54,6 +54,8 @@
 
     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 53ca9cd..fffd572 100644
--- a/src/event/ngx_event_timer.c
+++ b/src/event/ngx_event_timer.c
@@ -173,7 +173,6 @@
             delta -= ev->timer_delta;
 
             ngx_del_timer(ev);
-            ev->timer_set = 0;
 
             if (ev->delayed) {
                 ev->delayed = 0;