gnunet-svn
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[GNUnet-SVN] r31015 - msh/src


From: gnunet
Subject: [GNUnet-SVN] r31015 - msh/src
Date: Tue, 3 Dec 2013 15:42:32 +0100

Author: harsha
Date: 2013-12-03 15:42:32 +0100 (Tue, 03 Dec 2013)
New Revision: 31015

Modified:
   msh/src/test_pty.c
Log:
- don't bail out when child is still running

Modified: msh/src/test_pty.c
===================================================================
--- msh/src/test_pty.c  2013-12-03 14:41:33 UTC (rev 31014)
+++ msh/src/test_pty.c  2013-12-03 14:42:32 UTC (rev 31015)
@@ -58,6 +58,10 @@
 static char buf[BUF_SIZE];
 static size_t buf_off;
 
+/**
+ * The process id of the child
+ */
+static pid_t child_pid;
 
 /**
  * Function to copy NULL terminated list of arguments
@@ -114,7 +118,16 @@
     if (NULL != tx)
       GNUNET_CONNECTION_notify_transmit_ready_cancel (tx);
     GNUNET_CONNECTION_destroy (conn);
+    conn = NULL;
   }
+  if (0 != child_pid)
+  {
+    GNUNET_break (0 == kill (child_pid, SIGTERM));
+    LOG_DEBUG ("Child still running.  Delaying shutdown\n");
+    (void) GNUNET_SCHEDULER_add_delayed (GNUNET_TIME_UNIT_FOREVER_REL, 
+                                  &do_shutdown, NULL);
+    return;
+  }
   if (GNUNET_SCHEDULER_NO_TASK != child_death_task)
   {
     GNUNET_SCHEDULER_cancel (child_death_task);
@@ -215,8 +228,6 @@
 
   pr = GNUNET_DISK_pipe_handle (sigpipe, GNUNET_DISK_PIPE_END_READ);
   child_death_task = GNUNET_SCHEDULER_NO_TASK;
-  if (0 != (tc->reason & GNUNET_SCHEDULER_REASON_SHUTDOWN))
-    return;
   if (0 == (tc->reason & GNUNET_SCHEDULER_REASON_READ_READY))
   {
     child_death_task =
@@ -227,6 +238,7 @@
   /* consume the signal */
   GNUNET_break (0 < GNUNET_DISK_file_read (pr, &c, sizeof (c)));
   LOG_DEBUG ("Child died\n");
+  child_pid = 0;
   GNUNET_SCHEDULER_shutdown ();
   /* FIXME: read any of the left over output from child? */
 }
@@ -369,7 +381,8 @@
   if (0 != ret)
   {
     LOG_DEBUG ("Forked child successfully\n");
-    chld_io = GNUNET_DISK_get_handle_from_int_fd (master);  
+    child_pid = ret;
+    chld_io = GNUNET_DISK_get_handle_from_int_fd (master);
     read_child_task =
         GNUNET_SCHEDULER_add_read_file (GNUNET_TIME_UNIT_FOREVER_REL, chld_io,
                                         &read_child, NULL);
@@ -648,5 +661,6 @@
     GNUNET_SIGNAL_handler_uninstall (shc_chld);
   GNUNET_DISK_pipe_close (sigpipe);
   GNUNET_free ((void *) argv);
+  LOG_DEBUG ("Exiting\n");
   return ret;
 }




reply via email to

[Prev in Thread] Current Thread [Next in Thread]