aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--testcases/kernel/syscalls/sendmmsg/sendmmsg01.c9
1 files changed, 9 insertions, 0 deletions
diff --git a/testcases/kernel/syscalls/sendmmsg/sendmmsg01.c b/testcases/kernel/syscalls/sendmmsg/sendmmsg01.c
index d1bdf40a1..ce100b2ee 100644
--- a/testcases/kernel/syscalls/sendmmsg/sendmmsg01.c
+++ b/testcases/kernel/syscalls/sendmmsg/sendmmsg01.c
@@ -5,6 +5,7 @@
#define _GNU_SOURCE
#include <netinet/ip.h>
+#include <semaphore.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
@@ -18,6 +19,8 @@
#define BUFSIZE 16
#define VLEN 2
+static sem_t send_sem;
+
static void *sender_thread(LTP_ATTRIBUTE_UNUSED void *arg)
{
struct sockaddr_in addr;
@@ -50,6 +53,8 @@ static void *sender_thread(LTP_ATTRIBUTE_UNUSED void *arg)
msg[1].msg_hdr.msg_iov = &msg2;
msg[1].msg_hdr.msg_iovlen = 1;
+ sem_wait(&send_sem);
+
retval = sendmmsg(send_sockfd, msg, 2, 0);
if (retval < 0)
tst_brk(TFAIL|TTERRNO, "sendmmsg failed");
@@ -74,6 +79,8 @@ static void *receiver_thread(LTP_ATTRIBUTE_UNUSED void *arg)
addr.sin_port = htons(1234);
SAFE_BIND(receive_sockfd, (struct sockaddr *)&addr, sizeof(addr));
+ sem_post(&send_sem);
+
memset(msgs, 0, sizeof(msgs));
for (i = 0; i < VLEN; i++) {
iovecs[i].iov_base = bufs[i];
@@ -112,6 +119,8 @@ static void run(void)
pthread_t sender;
pthread_t receiver;
+ sem_init(&send_sem, 0, 0);
+
SAFE_PTHREAD_CREATE(&sender, NULL, sender_thread, NULL);
SAFE_PTHREAD_CREATE(&receiver, NULL, receiver_thread, NULL);
SAFE_PTHREAD_JOIN(sender, NULL);