From 33c0f5599d93a34619c8f37945f79a6e399a1b5e Mon Sep 17 00:00:00 2001 From: Amitay Isaacs Date: Mon, 22 Jan 2018 12:54:49 +1100 Subject: [PATCH] ctdb-tests: Avoid race condition in sock_daemon test 5 This test fails when it takes more than 10s to run. This can occur when the system is loaded and socket-wrapper is used. Signed-off-by: Amitay Isaacs Reviewed-by: Martin Schwenke --- ctdb/tests/src/sock_daemon_test.c | 26 +++++++++++++++++--------- 1 file changed, 17 insertions(+), 9 deletions(-) diff --git a/ctdb/tests/src/sock_daemon_test.c b/ctdb/tests/src/sock_daemon_test.c index 5641d37bcd1d..ebc0b8594c36 100644 --- a/ctdb/tests/src/sock_daemon_test.c +++ b/ctdb/tests/src/sock_daemon_test.c @@ -668,7 +668,8 @@ static void test4(TALLOC_CTX *mem_ctx, const char *pidfile, * Start daemon, multiple client connects, requests, disconnects */ -#define TEST5_MAX_CLIENTS 10 +#define TEST5_VALID_CLIENTS 10 +#define TEST5_MAX_CLIENTS 100 struct test5_pkt { uint32_t len; @@ -710,7 +711,8 @@ static void test5_client_callback(uint8_t *buf, size_t buflen, state->done = true; } -static int test5_client(const char *sockpath, int id) +static int test5_client(const char *sockpath, int id, pid_t pid_server, + pid_t *client_pid) { pid_t pid; int fd[2]; @@ -760,7 +762,9 @@ static int test5_client(const char *sockpath, int id) close(fd[0]); state.fd = -1; - sleep(10); + while (kill(pid_server, 0) == 0 || errno != ESRCH) { + sleep(1); + } exit(0); } @@ -775,6 +779,7 @@ static int test5_client(const char *sockpath, int id) close(fd[0]); + *client_pid = pid; return ret; } @@ -788,12 +793,12 @@ static bool test5_connect(struct sock_client_context *client, struct test5_server_state *state = (struct test5_server_state *)private_data; - if (state->num_clients == TEST5_MAX_CLIENTS) { + if (state->num_clients == TEST5_VALID_CLIENTS) { return false; } state->num_clients += 1; - assert(state->num_clients <= TEST5_MAX_CLIENTS); + assert(state->num_clients <= TEST5_VALID_CLIENTS); return true; } @@ -925,6 +930,7 @@ static void test5(TALLOC_CTX *mem_ctx, const char *pidfile, pid_t pid_server, pid; int fd[2], ret, i; ssize_t n; + pid_t client_pid[TEST5_MAX_CLIENTS]; pid = getpid(); @@ -968,16 +974,18 @@ static void test5(TALLOC_CTX *mem_ctx, const char *pidfile, close(fd[0]); - for (i=0; i<100; i++) { - ret = test5_client(sockpath, i); - if (i < TEST5_MAX_CLIENTS) { + for (i=0; i=0; i--) { + kill(client_pid[i], SIGKILL); + pid = wait(&ret); assert(pid != -1); } -- 2.34.1