diff options
Diffstat (limited to 'src/cadet')
-rw-r--r-- | src/cadet/gnunet-service-cadet_tunnel.c | 20 |
1 files changed, 18 insertions, 2 deletions
diff --git a/src/cadet/gnunet-service-cadet_tunnel.c b/src/cadet/gnunet-service-cadet_tunnel.c index 92af3dbb7..d738a9d4e 100644 --- a/src/cadet/gnunet-service-cadet_tunnel.c +++ b/src/cadet/gnunet-service-cadet_tunnel.c | |||
@@ -200,6 +200,11 @@ struct CadetTunnel | |||
200 | */ | 200 | */ |
201 | struct CadetTunnelDelayed *tq_head; | 201 | struct CadetTunnelDelayed *tq_head; |
202 | struct CadetTunnelDelayed *tq_tail; | 202 | struct CadetTunnelDelayed *tq_tail; |
203 | |||
204 | /** | ||
205 | * Task to trim connections if too many are present. | ||
206 | */ | ||
207 | GNUNET_SCHEDULER_TaskIdentifier trim_connections_task; | ||
203 | }; | 208 | }; |
204 | 209 | ||
205 | 210 | ||
@@ -2288,6 +2293,8 @@ trim_connections (void *cls, const struct GNUNET_SCHEDULER_TaskContext *tc) | |||
2288 | { | 2293 | { |
2289 | struct CadetTunnel *t = cls; | 2294 | struct CadetTunnel *t = cls; |
2290 | 2295 | ||
2296 | t->trim_connections_task = GNUNET_SCHEDULER_NO_TASK; | ||
2297 | |||
2291 | if (0 != (tc->reason & GNUNET_SCHEDULER_REASON_SHUTDOWN)) | 2298 | if (0 != (tc->reason & GNUNET_SCHEDULER_REASON_SHUTDOWN)) |
2292 | return; | 2299 | return; |
2293 | 2300 | ||
@@ -2345,7 +2352,8 @@ GCT_add_connection (struct CadetTunnel *t, struct CadetConnection *c) | |||
2345 | 2352 | ||
2346 | GNUNET_CONTAINER_DLL_insert (t->connection_head, t->connection_tail, aux); | 2353 | GNUNET_CONTAINER_DLL_insert (t->connection_head, t->connection_tail, aux); |
2347 | 2354 | ||
2348 | GNUNET_SCHEDULER_add_now (&trim_connections, t); | 2355 | if (GNUNET_SCHEDULER_NO_TASK != t->trim_connections_task) |
2356 | t->trim_connections_task = GNUNET_SCHEDULER_add_now (&trim_connections, t); | ||
2349 | } | 2357 | } |
2350 | 2358 | ||
2351 | 2359 | ||
@@ -2637,11 +2645,19 @@ GCT_destroy (struct CadetTunnel *t) | |||
2637 | 2645 | ||
2638 | if (GNUNET_SCHEDULER_NO_TASK != t->destroy_task) | 2646 | if (GNUNET_SCHEDULER_NO_TASK != t->destroy_task) |
2639 | { | 2647 | { |
2640 | LOG (GNUNET_ERROR_TYPE_DEBUG, "cancelling %llX\n", t->destroy_task); | 2648 | LOG (GNUNET_ERROR_TYPE_DEBUG, "cancelling dest: %llX\n", t->destroy_task); |
2641 | GNUNET_SCHEDULER_cancel (t->destroy_task); | 2649 | GNUNET_SCHEDULER_cancel (t->destroy_task); |
2642 | t->destroy_task = GNUNET_SCHEDULER_NO_TASK; | 2650 | t->destroy_task = GNUNET_SCHEDULER_NO_TASK; |
2643 | } | 2651 | } |
2644 | 2652 | ||
2653 | if (GNUNET_SCHEDULER_NO_TASK != t->trim_connections_task) | ||
2654 | { | ||
2655 | LOG (GNUNET_ERROR_TYPE_DEBUG, "cancelling trim: %llX\n", | ||
2656 | t->trim_connections_task); | ||
2657 | GNUNET_SCHEDULER_cancel (t->trim_connections_task); | ||
2658 | t->trim_connections_task = GNUNET_SCHEDULER_NO_TASK; | ||
2659 | } | ||
2660 | |||
2645 | GNUNET_STATISTICS_update (stats, "# tunnels", -1, GNUNET_NO); | 2661 | GNUNET_STATISTICS_update (stats, "# tunnels", -1, GNUNET_NO); |
2646 | GCP_set_tunnel (t->peer, NULL); | 2662 | GCP_set_tunnel (t->peer, NULL); |
2647 | 2663 | ||