diff options
author | Matheus Castanho <msc@linux.ibm.com> | 2020-02-12 13:07:32 -0300 |
---|---|---|
committer | Tulio Magno Quites Machado Filho <tuliom@linux.ibm.com> | 2020-02-12 16:25:34 -0300 |
commit | f34c4d0f10ed09500d5f0ebd473c3f37ce4989d7 (patch) | |
tree | 803fc2b500203d3c8ce02cfe6aa696d64db21029 /sunrpc | |
parent | 0a8ce6a0966283b17f373f430929bcadef1ae205 (diff) | |
download | glibc-f34c4d0f10ed09500d5f0ebd473c3f37ce4989d7.tar.gz |
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')
-rw-r--r-- | sunrpc/tst-udp-timeout.c | 18 |
1 files changed, 15 insertions, 3 deletions
diff --git a/sunrpc/tst-udp-timeout.c b/sunrpc/tst-udp-timeout.c index 8d45365b23..26869f5547 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); |