gnunet-svn
[Top][All Lists]
Advanced

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

[GNUnet-SVN] r26992 - gnunet/src/testbed


From: gnunet
Subject: [GNUnet-SVN] r26992 - gnunet/src/testbed
Date: Fri, 26 Apr 2013 10:47:58 +0200

Author: harsha
Date: 2013-04-26 10:47:58 +0200 (Fri, 26 Apr 2013)
New Revision: 26992

Modified:
   gnunet/src/testbed/Makefile.am
   gnunet/src/testbed/gnunet-helper-testbed.c
   gnunet/src/testbed/test_testbed_api_testbed_run.c
Log:
- signal termination to peers when controller crashes


Modified: gnunet/src/testbed/Makefile.am
===================================================================
--- gnunet/src/testbed/Makefile.am      2013-04-26 07:38:20 UTC (rev 26991)
+++ gnunet/src/testbed/Makefile.am      2013-04-26 08:47:58 UTC (rev 26992)
@@ -144,6 +144,7 @@
   test_testbed_api_testbed_run_topologysmallworld \
   test_testbed_api_testbed_run_topologyfromfile \
   test_testbed_api_testbed_run_topologyscalefree \
+  test_testbed_api_testbed_run_waitforever \ #Can be used for manual debugging
   test_testbed_api_statistics
 
 if ENABLE_TEST_RUN
@@ -319,6 +320,12 @@
  $(top_builddir)/src/util/libgnunetutil.la \
  libgnunettestbed.la
 
+test_testbed_api_testbed_run_waitforever_SOURCES = \
+ test_testbed_api_testbed_run.c
+test_testbed_api_testbed_run_waitforever_LDADD = \
+ $(top_builddir)/src/util/libgnunetutil.la \
+ libgnunettestbed.la
+
 test_testbed_api_statistics_SOURCES = \
  test_testbed_api_statistics.c
 test_testbed_api_statistics_LDADD = \

Modified: gnunet/src/testbed/gnunet-helper-testbed.c
===================================================================
--- gnunet/src/testbed/gnunet-helper-testbed.c  2013-04-26 07:38:20 UTC (rev 
26991)
+++ gnunet/src/testbed/gnunet-helper-testbed.c  2013-04-26 08:47:58 UTC (rev 
26992)
@@ -29,7 +29,10 @@
  *          This helper monitors for three termination events.  They are: 
(1)The
  *          stdin of the helper is closed for reading; (2)the helper received
  *          SIGTERM/SIGINT; (3)the testbed crashed.  In case of events 1 and 2
- *          the helper kills the testbed service.
+ *          the helper kills the testbed service.  When testbed crashed (event
+ *          3), the helper should send a SIGTERM to its own process group; this
+ *          behaviour will help terminate any child processes (peers) testbed
+ *          has started and prevents them from leaking and running forever.
  *
  * @author Sree Harsha Totakura <address@hidden>
  */
@@ -294,7 +297,12 @@
   {
     GNUNET_OS_process_destroy (testbed);
     testbed = NULL;
-    shutdown_now ();
+    /* Send SIGTERM to our process group */
+    if (0 != PLIBC_KILL (0, SIGTERM))
+    {
+      GNUNET_log_strerror (GNUNET_ERROR_TYPE_ERROR, "signal");
+      shutdown_now ();          /* Couldn't send the signal, we shutdown 
frowning */
+    }
     return;
   }
   LOG_DEBUG ("Child hasn't died.  Resuming to monitor its status\n");

Modified: gnunet/src/testbed/test_testbed_api_testbed_run.c
===================================================================
--- gnunet/src/testbed/test_testbed_api_testbed_run.c   2013-04-26 07:38:20 UTC 
(rev 26991)
+++ gnunet/src/testbed/test_testbed_api_testbed_run.c   2013-04-26 08:47:58 UTC 
(rev 26992)
@@ -51,14 +51,19 @@
 /**
  * Current peer id
  */
-unsigned int peer_id;
+static unsigned int peer_id;
 
 /**
  * Testing result
  */
 static int result;
 
+/**
+ * Should we wait forever after testbed is initialized?
+ */
+static int wait_forever;
 
+
 /**
  * Shutdown nicely
  *
@@ -85,7 +90,7 @@
 {
   GNUNET_log (GNUNET_ERROR_TYPE_WARNING, "Test timedout -- Aborting\n");
   abort_task = GNUNET_SCHEDULER_NO_TASK;
-  GNUNET_SCHEDULER_add_now (&do_shutdown, NULL);
+  (void) GNUNET_SCHEDULER_add_now (&do_shutdown, NULL);
 }
 
 
@@ -107,6 +112,14 @@
              unsigned int links_failed)
 {
   result = GNUNET_OK;
+  if (GNUNET_YES == wait_forever)
+  {
+    GNUNET_SCHEDULER_cancel (abort_task);
+    abort_task = GNUNET_SCHEDULER_NO_TASK;
+    (void) GNUNET_SCHEDULER_add_delayed (GNUNET_TIME_UNIT_FOREVER_REL,
+                                         &do_shutdown, NULL);
+    return;
+  }
   GNUNET_assert (NULL != peers[0]);
   op = GNUNET_TESTBED_peer_stop (NULL, peers[0], NULL, NULL);
   GNUNET_assert (NULL != op);
@@ -206,7 +219,9 @@
       GNUNET_break (0);         /* Windows with no .exe? */
   }
 #endif
-  if (0 != strcmp ("run", testname))
+  if (0 == strcmp ("waitforever", testname))
+    wait_forever = GNUNET_YES;
+  if ( (GNUNET_YES != wait_forever) && (0 != strcmp ("run", testname)) )
   {
     GNUNET_asprintf (&config_filename, "test_testbed_api_testbed_run_%s.conf",
                      testname);




reply via email to

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