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;