gnunet-svn
[Top][All Lists]
Advanced

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

[GNUnet-SVN] r34067 - gnunet/src/cadet


From: gnunet
Subject: [GNUnet-SVN] r34067 - gnunet/src/cadet
Date: Mon, 28 Jul 2014 07:12:43 +0200

Author: bartpolot
Date: 2014-07-28 07:12:43 +0200 (Mon, 28 Jul 2014)
New Revision: 34067

Modified:
   gnunet/src/cadet/gnunet-service-cadet_tunnel.c
Log:
- fix trim-after-free

Modified: gnunet/src/cadet/gnunet-service-cadet_tunnel.c
===================================================================
--- gnunet/src/cadet/gnunet-service-cadet_tunnel.c      2014-07-28 05:12:42 UTC 
(rev 34066)
+++ gnunet/src/cadet/gnunet-service-cadet_tunnel.c      2014-07-28 05:12:43 UTC 
(rev 34067)
@@ -200,6 +200,11 @@
    */
   struct CadetTunnelDelayed *tq_head;
   struct CadetTunnelDelayed *tq_tail;
+
+  /**
+   * Task to trim connections if too many are present.
+   */
+  GNUNET_SCHEDULER_TaskIdentifier trim_connections_task;
 };
 
 
@@ -2288,6 +2293,8 @@
 {
   struct CadetTunnel *t = cls;
 
+  t->trim_connections_task = GNUNET_SCHEDULER_NO_TASK;
+
   if (0 != (tc->reason & GNUNET_SCHEDULER_REASON_SHUTDOWN))
     return;
 
@@ -2345,7 +2352,8 @@
 
   GNUNET_CONTAINER_DLL_insert (t->connection_head, t->connection_tail, aux);
 
-  GNUNET_SCHEDULER_add_now (&trim_connections, t);
+  if (GNUNET_SCHEDULER_NO_TASK != t->trim_connections_task)
+    t->trim_connections_task = GNUNET_SCHEDULER_add_now (&trim_connections, t);
 }
 
 
@@ -2637,11 +2645,19 @@
 
   if (GNUNET_SCHEDULER_NO_TASK != t->destroy_task)
   {
-    LOG (GNUNET_ERROR_TYPE_DEBUG, "cancelling %llX\n", t->destroy_task);
+    LOG (GNUNET_ERROR_TYPE_DEBUG, "cancelling dest: %llX\n", t->destroy_task);
     GNUNET_SCHEDULER_cancel (t->destroy_task);
     t->destroy_task = GNUNET_SCHEDULER_NO_TASK;
   }
 
+  if (GNUNET_SCHEDULER_NO_TASK != t->trim_connections_task)
+  {
+    LOG (GNUNET_ERROR_TYPE_DEBUG, "cancelling trim: %llX\n",
+         t->trim_connections_task);
+    GNUNET_SCHEDULER_cancel (t->trim_connections_task);
+    t->trim_connections_task = GNUNET_SCHEDULER_NO_TASK;
+  }
+
   GNUNET_STATISTICS_update (stats, "# tunnels", -1, GNUNET_NO);
   GCP_set_tunnel (t->peer, NULL);
 




reply via email to

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