I have a case where a https connection times out, which causes an alarm to trigger, apache start shutting down and mod_ssl tries to flush the buffer in a non-blocking way and hangs the connection until restart (see the backtrace below).

I think the cause of this is the http_main.c patch for EAPI (see below) because it inserts the ap_call_close_connection_hook before setting B_EOUT instead of after. If it would set B_OUT first and then call ap_call_close_connection_hook, any ap_bflush or ap_bwrite calls would return (-1) instead of trying to write data to the socket (in a non-blocking way).

Thoughts?

Thanks,

Brian

--------
@@ -1541,6 +1568,10 @@
            ap_log_transaction(log_req);
        }

+#ifdef EAPI
+       ap_call_close_connection_hook(save_req->connection);
+#endif /* EAPI */
+
        ap_bsetflag(save_req->connection->client, B_EOUT, 1);
        ap_bclose(save_req->connection->client);

@@ -1549,6 +1580,9 @@
         ap_longjmp(jmpbuffer, 1);
     }
     else {                     /* abort the connection */
+#ifdef EAPI
+       ap_call_close_connection_hook(current_conn);
+#endif /* EAPI */
        ap_bsetflag(current_conn->client, B_EOUT, 1);
        ap_bclose(current_conn->client);
        current_conn->aborted = 1;
--------

#0  0x20307a20 in write () from /usr/lib/libc.so.4
#1  0x20220456 in sock_write () from /home/y/lib/libcrypto.so
#2  0x2021e5cf in BIO_write () from /home/y/lib/libcrypto.so
#3  0x201bc503 in ssl3_write_pending () from /home/y/lib/libssl.so
#4  0x201bc26a in do_ssl3_write () from /home/y/lib/libssl.so
#5  0x201bc1e2 in ssl3_write_bytes () from /home/y/lib/libssl.so
#6  0x201ba665 in ssl3_write () from /home/y/lib/libssl.so
#7  0x201c1b92 in SSL_write () from /home/y/lib/libssl.so
#8 0x3b7d6 in ssl_io_hook_write (fb=0x267044, buf=0x2e900c "<removed>"..., len=4096) at ssl_engine_io.c:384 #9 0x67741 in ap_hook_call_func (ap=0x9fbfb404 "4´¿\237Dp&", he=0xa5080, hf=0xa7110) at ap_hook.c:649 #10 0x673f6 in ap_hook_call (hook=0x7c0e4 "ap::buff::write") at ap_hook.c:382 #11 0x48b1e in ap_write (fb=0x267044, buf=0x2e900c, nbyte=4096) at buff.c:336 #12 0x49676 in write_with_errors (fb=0x267044, buf=0x2e900c, nbyte=4096) at buff.c:391
#13 0x49f72 in bflush_core (fb=0x267044) at buff.c:1760
#14 0x49ffa in ap_bflush (fb=0x267044) at buff.c:1805
#15 0x393f3 in ssl_hook_CloseConnection (conn=0xc8068) at ssl_engine_kernel.c:474 #16 0x525f6 in ap_call_close_connection_hook (c=0xc8068) at http_main.c:523
#17 0x52ea7 in timeout (sig=14) at http_main.c:1738
#18 0x52fcc in alrm_handler (sig=14) at http_main.c:1812
#19 0x9fbfffac in ?? ()
#20 0x2021e5cf in BIO_write () from /home/y/lib/libcrypto.so
#21 0x201bc503 in ssl3_write_pending () from /home/y/lib/libssl.so
#22 0x201bc440 in do_ssl3_write () from /home/y/lib/libssl.so
#23 0x201bc1e2 in ssl3_write_bytes () from /home/y/lib/libssl.so
#24 0x201ba665 in ssl3_write () from /home/y/lib/libssl.so
#25 0x201c1b92 in SSL_write () from /home/y/lib/libssl.so
#26 0x3b7d6 in ssl_io_hook_write (fb=0x267044, buf=0x2e900c "<removed>"..., len=4096) at ssl_engine_io.c:384 #27 0x67741 in ap_hook_call_func (ap=0x9fbfb930 "`¹¿\237Dp&", he=0xa5080, hf=0xa7110) at ap_hook.c:649 #28 0x673f6 in ap_hook_call (hook=0x7c0e4 "ap::buff::write") at ap_hook.c:382 #29 0x48b1e in ap_write (fb=0x267044, buf=0x2e900c, nbyte=4096) at buff.c:336 #30 0x49676 in write_with_errors (fb=0x267044, buf=0x2e900c, nbyte=4096) at buff.c:391
#31 0x49f72 in bflush_core (fb=0x267044) at buff.c:1760
#32 0x49ffa in ap_bflush (fb=0x267044) at buff.c:1805

< internal code frames removed >

#38 0x4ac04 in ap_invoke_handler (r=0x1ef034) at http_config.c:479
#39 0x5d0ac in process_request_internal (r=0x1ef034) at http_request.c:1366
#40 0x5d107 in ap_process_request (r=0x1ef034) at http_request.c:1382
#41 0x556ba in child_main (child_num_arg=87) at http_main.c:5388
#42 0x559ad in make_child (s=0x9c2e8, slot=87, now=1118326412) at http_main.c:5629
#43 0x55c38 in perform_idle_server_maintenance () at http_main.c:5853
#44 0x5617a in standalone_main (argc=11, argv=0x9fbff028) at http_main.c:6165
#45 0x5671c in main (argc=11, argv=0x9fbff028) at http_main.c:6448

______________________________________________________________________
Apache Interface to OpenSSL (mod_ssl)                   www.modssl.org
User Support Mailing List                      modssl-users@modssl.org
Automated List Manager                            [EMAIL PROTECTED]

Reply via email to