diff --git a/tests/gold_tests/tls_hooks/tls_hooks18.test.py b/tests/gold_tests/tls_hooks/tls_hooks18.test.py index 5c4fc45c760..7aa642591df 100644 --- a/tests/gold_tests/tls_hooks/tls_hooks18.test.py +++ b/tests/gold_tests/tls_hooks/tls_hooks18.test.py @@ -52,7 +52,7 @@ 'map https://example.com:{1} http://127.0.0.1:{0}'.format(server.Variables.Port, ts.Variables.ssl_port) ) -Test.PrepareTestPlugin(os.path.join(Test.Variables.AtsTestPluginsDir, 'ssl_hook_test.so'), ts, '-client_hello=2') +Test.PrepareTestPlugin(os.path.join(Test.Variables.AtsTestPluginsDir, 'ssl_hook_test.so'), ts, '-client_hello=2 -close=1') tr = Test.AddTestRun("Test two client hello hooks") tr.Processes.Default.StartBefore(server) diff --git a/tests/tools/plugins/ssl_hook_test.cc b/tests/tools/plugins/ssl_hook_test.cc index 20be7822b36..2adc1b4fc2d 100644 --- a/tests/tools/plugins/ssl_hook_test.cc +++ b/tests/tools/plugins/ssl_hook_test.cc @@ -35,9 +35,16 @@ #define PN "ssl_hook_test" #define PCP "[" PN " Plugin] " +static bool was_conn_closed; + int ReenableSSL(TSCont cont, TSEvent event, void *edata) { + if (was_conn_closed) { + TSContDestroy(cont); + return TS_SUCCESS; + } + TSVConn ssl_vc = reinterpret_cast(TSContDataGet(cont)); TSDebug(PN, "Callback reenable ssl_vc=%p", ssl_vc); TSVConnReenable(ssl_vc); @@ -73,6 +80,7 @@ CB_Pre_Accept_Delay(TSCont cont, TSEvent event, void *edata) TSContDataSet(cb, ssl_vc); // Schedule to reenable in a bit + was_conn_closed = false; TSContScheduleOnPool(cb, 2000, TS_THREAD_POOL_NET); return TS_SUCCESS; @@ -108,6 +116,7 @@ CB_out_start_delay(TSCont cont, TSEvent event, void *edata) TSContDataSet(cb, ssl_vc); // Schedule to reenable in a bit + was_conn_closed = false; TSContScheduleOnPool(cb, 2000, TS_THREAD_POOL_NET); return TS_SUCCESS; @@ -124,6 +133,9 @@ CB_close(TSCont cont, TSEvent event, void *edata) // All done, reactivate things TSVConnReenable(ssl_vc); + + was_conn_closed = true; + return TS_SUCCESS; } @@ -169,6 +181,7 @@ CB_Client_Hello(TSCont cont, TSEvent event, void *edata) TSContDataSet(cb, ssl_vc); // Schedule to reenable in a bit + was_conn_closed = false; TSContScheduleOnPool(cb, 2000, TS_THREAD_POOL_NET); return TS_SUCCESS; @@ -215,6 +228,7 @@ CB_Cert(TSCont cont, TSEvent event, void *edata) TSContDataSet(cb, ssl_vc); // Schedule to reenable in a bit + was_conn_closed = false; TSContScheduleOnPool(cb, 2000, TS_THREAD_POOL_NET); return TS_SUCCESS;