gnunet-svn
[Top][All Lists]
Advanced

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

[GNUnet-SVN] r24348 - gnunet/src/transport


From: gnunet
Subject: [GNUnet-SVN] r24348 - gnunet/src/transport
Date: Wed, 17 Oct 2012 11:05:29 +0200

Author: wachs
Date: 2012-10-17 11:05:29 +0200 (Wed, 17 Oct 2012)
New Revision: 24348

Modified:
   gnunet/src/transport/test_plugin_transport.c
Log:
crash in test due to pending callbacks

Modified: gnunet/src/transport/test_plugin_transport.c
===================================================================
--- gnunet/src/transport/test_plugin_transport.c        2012-10-17 08:58:21 UTC 
(rev 24347)
+++ gnunet/src/transport/test_plugin_transport.c        2012-10-17 09:05:29 UTC 
(rev 24348)
@@ -96,7 +96,7 @@
 /**
  * Timeout task
  */
-static GNUNET_SCHEDULER_TaskIdentifier timeout_task;
+static GNUNET_SCHEDULER_TaskIdentifier timeout_endbadly;
 
 /**
  * Timeout task
@@ -120,6 +120,8 @@
 
 unsigned int addresses_reported;
 
+unsigned int pretty_printers_running;
+
 /**
  * Did the test pass or fail?
  */
@@ -147,10 +149,10 @@
   int c = 0;
   ok = 0;
 
-  if (GNUNET_SCHEDULER_NO_TASK != timeout_task)
+  if (GNUNET_SCHEDULER_NO_TASK != timeout_endbadly)
   {
-      GNUNET_SCHEDULER_cancel (timeout_task);
-      timeout_task = GNUNET_SCHEDULER_NO_TASK;
+      GNUNET_SCHEDULER_cancel (timeout_endbadly);
+      timeout_endbadly = GNUNET_SCHEDULER_NO_TASK;
   }
   if (NULL != api)
       GNUNET_PLUGIN_unload (libname, api);
@@ -193,13 +195,21 @@
 {
   struct AddressWrapper *w;
   int c = 0;
-  timeout_task = GNUNET_SCHEDULER_NO_TASK;
+  timeout_endbadly = GNUNET_SCHEDULER_NO_TASK;
   if (GNUNET_SCHEDULER_NO_TASK != timeout_wait)
   {
       GNUNET_SCHEDULER_cancel (timeout_wait);
       timeout_wait = GNUNET_SCHEDULER_NO_TASK;
   }
 
+  if (pretty_printers_running > 0)
+  {
+      timeout_endbadly = 
GNUNET_SCHEDULER_add_delayed(GNUNET_TIME_UNIT_SECONDS, &end_badly, NULL);
+      GNUNET_log (GNUNET_ERROR_TYPE_INFO,
+                _("Have pending calls to pretty_printer ... deferring 
shutdown\n"));
+      return;
+  }
+
   if (NULL != cls)
   {
       GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
@@ -267,12 +277,12 @@
       GNUNET_SCHEDULER_cancel (timeout_wait);
       timeout_wait = GNUNET_SCHEDULER_NO_TASK;
   }
-  if (GNUNET_SCHEDULER_NO_TASK != timeout_task)
+  if (GNUNET_SCHEDULER_NO_TASK != timeout_endbadly)
   {
-      GNUNET_SCHEDULER_cancel (timeout_task);
-      timeout_task = GNUNET_SCHEDULER_NO_TASK;
+      GNUNET_SCHEDULER_cancel (timeout_endbadly);
+      timeout_endbadly = GNUNET_SCHEDULER_NO_TASK;
   }
-  timeout_task = GNUNET_SCHEDULER_add_now (&end_badly, NULL);
+  timeout_endbadly = GNUNET_SCHEDULER_add_now (&end_badly, NULL);
 }
 
 
@@ -309,11 +319,13 @@
     got_reply = GNUNET_YES;
     GNUNET_log (GNUNET_ERROR_TYPE_INFO,
                 "Pretty address : `%s'\n", buf);
+    pretty_printers_running --;
   }
   else
   {
       if (GNUNET_NO == got_reply)
       {
+          pretty_printers_running --;
           GNUNET_break (0);
           end_badly_now ();
       }
@@ -345,6 +357,7 @@
       memcpy (w->addr, addr, addrlen);
       GNUNET_CONTAINER_DLL_insert(head, tail, w);
       got_reply = GNUNET_NO;
+      pretty_printers_running ++;
       api->address_pretty_printer (api->cls, plugin, addr, addrlen,
                                     GNUNET_YES, GNUNET_TIME_UNIT_MINUTES,
                                     &address_pretty_printer_cb,
@@ -398,7 +411,9 @@
           GNUNET_SCHEDULER_cancel (timeout_wait);
           timeout_wait = GNUNET_SCHEDULER_NO_TASK;
       }
+
       timeout_wait = GNUNET_SCHEDULER_add_delayed (WAIT, &wait_end, NULL);
+
   }
   else if (GNUNET_NO == add_remove)
   {
@@ -507,7 +522,7 @@
   char *plugin;
   char *sep;
 
-  timeout_task = GNUNET_SCHEDULER_add_delayed (TIMEOUT, end_badly, &ok);
+  timeout_endbadly = GNUNET_SCHEDULER_add_delayed (TIMEOUT, end_badly, &ok);
 
   cfg = c;
   /* parse configuration */
@@ -580,7 +595,6 @@
                                        NULL);
   }
 
-
   /* Loading plugin */
   GNUNET_log (GNUNET_ERROR_TYPE_INFO, _("Loading transport plugin %s\n"), 
plugin);
   GNUNET_asprintf (&libname, "libgnunet_plugin_transport_%s", plugin);
@@ -641,6 +655,7 @@
       end_badly_now ();
       return;
   }
+
 }
 
 




reply via email to

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