|
|
|
@ -260,14 +260,12 @@ void connection_free(connection *con) {
|
|
|
|
|
con->response_headers_sent = FALSE;
|
|
|
|
|
con->expect_100_cont = FALSE;
|
|
|
|
|
|
|
|
|
|
ev_io_stop(con->wrk->loop, &con->sock_watcher);
|
|
|
|
|
if (con->wrk)
|
|
|
|
|
ev_io_stop(con->wrk->loop, &con->sock_watcher);
|
|
|
|
|
if (con->sock_watcher.fd != -1) {
|
|
|
|
|
if (con->raw_in->is_closed) { /* read already shutdown */
|
|
|
|
|
shutdown(con->sock_watcher.fd, SHUT_WR);
|
|
|
|
|
close(con->sock_watcher.fd);
|
|
|
|
|
} else {
|
|
|
|
|
worker_add_closing_socket(con->wrk, con->sock_watcher.fd);
|
|
|
|
|
}
|
|
|
|
|
/* just close it; _free should only be called on dead connections anyway */
|
|
|
|
|
shutdown(con->sock_watcher.fd, SHUT_WR);
|
|
|
|
|
close(con->sock_watcher.fd);
|
|
|
|
|
}
|
|
|
|
|
ev_io_set(&con->sock_watcher, -1, 0);
|
|
|
|
|
g_string_free(con->remote_addr_str, TRUE);
|
|
|
|
@ -287,13 +285,14 @@ void connection_free(connection *con) {
|
|
|
|
|
physical_clear(&con->physical);
|
|
|
|
|
response_clear(&con->response);
|
|
|
|
|
|
|
|
|
|
if (con->keep_alive_data.link) {
|
|
|
|
|
if (con->keep_alive_data.link && con->wrk) {
|
|
|
|
|
g_queue_delete_link(&con->wrk->keep_alive_queue, con->keep_alive_data.link);
|
|
|
|
|
con->keep_alive_data.link = NULL;
|
|
|
|
|
}
|
|
|
|
|
con->keep_alive_data.timeout = 0;
|
|
|
|
|
con->keep_alive_data.max_idle = 0;
|
|
|
|
|
ev_timer_stop(con->wrk->loop, &con->keep_alive_data.watcher);
|
|
|
|
|
if (con->wrk)
|
|
|
|
|
ev_timer_stop(con->wrk->loop, &con->keep_alive_data.watcher);
|
|
|
|
|
|
|
|
|
|
g_slice_free(connection, con);
|
|
|
|
|
}
|
|
|
|
|