aboutsummaryrefslogtreecommitdiff
path: root/src/core/ngx_connection.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/core/ngx_connection.c')
-rw-r--r--src/core/ngx_connection.c16
1 files changed, 16 insertions, 0 deletions
diff --git a/src/core/ngx_connection.c b/src/core/ngx_connection.c
index 21f9980f2..2c0346f6b 100644
--- a/src/core/ngx_connection.c
+++ b/src/core/ngx_connection.c
@@ -1316,6 +1316,7 @@ ngx_drain_connections(ngx_cycle_t *cycle)
cycle->connection_n);
}
+ c = NULL;
n = ngx_max(ngx_min(32, cycle->reusable_connections_n / 8), 1);
for (i = 0; i < n; i++) {
@@ -1332,6 +1333,21 @@ ngx_drain_connections(ngx_cycle_t *cycle)
c->close = 1;
c->read->handler(c->read);
}
+
+ if (cycle->free_connection_n == 0 && c && c->reusable) {
+
+ /*
+ * if no connections were freed, try to reuse the last
+ * connection again: this should free it as long as
+ * previous reuse moved it to lingering close
+ */
+
+ ngx_log_debug0(NGX_LOG_DEBUG_CORE, c->log, 0,
+ "reusing connection again");
+
+ c->close = 1;
+ c->read->handler(c->read);
+ }
}