Skip to content
Snippets Groups Projects
Commit 39458d4e authored by Markus Armbruster's avatar Markus Armbruster Committed by Daniel P. Berrangé
Browse files

test-util-sockets: Synchronize properly, don't sleep(1)


The abstract sockets test spawns a thread to listen and accept, and a
second one to connect, with a sleep(1) in between to "ensure" the
former is listening when the latter tries to connect.  Review fail.
Risks spurious test failure, say when a heavily loaded machine doesn't
schedule the first thread quickly enough.  It's also slow.

Listen and accept in the main thread, and start the connect thread in
between.  Look ma, no sleep!  Run time drops from 2s wall clock to a
few milliseconds.

Reviewed-by: default avatarPaolo Bonzini <pbonzini@redhat.com>
Reviewed-by: default avatarEric Blake <eblake@redhat.com>
Signed-off-by: default avatarMarkus Armbruster <armbru@redhat.com>
Signed-off-by: default avatarDaniel P. Berrangé <berrange@redhat.com>
parent 89cb0bb5
No related branches found
No related tags found
No related merge requests found
......@@ -230,26 +230,6 @@ static void test_socket_fd_pass_num_nocli(void)
#endif
#ifdef __linux__
static gpointer unix_server_thread_func(gpointer user_data)
{
SocketAddress *addr = user_data;
int fd;
int connfd;
struct sockaddr_un un;
socklen_t len = sizeof(un);
fd = socket_listen(addr, 1, &error_abort);
g_assert_cmpint(fd, >=, 0);
g_assert(fd_is_socket(fd));
connfd = accept(fd, (struct sockaddr *)&un, &len);
g_assert_cmpint(connfd, !=, -1);
close(connfd);
close(fd);
return NULL;
}
static gpointer unix_client_thread_func(gpointer user_data)
{
SocketAddress *addr = user_data;
......@@ -263,20 +243,26 @@ static gpointer unix_client_thread_func(gpointer user_data)
static void test_socket_unix_abstract_one(SocketAddress *addr)
{
GThread *serv, *cli;
serv = g_thread_new("abstract_unix_server",
unix_server_thread_func,
addr);
int fd, connfd;
GThread *cli;
struct sockaddr_un un;
socklen_t len = sizeof(un);
sleep(1);
fd = socket_listen(addr, 1, &error_abort);
g_assert_cmpint(fd, >=, 0);
g_assert(fd_is_socket(fd));
cli = g_thread_new("abstract_unix_client",
unix_client_thread_func,
addr);
connfd = accept(fd, (struct sockaddr *)&un, &len);
g_assert_cmpint(connfd, !=, -1);
close(connfd);
close(fd);
g_thread_join(cli);
g_thread_join(serv);
}
static void test_socket_unix_abstract_good(void)
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment