gnunet-svn
[Top][All Lists]
Advanced

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

[GNUnet-SVN] r11371 - gnunet/src/datastore


From: gnunet
Subject: [GNUnet-SVN] r11371 - gnunet/src/datastore
Date: Fri, 14 May 2010 17:11:10 +0200

Author: grothoff
Date: 2010-05-14 17:11:10 +0200 (Fri, 14 May 2010)
New Revision: 11371

Modified:
   gnunet/src/datastore/datastore_api.c
Log:
fixes

Modified: gnunet/src/datastore/datastore_api.c
===================================================================
--- gnunet/src/datastore/datastore_api.c        2010-05-14 13:02:42 UTC (rev 
11370)
+++ gnunet/src/datastore/datastore_api.c        2010-05-14 15:11:10 UTC (rev 
11371)
@@ -243,19 +243,32 @@
   struct GNUNET_DATASTORE_QueueEntry *qe;
 
   if (h->client != NULL)
-    GNUNET_CLIENT_disconnect (h->client, GNUNET_NO);
+    {
+      GNUNET_CLIENT_disconnect (h->client, GNUNET_NO);
+      h->client = NULL;
+    }
   if (h->reconnect_task != GNUNET_SCHEDULER_NO_TASK)
-    GNUNET_SCHEDULER_cancel (h->sched,
-                            h->reconnect_task);
-  h->client = NULL;
+    {
+      GNUNET_SCHEDULER_cancel (h->sched,
+                              h->reconnect_task);
+      h->reconnect_task = GNUNET_SCHEDULER_NO_TASK;
+    }
   while (NULL != (qe = h->queue_head))
     {
-      GNUNET_CONTAINER_DLL_remove (h->queue_head,
-                                  h->queue_tail,
-                                  qe);
       if (NULL != qe->response_proc)
-       qe->response_proc (qe, NULL);
-      GNUNET_free (qe);
+       {
+         qe->response_proc (qe, NULL);
+       }
+      else
+       {
+         GNUNET_CONTAINER_DLL_remove (h->queue_head,
+                                      h->queue_tail,
+                                      qe);
+         if (qe->task != GNUNET_SCHEDULER_NO_TASK)
+           GNUNET_SCHEDULER_cancel (h->sched,
+                                    qe->task);
+         GNUNET_free (qe);
+       }
     }
   if (GNUNET_YES == drop) 
     {
@@ -435,6 +448,8 @@
 static void
 do_disconnect (struct GNUNET_DATASTORE_Handle *h)
 {
+  if (h->client == NULL)
+    return;
   GNUNET_CLIENT_disconnect (h->client, GNUNET_NO);
   h->client = NULL;
   h->reconnect_task = GNUNET_SCHEDULER_add_delayed (h->sched,
@@ -573,9 +588,17 @@
   GNUNET_CONTAINER_DLL_remove (h->queue_head,
                               h->queue_tail,
                               qe);
+  if (qe->task != GNUNET_SCHEDULER_NO_TASK)
+    {
+      GNUNET_SCHEDULER_cancel (h->sched,
+                              qe->task);
+      qe->task = GNUNET_SCHEDULER_NO_TASK;
+    }
   GNUNET_free (qe);
   if (msg == NULL)
-    {
+    {      
+      if (NULL == h->client)
+       return; /* forced disconnect */
       GNUNET_log (GNUNET_ERROR_TYPE_WARNING,
                  _("Failed to receive response from database.\n"));
       do_disconnect (h);




reply via email to

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