]> sourceware.org Git - glibc.git/commitdiff
sunrpc: Properly clean up if tst-udp-timeout fails
authorMatheus Castanho <msc@linux.ibm.com>
Wed, 12 Feb 2020 16:07:32 +0000 (13:07 -0300)
committerTulio Magno Quites Machado Filho <tuliom@linux.ibm.com>
Wed, 12 Feb 2020 19:25:34 +0000 (16:25 -0300)
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>
sunrpc/tst-udp-timeout.c

index 8d45365b23d801c19d2480e44aee9526c9d8c0e2..26869f5547362e3dd04c8e67a143cffd76990149 100644 (file)
@@ -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);
This page took 0.038906 seconds and 5 git commands to generate.