You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@trafficserver.apache.org by "Masa Sekimura (JIRA)" <ji...@apache.org> on 2016/11/15 00:53:58 UTC

[jira] [Commented] (TS-5046) SEGV HttpSM::tunnel_handler_server(int event, HttpTunnelProducer *p)

    [ https://issues.apache.org/jira/browse/TS-5046?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15665585#comment-15665585 ] 

Masa Sekimura commented on TS-5046:
-----------------------------------

There must be a proper way to fix this issue in 7.0.x branch already but here's a bandaid I might want to try.

{code}
diff --git a/proxy/http/HttpSM.cc b/proxy/http/HttpSM.cc
index b7a1be2..9344873 100644
--- a/proxy/http/HttpSM.cc
+++ b/proxy/http/HttpSM.cc
@@ -3105,7 +3105,10 @@ HttpSM::tunnel_handler_server(int event, HttpTunnelProducer *p)
       ua_session->attach_server_session(server_session);
     } else {
       // Release the session back into the shared session pool
-      server_session->get_netvc()->set_inactivity_timeout(HRTIME_SECONDS(t_state.txn_conf->keep_alive_no_activity_timeout_out));
+      NetVConnection *vc = server_session->get_netvc();
+      if (vc) {
+        vc->set_inactivity_timeout(HRTIME_SECONDS(t_state.txn_conf->keep_alive_no_activity_timeout_out));
+      }
       server_session->release();
     }
   }
{code}

