gnunet-svn
[Top][All Lists]
Advanced

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

[GNUnet-SVN] r15661 - gnunet/src/fs


From: gnunet
Subject: [GNUnet-SVN] r15661 - gnunet/src/fs
Date: Thu, 16 Jun 2011 14:27:36 +0200

Author: grothoff
Date: 2011-06-16 14:27:35 +0200 (Thu, 16 Jun 2011)
New Revision: 15661

Modified:
   gnunet/src/fs/gnunet-service-fs_cp.c
Log:
better clean up, more stats

Modified: gnunet/src/fs/gnunet-service-fs_cp.c
===================================================================
--- gnunet/src/fs/gnunet-service-fs_cp.c        2011-06-16 12:20:53 UTC (rev 
15660)
+++ gnunet/src/fs/gnunet-service-fs_cp.c        2011-06-16 12:27:35 UTC (rev 
15661)
@@ -778,36 +778,66 @@
 
 
 /**
- * Free the given request.
+ * Cancel all requests associated with the peer.
  *
- * @param cls the request to free
- * @param tc task context
- */ 
-static void
-peer_request_destroy (void *cls,
-                     const struct GNUNET_SCHEDULER_TaskContext *tc)
+ * @param cls unused
+ * @param query hash code of the request
+ * @param value the 'struct GSF_PendingRequest'
+ * @return GNUNET_YES (continue to iterate)
+ */
+static int
+cancel_pending_request (void *cls,
+                       const GNUNET_HashCode *query,
+                       void *value)
 {
-  struct PeerRequest *peerreq = cls;
+  struct PeerRequest *peerreq = value;
   struct GSF_PendingRequest *pr = peerreq->pr;
   struct GSF_ConnectedPeer *cp = peerreq->cp;
   struct GSF_PendingRequestData *prd;
 
-  peerreq->kill_task = GNUNET_SCHEDULER_NO_TASK;
-  prd = GSF_pending_request_get_data_ (pr);
+  if (peerreq->kill_task != GNUNET_SCHEDULER_NO_TASK)
+    {
+      GNUNET_SCHEDULER_cancel (peerreq->kill_task);
+      peerreq->kill_task = GNUNET_SCHEDULER_NO_TASK;
+    }
   GNUNET_STATISTICS_update (GSF_stats,
                            gettext_noop ("# P2P searches active"),
                            -1,
                            GNUNET_NO);
+  prd = GSF_pending_request_get_data_ (pr);
   GNUNET_break (GNUNET_OK ==
                GNUNET_CONTAINER_multihashmap_remove (cp->request_map,
                                                      &prd->query,
                                                      peerreq));
   GSF_pending_request_cancel_ (pr);
   GNUNET_free (peerreq);
+  return GNUNET_OK;
 }
 
 
 /**
+ * Free the given request.
+ *
+ * @param cls the request to free
+ * @param tc task context
+ */ 
+static void
+peer_request_destroy (void *cls,
+                     const struct GNUNET_SCHEDULER_TaskContext *tc)
+{
+  struct PeerRequest *peerreq = cls;
+  struct GSF_PendingRequest *pr = peerreq->pr;
+  struct GSF_PendingRequestData *prd;
+
+  peerreq->kill_task = GNUNET_SCHEDULER_NO_TASK;
+  prd = GSF_pending_request_get_data_ (pr);
+  cancel_pending_request (NULL,
+                         &prd->query,
+                         peerreq);
+}
+
+
+/**
  * The artificial delay is over, transmit the message now.
  *
  * @param cls the 'struct GSF_DelayedHandle' with the message
@@ -982,8 +1012,14 @@
   if (eval != GNUNET_BLOCK_EVALUATION_OK_LAST)
     return;
   if (GNUNET_SCHEDULER_NO_TASK == peerreq->kill_task)
-    peerreq->kill_task = GNUNET_SCHEDULER_add_now (&peer_request_destroy,
-                                                  peerreq);
+    {
+      GNUNET_STATISTICS_update (GSF_stats,
+                               gettext_noop ("# P2P searches destroyed due to 
ultimate reply"),
+                               1,
+                               GNUNET_NO);
+     peerreq->kill_task = GNUNET_SCHEDULER_add_now (&peer_request_destroy,
+                                                    peerreq);
+    }
 }
 
 
@@ -1599,33 +1635,6 @@
 
 
 /**
- * Cancel all requests associated with the peer.
- *
- * @param cls unused
- * @param query hash code of the request
- * @param value the 'struct GSF_PendingRequest'
- * @return GNUNET_YES (continue to iterate)
- */
-static int
-cancel_pending_request (void *cls,
-                       const GNUNET_HashCode *query,
-                       void *value)
-{
-  struct PeerRequest *peerreq = value;
-  struct GSF_PendingRequest *pr = peerreq->pr;
-
-  GSF_pending_request_cancel_ (pr);
-  if (peerreq->kill_task != GNUNET_SCHEDULER_NO_TASK)
-    {
-      GNUNET_SCHEDULER_cancel (peerreq->kill_task);
-      peerreq->kill_task = GNUNET_SCHEDULER_NO_TASK;
-    }
-  GNUNET_free (peerreq);
-  return GNUNET_OK;
-}
-
-
-/**
  * A peer disconnected from us.  Tear down the connected peer
  * record.
  *




reply via email to

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