Repository: trafficserver Updated Branches: refs/heads/master 4188d7f26 -> 9dc6dabed
Fix issue with TS-3885. Changes to TSNetVConn test to prevent it from hanging when the defer_accept is set ( via config or kernel option). This close #313. Project: http://git-wip-us.apache.org/repos/asf/trafficserver/repo Commit: http://git-wip-us.apache.org/repos/asf/trafficserver/commit/9dc6dabe Tree: http://git-wip-us.apache.org/repos/asf/trafficserver/tree/9dc6dabe Diff: http://git-wip-us.apache.org/repos/asf/trafficserver/diff/9dc6dabe Branch: refs/heads/master Commit: 9dc6dabed9afcde8199db1c2debc62d72274ea4e Parents: 4188d7f Author: Jason Kenny <[email protected]> Authored: Tue Oct 27 09:30:35 2015 -0500 Committer: Alan M. Carroll <[email protected]> Committed: Fri Nov 20 08:48:51 2015 -0600 ---------------------------------------------------------------------- proxy/InkAPITest.cc | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/trafficserver/blob/9dc6dabe/proxy/InkAPITest.cc ---------------------------------------------------------------------- diff --git a/proxy/InkAPITest.cc b/proxy/InkAPITest.cc index 92fa95a..566ca88 100644 --- a/proxy/InkAPITest.cc +++ b/proxy/InkAPITest.cc @@ -298,6 +298,8 @@ server_handler(TSCont contp, TSEvent event, void *data) SDK_RPRINT(params->test, params->api, "ServerEvent EOS", TC_PASS, "ok"); *params->pstatus = REGRESSION_TEST_PASSED; delete params; + } else if (event == TS_EVENT_VCONN_READ_READY) { + SDK_RPRINT(params->test, params->api, "ServerEvent READ_READY", TC_PASS, "ok"); } else { SDK_RPRINT(params->test, params->api, "ServerEvent", TC_FAIL, "received unexpected event %d", event); *params->pstatus = REGRESSION_TEST_FAILED; @@ -321,10 +323,16 @@ client_handler(TSCont contp, TSEvent event, void *data) // Fix me: how to deal with server side cont? TSContDestroy(contp); return 1; - } else { + } else if (TS_EVENT_NET_CONNECT == event) { sockaddr const *addr = TSNetVConnRemoteAddrGet(static_cast<TSVConn>(data)); uint16_t input_server_port = ats_ip_port_host_order(addr); + // If DEFER_ACCEPT is enabled in the OS then the user space accept() doesn't + // happen until data arrives on the socket. Because we're just testing the accept() + // we write a small amount of ignored data to make sure this gets triggered. + UnixNetVConnection *vc = static_cast<UnixNetVConnection *>(data); + ::write(vc->con.fd, "Bob's your uncle", 16); + sleep(1); // XXX this sleep ensures the server end gets the accept event. if (ats_is_ip_loopback(addr)) {