> SEGV HttpSM::tunnel_handler_server(int event, HttpTunnelProducer *p) 
> ---------------------------------------------------------------------
>
>                 Key: TS-5046
>                 URL: https://issues.apache.org/jira/browse/TS-5046
>             Project: Traffic Server
>          Issue Type: Bug
>          Components: HTTP, Network
>            Reporter: Masa Sekimura
>             Fix For: 6.2.1
>
>
> one of servers running 6.2.x (729c60b) got a SIGSEGV
> {code}
> (gdb) thread 42
> [Switching to thread 42 (Thread 0x2aaab460d700 (LWP 4145))]
> #0  0x00002aaaad6bd37d in __libc_waitpid (pid=<optimized out>, stat_loc=<optimized out>, options=<optimized out>) at ../sysdeps/unix/sysv/linux/waitpid.c:41
> 41	../sysdeps/unix/sysv/linux/waitpid.c: No such file or directory.
> (gdb) bt
> #0  0x00002aaaad6bd37d in __libc_waitpid (pid=<optimized out>, stat_loc=<optimized out>, options=<optimized out>) at ../sysdeps/unix/sysv/linux/waitpid.c:41
> #1  0x00002aaaaab81ec7 in crash_logger_invoke (signo=11, info=0x2aaab460bcf0, ctx=0x2aaab460bbc0) at Crash.cc:164
> #2  <signal handler called>
> #3  0x00002aaaaac83358 in HttpSM::tunnel_handler_server (this=0x2ab9b4efac00, event=<optimized out>, p=<optimized out>) at HttpSM.cc:3108
> #4  0x00002aaaaace1d72 in HttpTunnel::producer_handler (this=this@entry=0x2ab9b4efbf28, event=102, event@entry=100, p=p@entry=0x2ab9b4efc128) at HttpTunnel.cc:1240
> #5  0x00002aaaaace3343 in HttpTunnel::producer_run (this=this@entry=0x2ab9b4efbf28, p=p@entry=0x2ab9b4efc128) at HttpTunnel.cc:1020
> #6  0x00002aaaaace3d71 in HttpTunnel::tunnel_run (this=0x2ab9b4efbf28, p_arg=0x2ab9b4efc128) at HttpTunnel.cc:787
> #7  0x00002aaaaac96f8b in HttpSM::state_api_callout (this=this@entry=0x2ab9b4efac00, event=event@entry=60000, data=data@entry=0x0) at HttpSM.cc:1534
> #8  0x00002aaaaac9e0d3 in HttpSM::state_api_callback (this=this@entry=0x2ab9b4efac00, event=event@entry=60000, data=data@entry=0x0) at HttpSM.cc:1331
> #9  0x00002aaaaabad6ad in TSHttpTxnReenable (txnp=0x2ab9b4efac00, event=TS_EVENT_HTTP_CONTINUE) at InkAPI.cc:5652
> #10 0x00002aaabe845c05 in XInjectResponseHeaders (event=<optimized out>, edata=0x2ab9b4efac00) at xdebug.cc:295
> #11 0x00002aaaaab98c04 in INKContInternal::handle_event (this=0x2aaab6bf9dc0, event=60007, edata=0x2ab9b4efac00) at InkAPI.cc:1006
> #12 0x00002aaaaac96d10 in HttpSM::state_api_callout (this=this@entry=0x2ab9b4efac00, event=event@entry=60000, data=data@entry=0x0) at HttpSM.cc:1452
> #13 0x00002aaaaac9e0d3 in HttpSM::state_api_callback (this=this@entry=0x2ab9b4efac00, event=event@entry=60000, data=data@entry=0x0) at HttpSM.cc:1331
> #14 0x00002aaaaabad6ad in TSHttpTxnReenable (txnp=0x2ab9b4efac00, event=TS_EVENT_HTTP_CONTINUE) at InkAPI.cc:5652
> #15 0x00002aaabe01ea45 in cont_rewrite_headers (contp=0x2aaab6bf9ee0, event=<optimized out>, edata=0x2ab9b4efac00) at header_rewrite.cc:307
> #16 0x00002aaaaab98c04 in INKContInternal::handle_event (this=0x2aaab6bf9ee0, event=60007, edata=0x2ab9b4efac00) at InkAPI.cc:1006
> #17 0x00002aaaaac96d10 in HttpSM::state_api_callout (this=0x2ab9b4efac00, event=<optimized out>, data=<optimized out>) at HttpSM.cc:1452
> #18 0x00002aaaaac9c910 in HttpSM::set_next_state (this=0x2ab9b4efac00) at HttpSM.cc:7296
> #19 0x00002aaaaac96f8b in HttpSM::state_api_callout (this=this@entry=0x2ab9b4efac00, event=event@entry=60000, data=data@entry=0x0) at HttpSM.cc:1534
> #20 0x00002aaaaac9e0d3 in HttpSM::state_api_callback (this=this@entry=0x2ab9b4efac00, event=event@entry=60000, data=data@entry=0x0) at HttpSM.cc:1331
> #21 0x00002aaaaabad6ad in TSHttpTxnReenable (txnp=0x2ab9b4efac00, event=TS_EVENT_HTTP_CONTINUE) at InkAPI.cc:5652
> #22 0x00002aaabf4038d5 in cont_handle_response (contp=<optimized out>, event=<optimized out>, edata=0x2ab9b4efac00) at background_fetch.cc:544
> #23 0x00002aaaaab98c04 in INKContInternal::handle_event (this=0x2aaab6bf9d00, event=60006, edata=0x2ab9b4efac00) at InkAPI.cc:1006
> #24 0x00002aaaaac96d10 in HttpSM::state_api_callout (this=this@entry=0x2ab9b4efac00, event=event@entry=60000, data=data@entry=0x0) at HttpSM.cc:1452
> #25 0x00002aaaaac9e0d3 in HttpSM::state_api_callback (this=this@entry=0x2ab9b4efac00, event=event@entry=60000, data=data@entry=0x0) at HttpSM.cc:1331
> #26 0x00002aaaaabad6ad in TSHttpTxnReenable (txnp=0x2ab9b4efac00, event=TS_EVENT_HTTP_CONTINUE) at InkAPI.cc:5652
> #27 0x00002aaabe01ea45 in cont_rewrite_headers (contp=0x2aaab6bf9ee0, event=<optimized out>, edata=0x2ab9b4efac00) at header_rewrite.cc:307
> #28 0x00002aaaaab98c04 in INKContInternal::handle_event (this=0x2aaab6bf9ee0, event=60006, edata=0x2ab9b4efac00) at InkAPI.cc:1006
> #29 0x00002aaaaac96d10 in HttpSM::state_api_callout (this=0x2ab9b4efac00, event=<optimized out>, data=<optimized out>) at HttpSM.cc:1452
> #30 0x00002aaaaac97b6f in HttpSM::state_read_server_response_header (this=0x2ab9b4efac00, event=100, data=0x2aaaf59b3a98) at HttpSM.cc:1953
> #31 0x00002aaaaac9e2bd in HttpSM::main_handler (this=0x2ab9b4efac00, event=100, data=0x2aaaf59b3a98) at HttpSM.cc:2658
> #32 0x00002aaaaae6956b in Continuation::handleEvent (data=0x2aaaf59b3a98, event=100, this=<optimized out>) at ../../iocore/eventsystem/I_Continuation.h:153
> #33 read_signal_and_update (vc=0x2aaaf59b3980, vc@entry=0x1, event=event@entry=100) at UnixNetVConnection.cc:148
> #34 UnixNetVConnection::readSignalAndUpdate (this=this@entry=0x2aaaf59b3980, event=event@entry=100) at UnixNetVConnection.cc:1030
> #35 0x00002aaaaae48cb3 in SSLNetVConnection::net_read_io (this=0x2aaaf59b3980, nh=0x2aaab3009cc0, lthread=0x2aaab3006000) at SSLNetVConnection.cc:598
> #36 0x00002aaaaae56bec in NetHandler::mainNetEvent (this=0x2aaab3009cc0, event=<optimized out>, e=<optimized out>) at UnixNet.cc:513
> #37 0x00002aaaaae8e956 in Continuation::handleEvent (data=0x2aaab0bf2040, event=5, this=<optimized out>) at I_Continuation.h:153
> #38 EThread::process_event (calling_code=5, e=0x2aaab0bf2040, this=0x2aaab3006000) at UnixEThread.cc:148
> #39 EThread::execute (this=0x2aaab3006000) at UnixEThread.cc:275
> #40 0x00002aaaaae8d756 in spawn_thread_internal (a=0x2aaab0b211c0) at Thread.cc:86
> #41 0x00002aaaad6b5aa1 in start_thread (arg=0x2aaab460d700) at pthread_create.c:301
> #42 0x00002aaaae8be93d in clone () at ../sysdeps/unix/sysv/linux/x86_64/clone.S:115
> {code}
> it's from HttpSMcc:3108
> {code}
> 3081   if (close_connection) {
> 3082     p->vc->do_io_close();
> 3083     server_session = NULL; // Because p->vc == server_session
> 3084     p->read_vio    = NULL;
> 3085     /* TS-1424: if we're outbound transparent and using the client
> 3086        source port for the outbound connection we must effectively
> 3087        propagate server closes back to the client. Part of that is
> 3088        disabling KeepAlive if the server closes.
> 3089     */
> 3090     if (ua_session && ua_session->is_outbound_transparent() && t_state.http_config_param->use_client_source_port) {
> 3091       t_state.client_info.keep_alive = HTTP_NO_KEEPALIVE;
> 3092     }
> 3093   } else {
> 3094     server_session->attach_hostname(t_state.current.server->name);
> 3095     server_session->server_trans_stat--;
> 3096     HTTP_DECREMENT_DYN_STAT(http_current_server_transactions_stat);
> 3097
> 3098     // If the option to attach the server session to the client session is set
> 3099     // and if the client is still around and the client is keep-alive, attach the
> 3100     // server session to so the next ka request can use it.  Server sessions will
> 3101     // be placed into the shared pool if the next incoming request is for a different
> 3102     // origin server
> 3103     if (t_state.txn_conf->attach_server_session_to_client == 1 && ua_session && t_state.client_info.keep_alive == HTTP_KEEPALIVE) {
> 3104       Debug("http", "attaching server session to the client");
> 3105       ua_session->attach_server_session(server_session);
> 3106     } else {
> 3107       // Release the session back into the shared session pool
> 3108       server_session->get_netvc()->set_inactivity_timeout(HRTIME_SECONDS(t_state.txn_conf->keep_alive_no_activity_timeout_out));
> 3109       server_session->release();
> 3110     }
> {code}
> print vc_table result:
> {code}
> (gdb) p vc_table
> $6 = {static vc_table_max_entries = 4, vc_table = {
> {
>   vc = 0x2ae5aafe18a0,
>   read_buffer = 0x0,
>   write_buffer = 0x0,
>   read_vio = 0x2ae5aafe1be0,
>   write_vio = 0x0,
>   vc_handler = (int (HttpSM::*)(HttpSM * const, int, void *)) 0x2aaaaac86640 <HttpSM::state_watch_for_client_abort(int, void*)>,
>   vc_type = HTTP_UA_VC,
>   eos = true,
>   in_tunnel = true
> }, {
>   vc = 0x2ae6503f7e80,
>   read_buffer = 0x0,
>   write_buffer = 0x0,
>   read_vio = 0x2aaaf59b3a98, 
>   write_vio = 0x2aaaf59b3b00,
>   vc_handler = (int (HttpSM::*)(HttpSM * const, int, void *)) 0x2aaaaac97750 <HttpSM::state_read_server_response_header(int, void*)>,
>   vc_type = HTTP_SERVER_VC,
>   eos = false,
>   in_tunnel = true
> }, {
>   vc = 0x0,
>   read_buffer = 0x0,
>   write_buffer = 0x0,
>   read_vio = 0x0,
>   write_vio = 0x0,
>   vc_handler = NULL,
>   vc_type = HTTP_UNKNOWN,
>   eos = false,
>   in_tunnel = false
> }, {
>   vc = 0x0,
>   read_buffer = 0x0,
>   write_buffer = 0x0,
>   read_vio = 0x0,
>   write_vio = 0x0,
>   vc_handler = NULL,
>   vc_type = HTTP_UNKNOWN,
>   eos = false,
>   in_tunnel = false
> }}}
> {code}



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)