fix
authorChristian Grothoff <christian@grothoff.org>
Wed, 1 Jun 2011 15:28:40 +0000 (15:28 +0000)
committerChristian Grothoff <christian@grothoff.org>
Wed, 1 Jun 2011 15:28:40 +0000 (15:28 +0000)
src/core/core_api.c

index 3dfc193dd71afb0217c34b9a68c7bf724e27a944..350a5129d7c6e45856769d50384b21cf123c82b5 100644 (file)
@@ -488,6 +488,17 @@ reconnect_later (struct GNUNET_CORE_Handle *h)
   struct PeerRecord *pr;
 
   GNUNET_assert (h->reconnect_task == GNUNET_SCHEDULER_NO_TASK);
+  while (NULL != (cm = h->control_pending_head))
+    {
+      GNUNET_CONTAINER_DLL_remove (h->control_pending_head,
+                                  h->control_pending_tail,
+                                  cm);
+      if (cm->th != NULL)
+       cm->th->cm = NULL; 
+      if (cm->cont != NULL)
+       cm->cont (cm->cont_cls, GNUNET_NO);
+      GNUNET_free (cm);
+    }
   if (h->client != NULL)
     {
       GNUNET_CLIENT_disconnect (h->client, GNUNET_NO);
@@ -505,17 +516,6 @@ reconnect_later (struct GNUNET_CORE_Handle *h)
   h->reconnect_task = GNUNET_SCHEDULER_add_delayed (h->retry_backoff,
                                                    &reconnect_task,
                                                    h);
-  while (NULL != (cm = h->control_pending_head))
-    {
-      GNUNET_CONTAINER_DLL_remove (h->control_pending_head,
-                                  h->control_pending_tail,
-                                  cm);
-      if (cm->th != NULL)
-       cm->th->cm = NULL; 
-      if (cm->cont != NULL)
-       cm->cont (cm->cont_cls, GNUNET_NO);
-      GNUNET_free (cm);
-    }
   GNUNET_assert (h->control_pending_head == NULL);
   h->retry_backoff = GNUNET_TIME_relative_min (GNUNET_TIME_UNIT_SECONDS,
                                               h->retry_backoff);
@@ -1486,11 +1486,6 @@ GNUNET_CORE_disconnect (struct GNUNET_CORE_Handle *handle)
       GNUNET_CLIENT_notify_transmit_ready_cancel (handle->cth);
       handle->cth = NULL;
     }
-  if (handle->client != NULL)
-    {
-      GNUNET_CLIENT_disconnect (handle->client, GNUNET_NO);
-      handle->client = NULL;
-    }
   while (NULL != (cm = handle->control_pending_head))
     {
       GNUNET_CONTAINER_DLL_remove (handle->control_pending_head,
@@ -1502,6 +1497,11 @@ GNUNET_CORE_disconnect (struct GNUNET_CORE_Handle *handle)
        cm->cont (cm->cont_cls, GNUNET_SYSERR);
       GNUNET_free (cm);
     }
+  if (handle->client != NULL)
+    {
+      GNUNET_CLIENT_disconnect (handle->client, GNUNET_NO);
+      handle->client = NULL;
+    }
   if (handle->reconnect_task != GNUNET_SCHEDULER_NO_TASK)
     {
       GNUNET_SCHEDULER_cancel (handle->reconnect_task);