cleanup
authorChristian Grothoff <christian@grothoff.org>
Wed, 15 Jun 2011 07:56:14 +0000 (07:56 +0000)
committerChristian Grothoff <christian@grothoff.org>
Wed, 15 Jun 2011 07:56:14 +0000 (07:56 +0000)
src/vpn/gnunet-daemon-vpn-dns.c
src/vpn/gnunet-daemon-vpn-dns.h
src/vpn/gnunet-daemon-vpn-helper.c
src/vpn/gnunet-daemon-vpn-helper.h
src/vpn/gnunet-daemon-vpn.c

index 46ec6d659939b6da1bbeb0eb34614681b0acdaa6..bb27c1401f8c58163af1f39f0559a7f03ab6fd19 100644 (file)
@@ -111,6 +111,7 @@ send_query(void* cls __attribute__((unused)), size_t size, void* buf) {
 void
 connect_to_service_dns (void *cls __attribute__((unused)),
                        const struct GNUNET_SCHEDULER_TaskContext *tc) {
+    conn_task = GNUNET_SCHEDULER_NO_TASK;
     if (0 != (tc->reason & GNUNET_SCHEDULER_REASON_SHUTDOWN))
       return;
     GNUNET_log(GNUNET_ERROR_TYPE_DEBUG, "Connecting to service-dns\n");
@@ -135,6 +136,7 @@ connect_to_service_dns (void *cls __attribute__((unused)),
       {
        GNUNET_CLIENT_notify_transmit_ready(dns_connection, sizeof(struct GNUNET_MessageHeader), GNUNET_TIME_UNIT_FOREVER_REL, GNUNET_YES, &send_query, NULL);
       }
+    conn_task = GNUNET_SCHEDULER_add_now (start_helper_and_schedule, NULL);
 }
 
 /**
@@ -148,9 +150,9 @@ dns_answer_handler(void* cls __attribute__((unused)), const struct GNUNET_Messag
       {
        GNUNET_CLIENT_disconnect(dns_connection, GNUNET_NO);
        dns_connection = NULL;
-       GNUNET_SCHEDULER_add_delayed (GNUNET_TIME_UNIT_SECONDS,
-                                     &connect_to_service_dns,
-                                     NULL);
+       conn_task = GNUNET_SCHEDULER_add_delayed (GNUNET_TIME_UNIT_SECONDS,
+                                                 &connect_to_service_dns,
+                                                 NULL);
        return;
       }
 
@@ -160,8 +162,8 @@ dns_answer_handler(void* cls __attribute__((unused)), const struct GNUNET_Messag
        GNUNET_break (0);
        GNUNET_CLIENT_disconnect(dns_connection, GNUNET_NO);
        dns_connection = NULL;
-       GNUNET_SCHEDULER_add_now (&connect_to_service_dns,
-                                 NULL);
+       conn_task = GNUNET_SCHEDULER_add_now (&connect_to_service_dns,
+                                             NULL);
        return;
       }
     void *pkt = GNUNET_malloc(ntohs(msg->size));
index d27599e487109629585bec9bfe12ec10a04dabc7..ed980e65fc31cbb25f59d31edff6fa10692bb711 100644 (file)
@@ -80,4 +80,6 @@ extern struct answer_packet_list *answer_proc_head;
  */
 extern struct answer_packet_list *answer_proc_tail;
 
+extern GNUNET_SCHEDULER_TaskIdentifier conn_task;
+
 #endif /* end of include guard: GNUNET-DAEMON-VPN-DNS_H */
index 8c27378e0e27237fbb286ea0816ce1b6c5c9e116..9a1ddd8cc1abf6b5ebe077574b830d48cf048492 100644 (file)
@@ -55,6 +55,7 @@ struct GNUNET_VPN_HELPER_Handle *helper_handle;
 void
 start_helper_and_schedule(void *cls,
                          const struct GNUNET_SCHEDULER_TaskContext *tc) {
+  shs_task = GNUNET_SCHEDULER_NO_TASK;
     if (0 != (tc->reason & GNUNET_SCHEDULER_REASON_SHUTDOWN))
       return;
 
index 0933437425737f9b2be2a13c4cc65157a8ac0aac..85436e2cda217882754409933a990f4d602ae168 100644 (file)
@@ -33,6 +33,8 @@
  */
 extern struct GNUNET_VPN_HELPER_Handle *helper_handle;
 
+extern GNUNET_SCHEDULER_TaskIdentifier shs_task;
+
 /**
  * Start the helper-process
  */
index 9a1f69c721e43af0eb7a32b9686b5000d975bef5..cef876b52e071455f31ed9548b8b42ae94fa90fe 100644 (file)
@@ -61,6 +61,10 @@ static int ret;
  */
 static struct GNUNET_CONTAINER_MultiHashMap *udp_connections;
 
+GNUNET_SCHEDULER_TaskIdentifier conn_task;
+
+GNUNET_SCHEDULER_TaskIdentifier shs_task;
+
 /**
  * Function scheduled as very last function, cleans up after us
  *{{{
@@ -84,6 +88,16 @@ cleanup(void* cls __attribute__((unused)), const struct GNUNET_SCHEDULER_TaskCon
        GNUNET_MESH_disconnect(mesh_handle);
        mesh_handle = NULL;
       }
+    if (GNUNET_SCHEDULER_NO_TASK != shs_task)
+      {
+       GNUNET_SCHEDULER_cancel (shs_task);
+       shs_task = GNUNET_SCHEDULER_NO_TASK;
+      }
+    if (GNUNET_SCHEDULER_NO_TASK != conn_task)
+      {
+       GNUNET_SCHEDULER_cancel (conn_task);
+       conn_task = GNUNET_SCHEDULER_NO_TASK;
+      }
 }
 /*}}}*/
 
@@ -733,8 +747,8 @@ run (void *cls,
     GNUNET_CONFIGURATION_get_value_number (cfg, "vpn", "MAX_MAPPINGg",
                                            &max_mappings);
     udp_connections = GNUNET_CONTAINER_multihashmap_create(65536);
-    GNUNET_SCHEDULER_TaskIdentifier conn_task = GNUNET_SCHEDULER_add_now (connect_to_service_dns, NULL);
-    GNUNET_SCHEDULER_add_after (conn_task, start_helper_and_schedule, NULL);
+    conn_task = GNUNET_SCHEDULER_add_now (connect_to_service_dns, NULL);
+    shs_task = GNUNET_SCHEDULER_add_after (conn_task, start_helper_and_schedule, NULL);
     GNUNET_SCHEDULER_add_delayed(GNUNET_TIME_UNIT_FOREVER_REL, &cleanup, cls);
 }