/*! \file */
#if HAVE_CMOCKA
+#include <inttypes.h>
#include <sched.h> /* IWYU pragma: keep */
#include <setjmp.h>
#include <stdarg.h>
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
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);
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));
}
/*
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 */
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 */