From: Ondřej Surý Date: Fri, 7 May 2021 13:34:22 +0000 (+0200) Subject: improvements to socket_test X-Git-Tag: v9.17.13~8^2~1 X-Git-Url: http://git.ipfire.org/gitweb/?a=commitdiff_plain;h=0133096c88902493323dac2b4669178ec2467a42;p=thirdparty%2Fbind9.git improvements to socket_test - be more strict, but patient, waiting for event completion. - use an atomic pointer for the socket to silence TSAN warnings. --- diff --git a/lib/isc/tests/socket_test.c b/lib/isc/tests/socket_test.c index 003571848e0..28a436b7d22 100644 --- a/lib/isc/tests/socket_test.c +++ b/lib/isc/tests/socket_test.c @@ -12,6 +12,7 @@ /*! \file */ #if HAVE_CMOCKA +#include #include /* IWYU pragma: keep */ #include #include @@ -79,14 +80,14 @@ _teardown(void **state) { typedef struct { atomic_bool done; + atomic_uintptr_t socket; isc_result_t result; - isc_socket_t *socket; } completion_t; static void completion_init(completion_t *completion) { atomic_init(&completion->done, false); - completion->socket = NULL; + atomic_init(&completion->socket, (uintptr_t)NULL); } static void @@ -99,7 +100,7 @@ accept_done(isc_task_t *task, isc_event_t *event) { completion->result = nevent->result; atomic_store(&completion->done, true); if (completion->result == ISC_R_SUCCESS) { - completion->socket = nevent->newsocket; + atomic_store(&completion->socket, (uintptr_t)nevent->newsocket); } isc_event_free(&event); @@ -136,35 +137,24 @@ event_done(isc_task_t *task, isc_event_t *event) { isc_event_free(&event); } -static isc_result_t +static void waitfor(completion_t *completion) { int i = 0; while (!atomic_load(&completion->done) && i++ < 5000) { - isc_test_nap(1000); - } - if (atomic_load(&completion->done)) { - return (ISC_R_SUCCESS); + isc_test_nap(10000); } - return (ISC_R_FAILURE); + assert_true(atomic_load(&completion->done)); } static void -waitbody(void) { - isc_test_nap(1000); -} - -static isc_result_t waitfor2(completion_t *c1, completion_t *c2) { int i = 0; while (!(atomic_load(&c1->done) && atomic_load(&c2->done)) && i++ < 5000) { - waitbody(); - } - if (atomic_load(&c1->done) && atomic_load(&c2->done)) { - return (ISC_R_SUCCESS); + isc_test_nap(10000); } - return (ISC_R_FAILURE); + assert_true(atomic_load(&c1->done) && atomic_load(&c2->done)); } /* @@ -525,7 +515,7 @@ tcp_dscp_v4_test(void **state) { assert_int_equal(completion.result, ISC_R_SUCCESS); assert_true(atomic_load(&completion2.done)); assert_int_equal(completion2.result, ISC_R_SUCCESS); - s3 = completion2.socket; + s3 = (isc_socket_t *)atomic_load(&completion2.socket); isc_socket_dscp(s2, 056); /* EF */ @@ -613,7 +603,7 @@ tcp_dscp_v6_test(void **state) { assert_int_equal(completion.result, ISC_R_SUCCESS); assert_true(atomic_load(&completion2.done)); assert_int_equal(completion2.result, ISC_R_SUCCESS); - s3 = completion2.socket; + s3 = (isc_socket_t *)atomic_load(&completion2.socket); isc_socket_dscp(s2, 056); /* EF */