gnunet-svn
[Top][All Lists]
Advanced

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

[GNUnet-SVN] r26736 - gnunet/src/arm


From: gnunet
Subject: [GNUnet-SVN] r26736 - gnunet/src/arm
Date: Wed, 3 Apr 2013 15:31:15 +0200

Author: harsha
Date: 2013-04-03 15:31:15 +0200 (Wed, 03 Apr 2013)
New Revision: 26736

Modified:
   gnunet/src/arm/arm_api.c
Log:
- fix 2853


Modified: gnunet/src/arm/arm_api.c
===================================================================
--- gnunet/src/arm/arm_api.c    2013-04-03 12:22:22 UTC (rev 26735)
+++ gnunet/src/arm/arm_api.c    2013-04-03 13:31:15 UTC (rev 26736)
@@ -199,27 +199,6 @@
 }
 
 
-static void
-clear_pending_messages (struct GNUNET_ARM_Handle *h, enum 
GNUNET_ARM_RequestStatus result)
-{
-  struct ARMControlMessage *cm;
-
-  LOG (GNUNET_ERROR_TYPE_DEBUG,
-       "Clearing pending messages\n");
-
-  while (NULL != (cm = h->control_pending_head))
-  {
-    GNUNET_CONTAINER_DLL_remove (h->control_pending_head,
-                                 h->control_pending_tail, cm);
-    GNUNET_assert (GNUNET_SCHEDULER_NO_TASK != cm->timeout_task_id);
-    GNUNET_SCHEDULER_cancel (cm->timeout_task_id);
-    if (NULL != cm->result_cont)
-      cm->result_cont (cm->cont_cls, cm->h, result, NULL, 0);
-    GNUNET_free_non_null (cm->msg);
-    GNUNET_free (cm);
-  }
-}
-
 /**
  * Close down any existing connection to the ARM service and
  * try re-establishing it later.
@@ -444,13 +423,32 @@
 void
 GNUNET_ARM_disconnect_and_free (struct GNUNET_ARM_Handle *h)
 {
+  struct ARMControlMessage *cm;
+  
   LOG (GNUNET_ERROR_TYPE_DEBUG, "Disconnecting from ARM service\n");
   if (NULL != h->cth)
   {
     GNUNET_CLIENT_notify_transmit_ready_cancel (h->cth);
     h->cth = NULL;
   }
-  clear_pending_messages (h, GNUNET_ARM_REQUEST_DISCONNECTED);
+  while ((NULL != (cm = h->control_pending_head)) 
+         || (NULL != (cm = h->control_sent_head)) )
+  {
+    if (NULL != h->control_pending_head)
+      GNUNET_CONTAINER_DLL_remove (h->control_pending_head,
+                                   h->control_pending_tail, cm);
+    else
+      GNUNET_CONTAINER_DLL_remove (h->control_sent_head,
+                                   h->control_sent_tail, cm);
+    GNUNET_assert (GNUNET_SCHEDULER_NO_TASK != cm->timeout_task_id);
+    GNUNET_SCHEDULER_cancel (cm->timeout_task_id);
+    if (NULL != cm->result_cont)
+      cm->result_cont (cm->cont_cls, cm->h, GNUNET_ARM_REQUEST_DISCONNECTED,
+                       NULL, 0);
+    /* FIXME: What about list callback? */
+    GNUNET_free_non_null (cm->msg);
+    GNUNET_free (cm);
+  }
   if (NULL != h->client)
   {
     GNUNET_CLIENT_disconnect (h->client);




reply via email to

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