nginx-0.0.1-2003-10-31-10:10:36 import
diff --git a/src/event/ngx_event_connect.c b/src/event/ngx_event_connect.c
index e42efb8..2e4a335 100644
--- a/src/event/ngx_event_connect.c
+++ b/src/event/ngx_event_connect.c
@@ -38,7 +38,10 @@
     pc->cached = 0;
     pc->connection = NULL;
 
-    if (pc->peers->number > 1) {
+    if (pc->peers->number == 1) {
+        peer = &pc->peers->peers[0];
+
+    } else {
 
         /* there are several peers */
 
@@ -53,7 +56,10 @@
             }
         }
 
-        if (pc->peers->max_fails > 0) {
+        if (pc->peers->max_fails == 0) {
+            peer = &pc->peers->peers[pc->cur_peer];
+
+        } else {
 
             /* the peers support a fault tolerance */
 
@@ -83,13 +89,8 @@
         }
     }
 
-    peer = &pc->peers->peers[pc->cur_peer];
-
     /* ngx_unlock_mutex(pc->peers->mutex); */
 
-#if 0
-    pc->addr_port_text = peer->addr_port_text;
-#endif
 
     s = ngx_socket(AF_INET, SOCK_STREAM, IPPROTO_IP, 0);
 
@@ -263,6 +264,17 @@
 
 void ngx_event_connect_peer_failed(ngx_peer_connection_t *pc)
 {
+    time_t  now;
+
+    now = ngx_time();
+
+    /* ngx_lock_mutex(pc->peers->mutex); */
+
+    pc->peers->peers[pc->cur_peer].fails++;
+    pc->peers->peers[pc->cur_peer].accessed = now;
+
+    /* ngx_unlock_mutex(pc->peers->mutex); */
+
     pc->cur_peer++;
 
     if (pc->cur_peer >= pc->peers->number) {
diff --git a/src/event/ngx_event_pipe.c b/src/event/ngx_event_pipe.c
index 387d8b8..0d6e891 100644
--- a/src/event/ngx_event_pipe.c
+++ b/src/event/ngx_event_pipe.c
@@ -252,7 +252,7 @@
             if (n >= size) {
                 cl->hunk->last = cl->hunk->end;
 
-    /* STUB */ cl->hunk->num = p->num++;
+/* STUB */ cl->hunk->num = p->num++;
 
                 if (p->input_filter(p, cl->hunk) == NGX_ERROR) {
                     return NGX_ABORT;
@@ -271,15 +271,17 @@
     }
 
     if ((p->upstream_eof || p->upstream_error) && p->free_raw_hunks) {
-    /* STUB */ p->free_raw_hunks->hunk->num = p->num++;
+/* STUB */ p->free_raw_hunks->hunk->num = p->num++;
         if (p->input_filter(p, p->free_raw_hunks->hunk) == NGX_ERROR) {
             return NGX_ABORT;
         }
 
         p->free_raw_hunks = p->free_raw_hunks->next;
 
-        for (cl = p->free_raw_hunks; cl; cl = cl->next) {
-            ngx_pfree(p->pool, cl->hunk->start); 
+        if (p->free_bufs) {
+            for (cl = p->free_raw_hunks; cl; cl = cl->next) {
+                ngx_pfree(p->pool, cl->hunk->start); 
+            }
         }
     }
 
@@ -394,6 +396,7 @@
 
         for (cl = p->free; cl; cl = cl->next) {
 
+            /* TODO: free hunk if p->free_bufs && upstream done */
             /* add the free shadow raw hunk to p->free_raw_hunks */
 
             if (cl->hunk->type & NGX_HUNK_LAST_SHADOW) {
diff --git a/src/event/ngx_event_pipe.h b/src/event/ngx_event_pipe.h
index fc68cc6..662d65f 100644
--- a/src/event/ngx_event_pipe.h
+++ b/src/event/ngx_event_pipe.h
@@ -39,6 +39,7 @@
     unsigned           read:1;
     unsigned           cachable:1;
     unsigned           single_buf:1;
+    unsigned           free_bufs:1;
     unsigned           upstream_done:1;
     unsigned           upstream_error:1;
     unsigned           upstream_eof:1;