44
55#define LI_CONNECTION_DEFAULT_CHUNKQUEUE_LIMIT (256*1024)
66
7- static void con_iostream_close (liConnection * con ) { /* force close */
8- if (con -> con_sock .callbacks ) {
9- con -> info .aborted = TRUE;
10- con -> con_sock .callbacks -> finish (con , TRUE);
11- }
12- LI_FORCE_ASSERT (NULL == con -> con_sock .data );
13- }
14- static void con_iostream_shutdown (liConnection * con ) { /* (try) regular shutdown */
15- if (NULL != con -> con_sock .raw_out ) {
16- con -> con_sock .raw_out -> out -> is_closed = TRUE;
17- li_stream_notify (con -> con_sock .raw_out );
7+ static void con_iostream_close (liConnection * con , gboolean abort ) {
8+ if (!abort ) {
9+ /* proper close notification */
10+ if (NULL != con -> con_sock .raw_out ) {
11+ con -> con_sock .raw_out -> out -> is_closed = TRUE;
12+ li_stream_notify (con -> con_sock .raw_out );
13+ }
1814 }
1915
16+ con -> info .aborted = abort ;
17+
2018 if (con -> con_sock .callbacks ) {
21- con -> con_sock .callbacks -> finish (con , FALSE );
19+ con -> con_sock .callbacks -> finish (con , abort );
2220 }
2321 LI_FORCE_ASSERT (NULL == con -> con_sock .data );
22+ LI_FORCE_ASSERT (NULL == con -> con_sock .callbacks );
23+
24+ li_stream_safe_reset_and_release (& con -> con_sock .raw_out );
25+ li_stream_safe_reset_and_release (& con -> con_sock .raw_in );
2426}
2527
2628static void connection_close (liConnection * con );
@@ -412,7 +414,7 @@ void li_connection_request_done(liConnection *con) {
412414 li_connection_reset_keep_alive (con );
413415 } else {
414416 con -> state = LI_CON_STATE_CLOSE ;
415- con_iostream_shutdown (con );
417+ con_iostream_close (con , FALSE );
416418 li_connection_reset (con );
417419 }
418420}
@@ -429,7 +431,7 @@ static void connection_close(liConnection *con) {
429431
430432 con -> state = LI_CON_STATE_CLOSE ;
431433
432- con_iostream_close (con );
434+ con_iostream_close (con , TRUE );
433435
434436 li_plugins_handle_close (con );
435437
@@ -447,7 +449,7 @@ void li_connection_error(liConnection *con) {
447449
448450 con -> state = LI_CON_STATE_CLOSE ;
449451
450- con_iostream_close (con );
452+ con_iostream_close (con , TRUE );
451453
452454 li_plugins_handle_close (con );
453455
@@ -565,7 +567,7 @@ void li_connection_reset(liConnection *con) {
565567 if (LI_CON_STATE_DEAD != con -> state ) {
566568 con -> state = LI_CON_STATE_DEAD ;
567569
568- con_iostream_close (con );
570+ con_iostream_close (con , TRUE );
569571 li_stream_reset (& con -> in );
570572 li_stream_reset (& con -> out );
571573
@@ -593,7 +595,7 @@ static void li_connection_reset2(liConnection *con) {
593595 con -> expect_100_cont = FALSE;
594596 con -> out_has_all_data = FALSE;
595597
596- con_iostream_close (con );
598+ con_iostream_close (con , TRUE );
597599
598600 li_server_socket_release (con -> srv_sock );
599601 con -> srv_sock = NULL ;
@@ -653,7 +655,7 @@ static void li_connection_reset_keep_alive(liConnection *con) {
653655 con -> keep_alive_data .max_idle = CORE_OPTION (LI_CORE_OPTION_MAX_KEEP_ALIVE_IDLE ).number ;
654656 if (con -> keep_alive_data .max_idle == 0 ) {
655657 con -> state = LI_CON_STATE_CLOSE ;
656- con_iostream_shutdown (con );
658+ con_iostream_close (con , FALSE );
657659 li_connection_reset (con );
658660 return ;
659661 }
0 commit comments