summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSebastian Huber <sebastian.huber@embedded-brains.de>2016-03-07 15:24:19 +0100
committerSebastian Huber <sebastian.huber@embedded-brains.de>2016-03-07 15:24:19 +0100
commit354064b92a3c8ea199b82dd00c5de33e842ccbe8 (patch)
tree938bc416806a5047182da1bd8a4c7295df36a325
parentbsps: Avoid Giant lock in simulator clock driver (diff)
downloadrtems-354064b92a3c8ea199b82dd00c5de33e842ccbe8.tar.bz2
libtests/syscall01: Explicitly request close
This makes the test more reliable in case an interrupt driven console driver is used.
-rw-r--r--testsuites/libtests/syscall01/init.c19
1 files changed, 19 insertions, 0 deletions
diff --git a/testsuites/libtests/syscall01/init.c b/testsuites/libtests/syscall01/init.c
index ec5e5b2c13..07f0dc1a01 100644
--- a/testsuites/libtests/syscall01/init.c
+++ b/testsuites/libtests/syscall01/init.c
@@ -91,6 +91,9 @@ static void close_task(rtems_task_argument arg)
rtems_status_code sc;
int rv;
+ sc = rtems_event_transient_receive(RTEMS_WAIT, RTEMS_NO_TIMEOUT);
+ rtems_test_assert(sc == RTEMS_SUCCESSFUL);
+
rv = close(ctx->fd);
rtems_test_assert(rv == 0);
@@ -99,6 +102,14 @@ static void close_task(rtems_task_argument arg)
}
}
+static void request_close(test_context *ctx)
+{
+ rtems_status_code sc;
+
+ sc = rtems_event_transient_send(ctx->close_task);
+ rtems_test_assert(sc == RTEMS_SUCCESSFUL);
+}
+
static void wait_for_close_task(void)
{
rtems_status_code sc;
@@ -120,6 +131,8 @@ static void test_accept_and_close(test_context *ctx)
rv = listen(ctx->fd, 1);
rtems_test_assert(rv == 0);
+ request_close(ctx);
+
errno = 0;
fd = accept(ctx->fd, (struct sockaddr *) &addr, &addrlen);
rtems_test_assert(fd == -1);
@@ -147,6 +160,8 @@ static void test_connect_and_close(test_context *ctx)
addr.sin_port = htons(1234);
addr.sin_addr.s_addr = htonl(INADDR_ANY);
+ request_close(ctx);
+
errno = 0;
rv = connect(ctx->fd, (struct sockaddr *) &addr, addrlen);
rtems_test_assert(rv == -1);
@@ -179,6 +194,8 @@ static void test_recv_and_close(test_context *ctx)
rv = bind(ctx->fd, (struct sockaddr *) &addr, addrlen);
rtems_test_assert(rv == 0);
+ request_close(ctx);
+
errno = 0;
n = recv(ctx->fd, &buf[0], sizeof(buf), 0);
rtems_test_assert(n == -1);
@@ -215,6 +232,8 @@ static void test_select_and_close(test_context *ctx)
FD_ZERO(&set);
FD_SET(ctx->fd, &set);
+ request_close(ctx);
+
errno = 0;
rv = select(nfds, &set, NULL, NULL, NULL);
rtems_test_assert(rv == -1);