aboutsummaryrefslogtreecommitdiff
path: root/sunrpc/tst-udp-timeout.c
diff options
context:
space:
mode:
authorMatheus Castanho <msc@linux.ibm.com>2020-02-12 13:07:32 -0300
committerTulio Magno Quites Machado Filho <tuliom@linux.ibm.com>2020-02-12 16:25:34 -0300
commitf34c4d0f10ed09500d5f0ebd473c3f37ce4989d7 (patch)
tree803fc2b500203d3c8ce02cfe6aa696d64db21029 /sunrpc/tst-udp-timeout.c
parent0a8ce6a0966283b17f373f430929bcadef1ae205 (diff)
downloadglibc-f34c4d0f10ed09500d5f0ebd473c3f37ce4989d7.zip
glibc-f34c4d0f10ed09500d5f0ebd473c3f37ce4989d7.tar.gz
glibc-f34c4d0f10ed09500d5f0ebd473c3f37ce4989d7.tar.bz2
sunrpc: Properly clean up if tst-udp-timeout fails
The macro TEST_VERIFY_EXIT is used several times on sunrpc/tst-udp-timeout to exit the test if a condition evaluates to false. The side effect is that the code to terminate the RPC server process is not executed when the program calls exit, so that sub-process stays alive. This commit registers a clean up function with atexit to kill the server process before exiting the main program. Reviewed-by: Tulio Magno Quites Machado Filho <tuliom@linux.ibm.com>
Diffstat (limited to 'sunrpc/tst-udp-timeout.c')
-rw-r--r--sunrpc/tst-udp-timeout.c18
1 files changed, 15 insertions, 3 deletions
diff --git a/sunrpc/tst-udp-timeout.c b/sunrpc/tst-udp-timeout.c
index 8d45365..26869f5 100644
--- a/sunrpc/tst-udp-timeout.c
+++ b/sunrpc/tst-udp-timeout.c
@@ -29,6 +29,9 @@
#include <sys/socket.h>
#include <time.h>
#include <unistd.h>
+#include <stdlib.h>
+
+static pid_t server_pid;
/* Test data serialization and deserialization. */
@@ -177,6 +180,14 @@ server_dispatch (struct svc_req *request, SVCXPRT *transport)
}
}
+/* Function to be called before exit to make sure the
+ server process is properly killed. */
+static void
+kill_server (void)
+{
+ kill (server_pid, SIGTERM);
+}
+
/* Implementation of the test client. */
static struct test_response
@@ -381,16 +392,17 @@ do_test (void)
TEST_VERIFY_EXIT (transport != NULL);
TEST_VERIFY (svc_register (transport, PROGNUM, VERSNUM, server_dispatch, 0));
- pid_t pid = xfork ();
- if (pid == 0)
+ server_pid = xfork ();
+ if (server_pid == 0)
{
svc_run ();
FAIL_EXIT1 ("supposed to be unreachable");
}
+ atexit (kill_server);
test_udp_server (transport->xp_port);
int status;
- xwaitpid (pid, &status, 0);
+ xwaitpid (server_pid, &status, 0);
TEST_VERIFY (WIFEXITED (status) && WEXITSTATUS (status) == EXIT_MARKER);
SVC_DESTROY (transport);