gnunet-svn
[Top][All Lists]
Advanced

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

[GNUnet-SVN] r37102 - gnunet/src/arm gnunet/src/ats gnunet/src/ats-tests


From: gnunet
Subject: [GNUnet-SVN] r37102 - gnunet/src/arm gnunet/src/ats gnunet/src/ats-tests gnunet/src/ats-tool gnunet/src/cadet gnunet/src/consensus gnunet/src/conversation gnunet/src/core gnunet/src/curl gnunet/src/datastore gnunet/src/dht gnunet/src/dns gnunet/src/dv gnunet/src/exit gnunet/src/fs gnunet/src/gns gnunet/src/hostlist gnunet/src/identity gnunet/src/identity-provider gnunet/src/include gnunet/src/multicast gnunet/src/namecache gnunet/src/namestore gnunet/src/nat gnunet/src/nse gnunet/src/peerinfo gnunet/src/peerinfo-tool gnunet/src/peerstore gnunet/src/psyc gnunet/src/psycstore gnunet/src/pt gnunet/src/regex gnunet/src/rest gnunet/src/revocation gnunet/src/rps gnunet/src/scalarproduct gnunet/src/secretsharing gnunet/src/set gnunet/src/social gnunet/src/statistics gnunet/src/template gnunet/src/testbed gnunet/src/testing gnunet/src/topology gnunet/src/transport gnunet/src/util gnunet/src/vpn gnunet-fuse/src/fuse gnunet-gtk/src/conversation gnunet-gtk/src/fs gnunet-gtk/src/identity gnunet-gtk/ src/lib gnunet-gtk/src/main gnunet-gtk/src/namestore gnunet-gtk/src/peerinfo gnunet-gtk/src/setup gnunet-gtk/src/statistics
Date: Sat, 30 Apr 2016 10:17:38 +0200

Author: grothoff
Date: 2016-04-30 10:17:37 +0200 (Sat, 30 Apr 2016)
New Revision: 37102

Modified:
   gnunet-fuse/src/fuse/gfs_download.c
   gnunet-gtk/src/conversation/gnunet-conversation-gtk.c
   gnunet-gtk/src/conversation/gnunet-conversation-gtk_import.c
   gnunet-gtk/src/fs/gnunet-fs-gtk.c
   gnunet-gtk/src/identity/gnunet-identity-gtk.c
   gnunet-gtk/src/lib/animations.c
   gnunet-gtk/src/lib/eventloop.c
   gnunet-gtk/src/main/gnunet-gtk.c
   gnunet-gtk/src/namestore/gnunet-namestore-gtk.c
   gnunet-gtk/src/peerinfo/gnunet-peerinfo-gtk.c
   gnunet-gtk/src/setup/gnunet-setup-namestore-config.c
   gnunet-gtk/src/setup/gnunet-setup.c
   gnunet-gtk/src/statistics/gnunet-statistics-gtk.c
   gnunet/src/arm/arm_api.c
   gnunet/src/arm/gnunet-arm.c
   gnunet/src/arm/gnunet-service-arm.c
   gnunet/src/arm/test_arm_api.c
   gnunet/src/arm/test_exponential_backoff.c
   gnunet/src/ats-tests/ats-testing-log.c
   gnunet/src/ats-tests/perf_ats_logging.c
   gnunet/src/ats-tool/gnunet-ats.c
   gnunet/src/ats/gnunet-service-ats.c
   gnunet/src/cadet/cadet_api.c
   gnunet/src/cadet/cadet_path.c
   gnunet/src/cadet/gnunet-cadet-profiler.c
   gnunet/src/cadet/gnunet-cadet.c
   gnunet/src/cadet/gnunet-service-cadet.c
   gnunet/src/cadet/gnunet-service-cadet_channel.c
   gnunet/src/cadet/gnunet-service-cadet_connection.c
   gnunet/src/cadet/gnunet-service-cadet_dht.c
   gnunet/src/cadet/gnunet-service-cadet_peer.c
   gnunet/src/cadet/gnunet-service-cadet_tunnel.c
   gnunet/src/cadet/test_cadet.c
   gnunet/src/cadet/test_cadet_local.c
   gnunet/src/cadet/test_cadet_single.c
   gnunet/src/consensus/gnunet-service-consensus.c
   gnunet/src/consensus/test_consensus_api.c
   gnunet/src/conversation/gnunet-conversation-test.c
   gnunet/src/conversation/gnunet-conversation.c
   gnunet/src/conversation/gnunet-service-conversation.c
   gnunet/src/core/gnunet-core.c
   gnunet/src/core/gnunet-service-core.c
   gnunet/src/core/gnunet-service-core_kx.c
   gnunet/src/core/test_core_api_mq.c
   gnunet/src/core/test_core_quota_compliance.c
   gnunet/src/curl/Makefile.am
   gnunet/src/datastore/gnunet-datastore.c
   gnunet/src/datastore/gnunet-service-datastore.c
   gnunet/src/datastore/perf_datastore_api.c
   gnunet/src/datastore/perf_plugin_datastore.c
   gnunet/src/datastore/test_plugin_datastore.c
   gnunet/src/dht/gnunet-dht-get.c
   gnunet/src/dht/gnunet-dht-monitor.c
   gnunet/src/dht/gnunet-dht-put.c
   gnunet/src/dht/gnunet-service-dht.c
   gnunet/src/dht/gnunet-service-dht_clients.c
   gnunet/src/dht/gnunet-service-dht_neighbours.c
   gnunet/src/dht/gnunet-service-wdht.c
   gnunet/src/dht/gnunet-service-wdht_clients.c
   gnunet/src/dht/gnunet-service-xdht.c
   gnunet/src/dht/gnunet-service-xdht_clients.c
   gnunet/src/dht/gnunet_dht_profiler.c
   gnunet/src/dns/dnsstub.c
   gnunet/src/dns/gnunet-dns-monitor.c
   gnunet/src/dns/gnunet-dns-redirector.c
   gnunet/src/dns/gnunet-service-dns.c
   gnunet/src/dv/gnunet-dv.c
   gnunet/src/dv/gnunet-service-dv.c
   gnunet/src/dv/test_transport_dv.c
   gnunet/src/exit/gnunet-daemon-exit.c
   gnunet/src/fs/gnunet-auto-share.c
   gnunet/src/fs/gnunet-daemon-fsprofiler.c
   gnunet/src/fs/gnunet-download.c
   gnunet/src/fs/gnunet-fs-profiler.c
   gnunet/src/fs/gnunet-publish.c
   gnunet/src/fs/gnunet-search.c
   gnunet/src/fs/gnunet-service-fs.c
   gnunet/src/fs/gnunet-service-fs_cp.c
   gnunet/src/fs/gnunet-service-fs_put.c
   gnunet/src/fs/gnunet-unindex.c
   gnunet/src/fs/test_gnunet_service_fs_migration.c
   gnunet/src/gns/gns_api.c
   gnunet/src/gns/gnunet-bcd.c
   gnunet/src/gns/gnunet-dns2gns.c
   gnunet/src/gns/gnunet-gns-helper-service-w32.c
   gnunet/src/gns/gnunet-gns-import.c
   gnunet/src/gns/gnunet-gns-proxy.c
   gnunet/src/gns/gnunet-gns.c
   gnunet/src/gns/gnunet-service-gns.c
   gnunet/src/gns/plugin_rest_gns.c
   gnunet/src/gns/test_gns_proxy.c
   gnunet/src/hostlist/gnunet-daemon-hostlist.c
   gnunet/src/hostlist/gnunet-daemon-hostlist_client.c
   gnunet/src/hostlist/gnunet-daemon-hostlist_server.c
   gnunet/src/hostlist/test_gnunet_daemon_hostlist.c
   gnunet/src/hostlist/test_gnunet_daemon_hostlist_learning.c
   gnunet/src/hostlist/test_gnunet_daemon_hostlist_reconnect.c
   gnunet/src/identity-provider/gnunet-service-identity-provider.c
   gnunet/src/identity-provider/plugin_rest_identity_provider.c
   gnunet/src/identity/gnunet-identity.c
   gnunet/src/identity/gnunet-service-identity.c
   gnunet/src/identity/plugin_rest_identity.c
   gnunet/src/identity/test_identity.c
   gnunet/src/include/gnunet_common.h
   gnunet/src/include/gnunet_scheduler_lib.h
   gnunet/src/multicast/gnunet-service-multicast.c
   gnunet/src/multicast/test_multicast.c
   gnunet/src/namecache/gnunet-namecache.c
   gnunet/src/namecache/gnunet-service-namecache.c
   gnunet/src/namecache/test_namecache_api_cache_block.c
   gnunet/src/namestore/gnunet-namestore-fcfsd.c
   gnunet/src/namestore/gnunet-namestore.c
   gnunet/src/namestore/gnunet-service-namestore.c
   gnunet/src/namestore/plugin_rest_namestore.c
   gnunet/src/nat/gnunet-nat-server.c
   gnunet/src/nat/nat.c
   gnunet/src/nat/nat_auto.c
   gnunet/src/nat/nat_mini.c
   gnunet/src/nat/nat_test.c
   gnunet/src/nat/test_nat.c
   gnunet/src/nse/gnunet-nse-profiler.c
   gnunet/src/nse/gnunet-nse.c
   gnunet/src/nse/gnunet-service-nse.c
   gnunet/src/nse/nse_api.c
   gnunet/src/nse/test_nse_multipeer.c
   gnunet/src/peerinfo-tool/gnunet-peerinfo.c
   gnunet/src/peerinfo/gnunet-service-peerinfo.c
   gnunet/src/peerinfo/peerinfo_api.c
   gnunet/src/peerinfo/peerinfo_api_notify.c
   gnunet/src/peerinfo/test_peerinfo_api_notify_friend_only.c
   gnunet/src/peerstore/gnunet-peerstore.c
   gnunet/src/peerstore/gnunet-service-peerstore.c
   gnunet/src/peerstore/peerstore_api.c
   gnunet/src/psyc/gnunet-service-psyc.c
   gnunet/src/psyc/test_psyc.c
   gnunet/src/psycstore/gnunet-service-psycstore.c
   gnunet/src/psycstore/psycstore_api.c
   gnunet/src/psycstore/test_psycstore.c
   gnunet/src/pt/gnunet-daemon-pt.c
   gnunet/src/pt/test_gnunet_vpn.c
   gnunet/src/regex/gnunet-daemon-regexprofiler.c
   gnunet/src/regex/gnunet-regex-profiler.c
   gnunet/src/regex/gnunet-regex-simulation-profiler.c
   gnunet/src/regex/gnunet-service-regex.c
   gnunet/src/rest/gnunet-rest-server.c
   gnunet/src/revocation/gnunet-revocation.c
   gnunet/src/revocation/gnunet-service-revocation.c
   gnunet/src/rps/gnunet-rps.c
   gnunet/src/rps/gnunet-service-rps.c
   gnunet/src/rps/gnunet-service-rps_sampler.c
   gnunet/src/rps/test_rps.c
   gnunet/src/scalarproduct/gnunet-scalarproduct.c
   gnunet/src/scalarproduct/gnunet-service-scalarproduct-ecc_alice.c
   gnunet/src/scalarproduct/gnunet-service-scalarproduct-ecc_bob.c
   gnunet/src/scalarproduct/gnunet-service-scalarproduct_alice.c
   gnunet/src/scalarproduct/gnunet-service-scalarproduct_bob.c
   gnunet/src/secretsharing/gnunet-secretsharing-profiler.c
   gnunet/src/secretsharing/gnunet-service-secretsharing.c
   gnunet/src/secretsharing/test_secretsharing_api.c
   gnunet/src/set/gnunet-service-set.c
   gnunet/src/set/gnunet-set-profiler.c
   gnunet/src/set/set_api.c
   gnunet/src/set/test_set_api.c
   gnunet/src/set/test_set_union_copy.c
   gnunet/src/set/test_set_union_result_symmetric.c
   gnunet/src/social/gnunet-service-social.c
   gnunet/src/social/test_social.c
   gnunet/src/statistics/gnunet-service-statistics.c
   gnunet/src/statistics/gnunet-statistics.c
   gnunet/src/statistics/statistics_api.c
   gnunet/src/statistics/test_statistics_api_watch.c
   gnunet/src/template/gnunet-service-template.c
   gnunet/src/testbed/gnunet-daemon-latency-logger.c
   gnunet/src/testbed/gnunet-daemon-testbed-blacklist.c
   gnunet/src/testbed/gnunet-daemon-testbed-underlay.c
   gnunet/src/testbed/gnunet-helper-testbed.c
   gnunet/src/testbed/gnunet-service-test-barriers.c
   gnunet/src/testbed/gnunet-service-testbed-logger.c
   gnunet/src/testbed/gnunet-service-testbed.c
   gnunet/src/testbed/gnunet-service-testbed_cpustatus.c
   gnunet/src/testbed/gnunet-service-testbed_oc.c
   gnunet/src/testbed/gnunet-testbed-profiler.c
   gnunet/src/testbed/gnunet_testbed_mpi_spawn.c
   gnunet/src/testbed/test_testbed_api_3peers_3controllers.c
   gnunet/src/testbed/test_testbed_api_hosts.c
   gnunet/src/testbed/test_testbed_api_testbed_run.c
   gnunet/src/testbed/test_testbed_logger_api.c
   gnunet/src/testbed/testbed_api_testbed.c
   gnunet/src/testing/gnunet-testing.c
   gnunet/src/topology/gnunet-daemon-topology.c
   gnunet/src/transport/gnunet-service-transport.c
   gnunet/src/transport/gnunet-service-transport_validation.c
   gnunet/src/transport/gnunet-transport-profiler.c
   gnunet/src/transport/gnunet-transport.c
   gnunet/src/transport/plugin_transport_http_client.c
   gnunet/src/transport/plugin_transport_http_server.c
   gnunet/src/transport/plugin_transport_udp.c
   gnunet/src/transport/plugin_transport_unix.c
   gnunet/src/transport/test_transport_api.c
   gnunet/src/transport/test_transport_api_bidirectional_connect.c
   gnunet/src/transport/test_transport_api_blacklisting.c
   gnunet/src/transport/test_transport_api_disconnect.c
   gnunet/src/transport/test_transport_api_http_reverse_peer2.conf
   gnunet/src/transport/test_transport_api_https_peer1.conf
   gnunet/src/transport/test_transport_api_https_peer2.conf
   gnunet/src/transport/test_transport_api_limited_sockets.c
   gnunet/src/transport/test_transport_api_manipulation_cfg.c
   gnunet/src/transport/test_transport_api_manipulation_recv_tcp.c
   gnunet/src/transport/test_transport_api_manipulation_send_tcp.c
   gnunet/src/transport/test_transport_api_monitor_peers.c
   gnunet/src/transport/test_transport_api_monitor_validation.c
   gnunet/src/transport/test_transport_api_restart_1peer.c
   gnunet/src/transport/test_transport_api_restart_2peers.c
   gnunet/src/transport/test_transport_api_timeout.c
   gnunet/src/transport/test_transport_startonly.c
   gnunet/src/transport/transport-testing.c
   gnunet/src/transport/transport_api.c
   gnunet/src/util/bandwidth.c
   gnunet/src/util/client.c
   gnunet/src/util/client_manager.c
   gnunet/src/util/connection.c
   gnunet/src/util/crypto_hash_file.c
   gnunet/src/util/gnunet-scrypt.c
   gnunet/src/util/gnunet-uri.c
   gnunet/src/util/helper.c
   gnunet/src/util/mq.c
   gnunet/src/util/os_installation.c
   gnunet/src/util/os_priority.c
   gnunet/src/util/program.c
   gnunet/src/util/resolver_api.c
   gnunet/src/util/scheduler.c
   gnunet/src/util/server.c
   gnunet/src/util/service.c
   gnunet/src/util/socks.c
   gnunet/src/util/speedup.c
   gnunet/src/util/test_common_logging_runtime_loglevels.c
   gnunet/src/util/test_connection_receive_cancel.c
   gnunet/src/util/test_disk.c
   gnunet/src/util/test_os_start_process.c
   gnunet/src/util/test_scheduler.c
   gnunet/src/util/test_scheduler_delay.c
   gnunet/src/util/test_server_disconnect.c
   gnunet/src/util/test_server_with_client_unix.c
   gnunet/src/util/test_speedup.c
   gnunet/src/vpn/gnunet-service-vpn.c
   gnunet/src/vpn/gnunet-vpn.c
Log:
implementing new scheduler shutdown semantics

Modified: gnunet/src/arm/arm_api.c
===================================================================
--- gnunet/src/arm/arm_api.c    2016-04-30 08:16:14 UTC (rev 37101)
+++ gnunet/src/arm/arm_api.c    2016-04-30 08:17:37 UTC (rev 37102)
@@ -241,7 +241,9 @@
   h->currently_down = GNUNET_YES;
   GNUNET_assert (NULL == h->reconnect_task);
   h->reconnect_task =
-      GNUNET_SCHEDULER_add_delayed (h->retry_backoff, &reconnect_arm_task, h);
+      GNUNET_SCHEDULER_add_delayed (h->retry_backoff,
+                                   &reconnect_arm_task,
+                                   h);
   /* Don't clear pending messages on disconnection, deliver them later
   clear_pending_messages (h, GNUNET_ARM_REQUEST_DISCONNECTED);
   GNUNET_assert (NULL == h->control_pending_head);
@@ -635,7 +637,8 @@
  */
 struct GNUNET_ARM_Handle *
 GNUNET_ARM_connect (const struct GNUNET_CONFIGURATION_Handle *cfg,
-                    GNUNET_ARM_ConnectionStatusCallback conn_status, void *cls)
+                    GNUNET_ARM_ConnectionStatusCallback conn_status,
+                   void *cls)
 {
   struct GNUNET_ARM_Handle *h;
 
@@ -942,7 +945,8 @@
                                     h->control_pending_tail, cm);
   cm->timeout_task_id =
       GNUNET_SCHEDULER_add_delayed (GNUNET_TIME_absolute_get_remaining
-                                    (cm->timeout), &control_message_timeout, 
cm);
+                                    (cm->timeout),
+                                   &control_message_timeout, cm);
   trigger_next_request (h, GNUNET_NO);
 }
 
@@ -1106,7 +1110,8 @@
                                     h->control_pending_tail, cm);
   cm->timeout_task_id =
       GNUNET_SCHEDULER_add_delayed (GNUNET_TIME_absolute_get_remaining
-                                    (cm->timeout), &control_message_timeout, 
cm);
+                                    (cm->timeout),
+                                   &control_message_timeout, cm);
   trigger_next_request (h, GNUNET_NO);
 }
 

Modified: gnunet/src/arm/gnunet-arm.c
===================================================================
--- gnunet/src/arm/gnunet-arm.c 2016-04-30 08:16:14 UTC (rev 37101)
+++ gnunet/src/arm/gnunet-arm.c 2016-04-30 08:17:37 UTC (rev 37102)
@@ -145,7 +145,12 @@
  */
 static unsigned int no_stderr;
 
+/**
+ * Handle for the task running the #action_loop().
+ */
+static struct GNUNET_SCHEDULER_Task *al_task;
 
+
 /**
  * Attempts to delete configuration file and GNUNET_HOME
  * on ARM shutdown provided the end and delete options
@@ -183,6 +188,11 @@
 static void
 shutdown_task (void *cls)
 {
+  if (NULL != al_task)
+  {
+    GNUNET_SCHEDULER_cancel (al_task);
+    al_task = NULL;
+  }
   if (NULL != h)
   {
     GNUNET_ARM_disconnect_and_free (h);
@@ -314,7 +324,8 @@
  */
 static void
 start_callback (void *cls,
-               enum GNUNET_ARM_RequestStatus rs, const char *service,
+               enum GNUNET_ARM_RequestStatus rs,
+               const char *service,
                enum GNUNET_ARM_Result result)
 {
   char *msg;
@@ -336,9 +347,10 @@
     GNUNET_SCHEDULER_shutdown ();
     return;
   }
-  GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "ARM service [re]start successful\n");
+  GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
+             "ARM service [re]start successful\n");
   start = 0;
-  GNUNET_SCHEDULER_add_now (action_loop, NULL);
+  al_task = GNUNET_SCHEDULER_add_now (&action_loop, NULL);
 }
 
 
@@ -356,7 +368,8 @@
  */
 static void
 stop_callback (void *cls,
-              enum GNUNET_ARM_RequestStatus rs, const char *service,
+              enum GNUNET_ARM_RequestStatus rs,
+              const char *service,
               enum GNUNET_ARM_Result result)
 {
   char *msg;
@@ -374,7 +387,8 @@
       (GNUNET_ARM_RESULT_STOPPED != result) &&
       (GNUNET_ARM_RESULT_IS_STOPPED_ALREADY != result))
   {
-    GNUNET_asprintf (&msg, "%s", _("Failed to stop the ARM service: %s\n"));
+    GNUNET_asprintf (&msg, "%s",
+                    _("Failed to stop the ARM service: %s\n"));
     FPRINTF (stdout, msg, ret_string (result));
     GNUNET_free (msg);
     GNUNET_SCHEDULER_shutdown ();
@@ -390,7 +404,7 @@
     GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
                "Initiating an ARM restart\n");
   }
-  GNUNET_SCHEDULER_add_now (&action_loop, NULL);
+  al_task = GNUNET_SCHEDULER_add_now (&action_loop, NULL);
 }
 
 
@@ -408,7 +422,8 @@
  */
 static void
 init_callback (void *cls,
-              enum GNUNET_ARM_RequestStatus rs, const char *service,
+              enum GNUNET_ARM_RequestStatus rs,
+              const char *service,
               enum GNUNET_ARM_Result result)
 {
   char *msg;
@@ -438,7 +453,7 @@
              init);
   GNUNET_free (init);
   init = NULL;
-  GNUNET_SCHEDULER_add_now (&action_loop, NULL);
+  al_task = GNUNET_SCHEDULER_add_now (&action_loop, NULL);
 }
 
 
@@ -456,7 +471,8 @@
  */
 static void
 term_callback (void *cls,
-              enum GNUNET_ARM_RequestStatus rs, const char *service,
+              enum GNUNET_ARM_RequestStatus rs,
+              const char *service,
               enum GNUNET_ARM_Result result)
 {
   char *msg;
@@ -487,7 +503,7 @@
               term);
   GNUNET_free (term);
   term = NULL;
-  GNUNET_SCHEDULER_add_now (&action_loop, NULL);
+  al_task = GNUNET_SCHEDULER_add_now (&action_loop, NULL);
 }
 
 
@@ -503,7 +519,8 @@
  */
 static void
 list_callback (void *cls,
-              enum GNUNET_ARM_RequestStatus rs, unsigned int count,
+              enum GNUNET_ARM_RequestStatus rs,
+              unsigned int count,
               const char *const*list)
 {
   unsigned int i;
@@ -512,7 +529,8 @@
   {
     char *msg;
 
-    GNUNET_asprintf (&msg, "%s", _("Failed to request a list of services: 
%s\n"));
+    GNUNET_asprintf (&msg, "%s",
+                    _("Failed to request a list of services: %s\n"));
     FPRINTF (stdout, msg, req_string (rs));
     GNUNET_free (msg);
     ret = 3;
@@ -520,7 +538,8 @@
   }
   if (NULL == list)
   {
-    FPRINTF (stderr, "%s", _("Error communicating with ARM. ARM not 
running?\n"));
+    FPRINTF (stderr, "%s",
+            _("Error communicating with ARM. ARM not running?\n"));
     GNUNET_SCHEDULER_shutdown ();
     ret = 3;
     return;
@@ -528,7 +547,7 @@
   FPRINTF (stdout, "%s", _("Running services:\n"));
   for (i = 0; i < count; i++)
     FPRINTF (stdout, "%s\n", list[i]);
-  GNUNET_SCHEDULER_add_now (&action_loop, NULL);
+  al_task = GNUNET_SCHEDULER_add_now (&action_loop, NULL);
 }
 
 
@@ -541,12 +560,9 @@
 static void
 action_loop (void *cls)
 {
-  const struct GNUNET_SCHEDULER_TaskContext *tc;
-
-  tc = GNUNET_SCHEDULER_get_task_context ();
-  if (0 != (tc->reason & GNUNET_SCHEDULER_REASON_SHUTDOWN))
-    return;
-  GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Running requested actions\n");
+  al_task = NULL;
+  GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
+             "Running requested actions\n");
   while (1)
   {
     switch (phase++)
@@ -554,7 +570,8 @@
     case 0:
       if (NULL != term)
       {
-        GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Termination action\n");
+        GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
+                   "Termination action\n");
         GNUNET_ARM_request_service_stop (h, term,
                                         (0 == timeout.rel_value_us) ? 
STOP_TIMEOUT : timeout,
                                         &term_callback, NULL);
@@ -564,7 +581,8 @@
     case 1:
       if (end || restart)
       {
-        GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "End action\n");
+        GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
+                   "End action\n");
         GNUNET_ARM_request_service_stop (h, "arm",
                                         (0 == timeout.rel_value_us) ? 
STOP_TIMEOUT_ARM : timeout,
                                         &stop_callback, NULL);
@@ -574,7 +592,8 @@
     case 2:
       if (start)
       {
-        GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Start action\n");
+        GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
+                   "Start action\n");
         GNUNET_ARM_request_service_start (h, "arm",
             (no_stdout ? 0 : GNUNET_OS_INHERIT_STD_OUT) |
             (no_stderr ? 0 : GNUNET_OS_INHERIT_STD_ERR),
@@ -586,8 +605,10 @@
     case 3:
       if (NULL != init)
       {
-        GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Initialization action\n");
-        GNUNET_ARM_request_service_start (h, init, GNUNET_OS_INHERIT_STD_NONE,
+        GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
+                   "Initialization action\n");
+        GNUNET_ARM_request_service_start (h, init,
+                                         GNUNET_OS_INHERIT_STD_NONE,
                                          (0 == timeout.rel_value_us) ? 
STOP_TIMEOUT : timeout,
                                          &init_callback, NULL);
         return;
@@ -631,7 +652,8 @@
  */
 static void
 srv_status (void *cls,
-           const char *service, enum GNUNET_ARM_ServiceStatus status)
+           const char *service,
+           enum GNUNET_ARM_ServiceStatus status)
 {
   const char *msg;
 
@@ -704,9 +726,8 @@
     return;
   if (monitor)
     m = GNUNET_ARM_monitor (cfg, &srv_status, NULL);
-  GNUNET_SCHEDULER_add_now (&action_loop, NULL);
-  GNUNET_SCHEDULER_add_delayed (GNUNET_TIME_UNIT_FOREVER_REL,
-                               &shutdown_task, NULL);
+  al_task = GNUNET_SCHEDULER_add_now (&action_loop, NULL);
+  GNUNET_SCHEDULER_add_shutdown (&shutdown_task, NULL);
 }
 
 

Modified: gnunet/src/arm/gnunet-service-arm.c
===================================================================
--- gnunet/src/arm/gnunet-service-arm.c 2016-04-30 08:16:14 UTC (rev 37101)
+++ gnunet/src/arm/gnunet-service-arm.c 2016-04-30 08:17:37 UTC (rev 37102)
@@ -610,13 +610,9 @@
 {
   struct ServiceListeningInfo *sli = cls;
   struct ServiceList *sl = sli->sl;
-  const struct GNUNET_SCHEDULER_TaskContext *tc;
 
   sli->accept_task = NULL;
   GNUNET_assert (GNUNET_NO == in_shutdown);
-  tc = GNUNET_SCHEDULER_get_task_context ();
-  if (0 != (GNUNET_SCHEDULER_REASON_SHUTDOWN & tc->reason))
-    return;
   start_process (sl, NULL, 0);
 }
 
@@ -734,7 +730,9 @@
   sli->accept_task =
     GNUNET_SCHEDULER_add_read_net (GNUNET_TIME_UNIT_FOREVER_REL, sock,
                                   &accept_connection, sli);
-  GNUNET_CONTAINER_DLL_insert (sl->listen_head, sl->listen_tail, sli);
+  GNUNET_CONTAINER_DLL_insert (sl->listen_head,
+                              sl->listen_tail,
+                              sli);
 }
 
 
@@ -866,10 +864,14 @@
              servicename);
   if (0 == strcasecmp (servicename, "arm"))
   {
-    broadcast_status (servicename, GNUNET_ARM_SERVICE_STOPPING, NULL);
-    signal_result (client, servicename, request_id, 
GNUNET_ARM_RESULT_STOPPING);
+    broadcast_status (servicename,
+                     GNUNET_ARM_SERVICE_STOPPING, NULL);
+    signal_result (client,
+                  servicename,
+                  request_id,
+                  GNUNET_ARM_RESULT_STOPPING);
     GNUNET_SERVER_client_persist_ (client);
-    GNUNET_SCHEDULER_add_now (trigger_shutdown, NULL);
+    GNUNET_SCHEDULER_add_now (&trigger_shutdown, NULL);
     GNUNET_SERVER_receive_done (client, GNUNET_OK);
     return;
   }
@@ -876,7 +878,10 @@
   sl = find_service (servicename);
   if (sl == NULL)
     {
-      signal_result (client, servicename, request_id, 
GNUNET_ARM_RESULT_IS_NOT_KNOWN);
+      signal_result (client,
+                    servicename,
+                    request_id,
+                    GNUNET_ARM_RESULT_IS_NOT_KNOWN);
       GNUNET_SERVER_receive_done (client, GNUNET_OK);
       return;
     }
@@ -884,7 +889,10 @@
   if (GNUNET_YES == in_shutdown)
     {
       /* shutdown in progress */
-      signal_result (client, servicename, request_id, 
GNUNET_ARM_RESULT_IN_SHUTDOWN);
+      signal_result (client,
+                    servicename,
+                    request_id,
+                    GNUNET_ARM_RESULT_IN_SHUTDOWN);
       GNUNET_SERVER_receive_done (client, GNUNET_OK);
       return;
     }
@@ -891,7 +899,9 @@
   if (NULL != sl->killing_client)
   {
     /* killing already in progress */
-    signal_result (client, servicename, request_id,
+    signal_result (client,
+                  servicename,
+                  request_id,
                   GNUNET_ARM_RESULT_IS_STOPPING_ALREADY);
     GNUNET_SERVER_receive_done (client, GNUNET_OK);
     return;
@@ -899,7 +909,9 @@
   if (NULL == sl->proc)
   {
     /* process is down */
-    signal_result (client, servicename, request_id,
+    signal_result (client,
+                  servicename,
+                  request_id,
                   GNUNET_ARM_RESULT_IS_STOPPED_ALREADY);
     GNUNET_SERVER_receive_done (client, GNUNET_OK);
     return;
@@ -907,7 +919,9 @@
   GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
              "Sending kill signal to service `%s', waiting for process to 
die.\n",
              servicename);
-  broadcast_status (servicename, GNUNET_ARM_SERVICE_STOPPING, NULL);
+  broadcast_status (servicename,
+                   GNUNET_ARM_SERVICE_STOPPING,
+                   NULL);
   /* no signal_start - only when it's STOPPED */
   sl->killed_at = GNUNET_TIME_absolute_get ();
   if (0 != GNUNET_OS_process_kill (sl->proc, GNUNET_TERM_SIG))
@@ -1055,7 +1069,8 @@
     while (NULL != (sli = pos->listen_head))
       {
        GNUNET_CONTAINER_DLL_remove (pos->listen_head,
-                                    pos->listen_tail, sli);
+                                    pos->listen_tail,
+                                    sli);
        if (NULL != sli->accept_task)
          {
            GNUNET_SCHEDULER_cancel (sli->accept_task);
@@ -1072,7 +1087,7 @@
   while (NULL != (pos = nxt))
   {
     nxt = pos->next;
-    if (pos->proc != NULL)
+    if (NULL != pos->proc)
     {
       GNUNET_log (GNUNET_ERROR_TYPE_INFO,
                  "Stopping service `%s'\n",
@@ -1087,7 +1102,7 @@
     }
   }
   /* finally, should all service processes be already gone, terminate for real 
*/
-  if (running_head == NULL)
+  if (NULL == running_head)
     do_shutdown ();
   else
     GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
@@ -1105,15 +1120,11 @@
 delayed_restart_task (void *cls)
 
 {
-  const struct GNUNET_SCHEDULER_TaskContext *tc;
   struct ServiceList *sl;
   struct GNUNET_TIME_Relative lowestRestartDelay;
   struct ServiceListeningInfo *sli;
 
   child_restart_task = NULL;
-  tc = GNUNET_SCHEDULER_get_task_context ();
-  if (0 != (tc->reason & GNUNET_SCHEDULER_REASON_SHUTDOWN))
-    return;
   GNUNET_assert (GNUNET_NO == in_shutdown);
   lowestRestartDelay = GNUNET_TIME_UNIT_FOREVER_REL;
 
@@ -1144,7 +1155,8 @@
            /* accept was actually paused, so start it again */
            sli->accept_task =
              GNUNET_SCHEDULER_add_read_net
-             (GNUNET_TIME_UNIT_FOREVER_REL, sli->listen_socket,
+             (GNUNET_TIME_UNIT_FOREVER_REL,
+              sli->listen_socket,
               &accept_connection, sli);
          }
       }
@@ -1180,7 +1192,6 @@
 static void
 maint_child_death (void *cls)
 {
-  const struct GNUNET_SCHEDULER_TaskContext *tc;
   struct ServiceList *pos;
   struct ServiceList *next;
   struct ServiceListeningInfo *sli;
@@ -1192,19 +1203,9 @@
   unsigned long statusCode;
   const struct GNUNET_DISK_FileHandle *pr;
 
-  pr = GNUNET_DISK_pipe_handle (sigpipe, GNUNET_DISK_PIPE_END_READ);
+  pr = GNUNET_DISK_pipe_handle (sigpipe,
+                               GNUNET_DISK_PIPE_END_READ);
   child_death_task = NULL;
-  tc = GNUNET_SCHEDULER_get_task_context ();
-  if (0 == (tc->reason & GNUNET_SCHEDULER_REASON_READ_READY))
-  {
-    /* shutdown scheduled us, ignore! */
-    child_death_task =
-      GNUNET_SCHEDULER_add_read_file (GNUNET_TIME_UNIT_FOREVER_REL,
-                                      pr,
-                                      &maint_child_death,
-                                      NULL);
-    return;
-  }
   /* consume the signal */
   GNUNET_break (0 < GNUNET_DISK_file_read (pr, &c, sizeof (c)));
 
@@ -1353,14 +1354,13 @@
       }
       else
       {
-        if (0 == (tc->reason & GNUNET_SCHEDULER_REASON_SHUTDOWN))
-          GNUNET_log (GNUNET_ERROR_TYPE_INFO,
-                      _("Service `%s' terminated with status %s/%d, will 
restart in %s\n"),
-                      pos->name,
-                      statstr,
-                      statcode,
-                      GNUNET_STRINGS_relative_time_to_string (pos->backoff,
-                                                              GNUNET_YES));
+       GNUNET_log (GNUNET_ERROR_TYPE_INFO,
+                   _("Service `%s' terminated with status %s/%d, will restart 
in %s\n"),
+                   pos->name,
+                   statstr,
+                   statcode,
+                   GNUNET_STRINGS_relative_time_to_string (pos->backoff,
+                                                           GNUNET_YES));
         /* schedule restart */
         pos->restart_at = GNUNET_TIME_relative_to_absolute (pos->backoff);
         pos->backoff = GNUNET_TIME_STD_BACKOFF (pos->backoff);
@@ -1601,9 +1601,8 @@
   cfg = c;
   server = serv;
   GNUNET_assert (NULL != serv);
-  GNUNET_SCHEDULER_add_delayed (GNUNET_TIME_UNIT_FOREVER_REL,
-                                &shutdown_task,
-                               NULL);
+  GNUNET_SCHEDULER_add_shutdown (&shutdown_task,
+                                NULL);
   child_death_task =
     GNUNET_SCHEDULER_add_read_file (GNUNET_TIME_UNIT_FOREVER_REL,
                                    GNUNET_DISK_pipe_handle (sigpipe,

Modified: gnunet/src/arm/test_arm_api.c
===================================================================
--- gnunet/src/arm/test_arm_api.c       2016-04-30 08:16:14 UTC (rev 37101)
+++ gnunet/src/arm/test_arm_api.c       2016-04-30 08:17:37 UTC (rev 37102)
@@ -157,7 +157,7 @@
       ok = 3;
     else if (ok == 1)
       ok = 0;
-    GNUNET_SCHEDULER_add_now (trigger_disconnect, arm);
+    GNUNET_SCHEDULER_add_now (&trigger_disconnect, arm);
   }
 }
 

Modified: gnunet/src/arm/test_exponential_backoff.c
===================================================================
--- gnunet/src/arm/test_exponential_backoff.c   2016-04-30 08:16:14 UTC (rev 
37101)
+++ gnunet/src/arm/test_exponential_backoff.c   2016-04-30 08:17:37 UTC (rev 
37102)
@@ -90,7 +90,7 @@
   /**
    * Task set up to cancel the shutdown request on timeout.
    */
-  struct GNUNET_SCHEDULER_Task * cancel_task;
+  struct GNUNET_SCHEDULER_Task *cancel_task;
 
   /**
    * Task to call once shutdown complete
@@ -235,7 +235,7 @@
   {
     /* Re-try shutdown */
     LOG ("do-nothing didn't die, trying again\n");
-    GNUNET_SCHEDULER_add_now (kill_task, NULL);
+    GNUNET_SCHEDULER_add_now (&kill_task, NULL);
     return;
   }
   startedWaitingAt = GNUNET_TIME_absolute_get ();
@@ -290,12 +290,15 @@
 
 
 static void
-arm_stop_cb (void *cls, enum GNUNET_ARM_RequestStatus status, const char 
*servicename, enum GNUNET_ARM_Result result)
+arm_stop_cb (void *cls,
+            enum GNUNET_ARM_RequestStatus status,
+            const char *servicename,
+            enum GNUNET_ARM_Result result)
 {
   GNUNET_break (status == GNUNET_ARM_REQUEST_SENT_OK);
   GNUNET_break (result == GNUNET_ARM_RESULT_STOPPED);
   LOG ("ARM service stopped\n");
-  GNUNET_SCHEDULER_add_now (trigger_disconnect, NULL);
+  GNUNET_SCHEDULER_add_now (&trigger_disconnect, NULL);
 }
 
 
@@ -318,7 +321,8 @@
     LOG ("do-nothing is starting\n");
     phase++;
     ok = 1;
-    GNUNET_SCHEDULER_add_delayed (GNUNET_TIME_UNIT_SECONDS, &kill_task, NULL);
+    GNUNET_SCHEDULER_add_delayed (GNUNET_TIME_UNIT_SECONDS,
+                                 &kill_task, NULL);
   }
   else if ((phase == 2) && (strcasecmp (SERVICE, service) == 0))
   {
@@ -328,7 +332,7 @@
     if (status == GNUNET_ARM_SERVICE_STARTING)
     {
       LOG ("do-nothing is starting\n");
-      GNUNET_SCHEDULER_add_now (kill_task, &ok);
+      GNUNET_SCHEDULER_add_now (&kill_task, &ok);
     }
     else if ((status == GNUNET_ARM_SERVICE_STOPPED) && (trialCount == 14))
     {

Modified: gnunet/src/ats/gnunet-service-ats.c
===================================================================
--- gnunet/src/ats/gnunet-service-ats.c 2016-04-30 08:16:14 UTC (rev 37101)
+++ gnunet/src/ats/gnunet-service-ats.c 2016-04-30 08:17:37 UTC (rev 37102)
@@ -138,9 +138,6 @@
   GAS_performance_done ();
   GAS_preference_done ();
   GAS_reservations_done ();
-  GNUNET_SERVER_disconnect_notify_cancel (GSA_server,
-                                          &client_disconnect_handler,
-                                          NULL);
   if (NULL != GSA_stats)
   {
     GNUNET_STATISTICS_destroy (GSA_stats, GNUNET_NO);
@@ -221,9 +218,8 @@
                                    &client_disconnect_handler,
                                   NULL);
   GNUNET_SERVER_add_handlers (server, handlers);
-  GNUNET_SCHEDULER_add_delayed (GNUNET_TIME_UNIT_FOREVER_REL,
-                                &cleanup_task,
-                               NULL);
+  GNUNET_SCHEDULER_add_shutdown (&cleanup_task,
+                                NULL);
 }
 
 

Modified: gnunet/src/ats-tests/ats-testing-log.c
===================================================================
--- gnunet/src/ats-tests/ats-testing-log.c      2016-04-30 08:16:14 UTC (rev 
37101)
+++ gnunet/src/ats-tests/ats-testing-log.c      2016-04-30 08:17:37 UTC (rev 
37102)
@@ -804,13 +804,9 @@
 collect_log_task (void *cls)
 {
   struct LoggingHandle *l = cls;
-  const struct GNUNET_SCHEDULER_TaskContext *tc;
 
   l->log_task = NULL;
   GNUNET_ATS_TEST_logging_now (l);
-  tc = GNUNET_SCHEDULER_get_task_context ();
-  if (tc->reason == GNUNET_SCHEDULER_REASON_SHUTDOWN)
-    return;
   l->log_task = GNUNET_SCHEDULER_add_delayed (l->frequency,
                                               &collect_log_task,
                                               l);
@@ -829,8 +825,10 @@
     return;
 
   if (NULL != l->log_task)
+  {
     GNUNET_SCHEDULER_cancel (l->log_task);
-  l->log_task = NULL;
+    l->log_task = NULL;
+  }
   l->running = GNUNET_NO;
 
   GNUNET_log(GNUNET_ERROR_TYPE_INFO,

Modified: gnunet/src/ats-tests/perf_ats_logging.c
===================================================================
--- gnunet/src/ats-tests/perf_ats_logging.c     2016-04-30 08:16:14 UTC (rev 
37101)
+++ gnunet/src/ats-tests/perf_ats_logging.c     2016-04-30 08:17:37 UTC (rev 
37102)
@@ -639,15 +639,8 @@
 static void
 collect_log_task (void *cls)
 {
-  const struct GNUNET_SCHEDULER_TaskContext *tc;
-
   log_task = NULL;
-
-  collect_log_now();
-  tc = GNUNET_SCHEDULER_get_task_context ();
-  if (tc->reason == GNUNET_SCHEDULER_REASON_SHUTDOWN)
-    return;
-
+  collect_log_now ();
   log_task = GNUNET_SCHEDULER_add_delayed (frequency,
                                            &collect_log_task, NULL);
 }
@@ -659,12 +652,14 @@
   int c_m;
   struct PeerLoggingTimestep *cur;
 
-  if (GNUNET_YES!= running)
+  if (GNUNET_YES != running)
     return;
 
   if (NULL != log_task)
+  {
     GNUNET_SCHEDULER_cancel (log_task);
-  log_task = NULL;
+    log_task = NULL;
+  }
   collect_log_task (NULL);
 
   GNUNET_log(GNUNET_ERROR_TYPE_INFO,

Modified: gnunet/src/ats-tool/gnunet-ats.c
===================================================================
--- gnunet/src/ats-tool/gnunet-ats.c    2016-04-30 08:16:14 UTC (rev 37101)
+++ gnunet/src/ats-tool/gnunet-ats.c    2016-04-30 08:17:37 UTC (rev 37102)
@@ -363,7 +363,7 @@
       /* All messages received and no resolutions pending*/
       if (shutdown_task != NULL)
         GNUNET_SCHEDULER_cancel (shutdown_task);
-      shutdown_task = GNUNET_SCHEDULER_add_now (end, NULL);
+      shutdown_task = GNUNET_SCHEDULER_add_now (&end, NULL);
     }
     return;
   }
@@ -604,7 +604,7 @@
       /* All messages received and no resolutions pending*/
       if (shutdown_task != NULL)
         GNUNET_SCHEDULER_cancel (shutdown_task);
-      shutdown_task = GNUNET_SCHEDULER_add_now (end, NULL);
+      shutdown_task = GNUNET_SCHEDULER_add_now (&end, NULL);
     }
     return;
   }
@@ -807,9 +807,8 @@
       shutdown_task = GNUNET_SCHEDULER_add_now (&end, NULL);
       return;
     }
-    shutdown_task = GNUNET_SCHEDULER_add_delayed (GNUNET_TIME_UNIT_FOREVER_REL,
-                                                  &end,
-                                                  NULL);
+    shutdown_task = GNUNET_SCHEDULER_add_shutdown (&end,
+                                                  NULL);
     return;
   }
   if (opt_list_used)
@@ -834,9 +833,8 @@
       shutdown_task = GNUNET_SCHEDULER_add_now (&end, NULL);
       return;
     }
-    shutdown_task = GNUNET_SCHEDULER_add_delayed (GNUNET_TIME_UNIT_FOREVER_REL,
-                                             &end,
-                                             NULL);
+    shutdown_task = GNUNET_SCHEDULER_add_shutdown (&end,
+                                                  NULL);
     return;
   }
   if (opt_monitor)
@@ -844,13 +842,15 @@
     ph = GNUNET_ATS_performance_init (cfg,
                                       &ats_perf_mon_cb,
                                       NULL);
+    shutdown_task = GNUNET_SCHEDULER_add_shutdown (&end,
+                                                  NULL);
     if (NULL == ph)
+    {
       FPRINTF (stderr,
                "%s",
                _("Cannot connect to ATS service, exiting...\n"));
-    shutdown_task = GNUNET_SCHEDULER_add_delayed (GNUNET_TIME_UNIT_FOREVER_REL,
-                                                  &end,
-                                                  NULL);
+      GNUNET_SCHEDULER_shutdown ();
+    }
     return;
   }
   if (opt_set_pref)

Modified: gnunet/src/cadet/cadet_api.c
===================================================================
--- gnunet/src/cadet/cadet_api.c        2016-04-30 08:16:14 UTC (rev 37101)
+++ gnunet/src/cadet/cadet_api.c        2016-04-30 08:17:37 UTC (rev 37102)
@@ -1,20 +1,22 @@
 /*
      This file is part of GNUnet.
      Copyright (C) 2011 GNUnet e.V.
+
      GNUnet is free software; you can redistribute it and/or modify
      it under the terms of the GNU General Public License as published
      by the Free Software Foundation; either version 3, or (at your
      option) any later version.
+
      GNUnet is distributed in the hope that it will be useful, but
      WITHOUT ANY WARRANTY; without even the implied warranty of
      MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
      General Public License for more details.
+
      You should have received a copy of the GNU General Public License
      along with GNUnet; see the file COPYING.  If not, write to the
      Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
      Boston, MA 02110-1301, USA.
 */
-
 /**
  * @file cadet/cadet_api.c
  * @brief cadet api: client implementation of new cadet service
@@ -702,12 +704,8 @@
 reconnect_cbk (void *cls)
 {
   struct GNUNET_CADET_Handle *h = cls;
-  const struct GNUNET_SCHEDULER_TaskContext *tc;
 
   h->reconnect_task = NULL;
-  tc = GNUNET_SCHEDULER_get_task_context ();
-  if (0 != (tc->reason & GNUNET_SCHEDULER_REASON_SHUTDOWN))
-    return;
   do_reconnect (h);
 }
 
@@ -718,7 +716,7 @@
  *
  * @param h handle to the cadet
  *
- * @return GNUNET_YES in case of sucess, GNUNET_NO otherwise (service down...)
+ * @return #GNUNET_YES in case of sucess, #GNUNET_NO otherwise (service 
down...)
  */
 static void
 reconnect (struct GNUNET_CADET_Handle *h)

Modified: gnunet/src/cadet/cadet_path.c
===================================================================
--- gnunet/src/cadet/cadet_path.c       2016-04-30 08:16:14 UTC (rev 37101)
+++ gnunet/src/cadet/cadet_path.c       2016-04-30 08:17:37 UTC (rev 37102)
@@ -33,11 +33,8 @@
 
 /**
  * @brief Destroy a path after some time has past.
+ * Removes the path from the peer (must not be used for direct paths).
  *
- * If the path is returned from DHT again after a while, try again.
- *
- * Removes the path from the peer (except for direct paths).
- *
  * @param cls Closure (path to destroy).
  */
 static void
@@ -45,28 +42,17 @@
 {
   struct CadetPeerPath *path = cls;
   struct CadetPeer *peer;
-  const struct GNUNET_SCHEDULER_TaskContext *tc;
 
-  LOG (GNUNET_ERROR_TYPE_INFO, "Destroy delayed %p (%u)\n", path, 
path->length);
   path->path_delete = NULL;
-
-  /* During shutdown, the peers peermap might not exist anymore. */
-  tc = GNUNET_SCHEDULER_get_task_context ();
-  if ((GNUNET_SCHEDULER_REASON_SHUTDOWN & tc->reason) == 0)
-  {
-    if (2 >= path->length)
-    {
-      /* This is not the place to destroy direct paths, only core_disconnect
-       * should do it and never delay it.
-       */
-      GNUNET_break (0);
-    }
-    peer = GCP_get_short (path->peers[path->length - 1], GNUNET_NO);
-    if (NULL != peer)
-      GCP_remove_path (peer, path);
-  }
-  else
-    path_destroy (path);
+  LOG (GNUNET_ERROR_TYPE_INFO,
+       "Destroy delayed %p (%u)\n",
+       path,
+       path->length);
+  GNUNET_assert (2 < path->length);
+  peer = GCP_get_short (path->peers[path->length - 1],
+                       GNUNET_NO);
+  GNUNET_assert (NULL != peer);
+  GCP_remove_path (peer, path);
 }
 
 
@@ -74,7 +60,6 @@
  * Create a new path
  *
  * @param length How many hops will the path have.
- *
  * @return A newly allocated path with a peer array of the specified length.
  */
 struct CadetPeerPath *
@@ -125,7 +110,9 @@
   unsigned int i;
 
   aux = path_new (path->length);
-  memcpy (aux->peers, path->peers, path->length * sizeof (GNUNET_PEER_Id));
+  memcpy (aux->peers,
+         path->peers,
+         path->length * sizeof (GNUNET_PEER_Id));
   for (i = 0; i < aux->length; i++)
     GNUNET_PEER_change_rc (aux->peers[i], 1);
   return aux;
@@ -167,9 +154,13 @@
   if (NULL != p->path_delete)
     return;
 
-  LOG (GNUNET_ERROR_TYPE_INFO, "Invalidating path %p (%u)\n", p, p->length);
-  p->path_delete = GNUNET_SCHEDULER_add_delayed (GNUNET_TIME_UNIT_MINUTES,
-                                                 &path_destroy_delayed, p);
+  LOG (GNUNET_ERROR_TYPE_INFO,
+       "Invalidating path %p (%u)\n",
+       p,
+       p->length);
+  p->path_delete
+    = GNUNET_SCHEDULER_add_delayed (GNUNET_TIME_UNIT_MINUTES,
+                                   &path_destroy_delayed, p);
 }
 
 
@@ -242,8 +233,8 @@
  * @param p1 First path
  * @param p2 Second path
  *
- * @return GNUNET_YES if both paths are equivalent
- *         GNUNET_NO otherwise
+ * @return #GNUNET_YES if both paths are equivalent
+ *         #GNUNET_NO otherwise
  */
 int
 path_equivalent (const struct CadetPeerPath *p1,
@@ -293,7 +284,7 @@
  *
  * @param p the path to destroy
  *
- * @return GNUNET_OK on success
+ * @return #GNUNET_OK on success
  */
 int
 path_destroy (struct CadetPeerPath *p)
@@ -301,7 +292,10 @@
   if (NULL == p)
     return GNUNET_OK;
 
-  LOG (GNUNET_ERROR_TYPE_INFO, "destroying path %p (%u)\n", p, p->length);
+  LOG (GNUNET_ERROR_TYPE_INFO,
+       "destroying path %p (%u)\n",
+       p,
+       p->length);
   GNUNET_PEER_decrement_rcs (p->peers, p->length);
   GNUNET_free_non_null (p->peers);
   if (NULL != p->path_delete)
@@ -322,7 +316,8 @@
  *         0 if they are identical.
  */
 int
-path_cmp (const struct CadetPeerPath *p1, const struct CadetPeerPath *p2)
+path_cmp (const struct CadetPeerPath *p1,
+         const struct CadetPeerPath *p2)
 {
   if (p1->length > p2->length)
     return 1;
@@ -330,7 +325,9 @@
   if (p1->length < p2->length)
     return -1;
 
-  return memcmp (p1->peers, p2->peers, sizeof (GNUNET_PEER_Id) * p1->length);
+  return memcmp (p1->peers,
+                p2->peers,
+                sizeof (GNUNET_PEER_Id) * p1->length);
 }
 
 

Modified: gnunet/src/cadet/gnunet-cadet-profiler.c
===================================================================
--- gnunet/src/cadet/gnunet-cadet-profiler.c    2016-04-30 08:16:14 UTC (rev 
37101)
+++ gnunet/src/cadet/gnunet-cadet-profiler.c    2016-04-30 08:17:37 UTC (rev 
37102)
@@ -147,8 +147,13 @@
   /**
    * Task to do the next ping.
    */
-  struct GNUNET_SCHEDULER_Task * ping_task;
+  struct GNUNET_SCHEDULER_Task *ping_task;
 
+  /**
+   * NTR operation for the next ping.
+   */
+  struct GNUNET_CADET_TransmitHandle *ping_ntr;
+
   float mean[number_rounds];
   float var[number_rounds];
   unsigned int pongs[number_rounds];
@@ -179,7 +184,7 @@
 /**
  * Operation to get peer ids.
  */
-struct CadetPeer *peers;
+static struct CadetPeer *peers;
 
 /**
  * Peer ids counter.
@@ -207,19 +212,14 @@
 static struct GNUNET_CADET_TEST_Context *test_ctx;
 
 /**
- * Task called to shutdown test.
- */
-static struct GNUNET_SCHEDULER_Task * shutdown_handle;
-
-/**
  * Task called to disconnect peers, before shutdown.
  */
-static struct GNUNET_SCHEDULER_Task * disconnect_task;
+static struct GNUNET_SCHEDULER_Task *disconnect_task;
 
 /**
  * Task to perform tests
  */
-static struct GNUNET_SCHEDULER_Task * test_task;
+static struct GNUNET_SCHEDULER_Task *test_task;
 
 /**
  * Round number.
@@ -241,7 +241,12 @@
  */
 static int test_finished;
 
+/**
+ * Task running each round of the benchmark.
+ */
+static struct GNUNET_SCHEDULER_Task *round_task;
 
+
 /**
  * START THE TEST ITSELF, AS WE ARE CONNECTED TO THE CADET SERVICES.
  *
@@ -310,19 +315,6 @@
 
 
 /**
- * Shut down peergroup, clean up.
- *
- * @param cls Closure (unused).
- */
-static void
-shutdown_task (void *cls)
-{
-  GNUNET_log (GNUNET_ERROR_TYPE_INFO, "Ending test.\n");
-  shutdown_handle = NULL;
-}
-
-
-/**
  * Disconnect from cadet services af all peers, call shutdown.
  *
  * @param cls Closure (unused).
@@ -334,7 +326,8 @@
   unsigned int i;
 
   GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
-              "disconnecting cadet service, called from line %ld\n", line);
+              "disconnecting cadet service, called from line %ld\n",
+             line);
   disconnect_task = NULL;
   for (i = 0; i < peers_total; i++)
   {
@@ -346,28 +339,56 @@
 
     if (NULL != peers[i].ch)
     {
-      GNUNET_log (GNUNET_ERROR_TYPE_INFO, "%u: channel %p\n", i, peers[i].ch);
+      GNUNET_log (GNUNET_ERROR_TYPE_INFO,
+                 "%u: channel %p\n", i, peers[i].ch);
       GNUNET_CADET_channel_destroy (peers[i].ch);
     }
     if (NULL != peers[i].warmup_ch)
     {
-      GNUNET_log (GNUNET_ERROR_TYPE_INFO, "%u: warmup channel %p\n",
+      GNUNET_log (GNUNET_ERROR_TYPE_INFO,
+                 "%u: warmup channel %p\n",
                   i, peers[i].warmup_ch);
       GNUNET_CADET_channel_destroy (peers[i].warmup_ch);
     }
     if (NULL != peers[i].incoming_ch)
     {
-      GNUNET_log (GNUNET_ERROR_TYPE_INFO, "%u: incoming channel %p\n",
+      GNUNET_log (GNUNET_ERROR_TYPE_INFO,
+                 "%u: incoming channel %p\n",
                   i, peers[i].incoming_ch);
       GNUNET_CADET_channel_destroy (peers[i].incoming_ch);
     }
   }
   GNUNET_CADET_TEST_cleanup (test_ctx);
-  if (NULL != shutdown_handle)
+  GNUNET_SCHEDULER_shutdown ();
+}
+
+
+/**
+ * Shut down peergroup, clean up.
+ *
+ * @param cls Closure (unused).
+ */
+static void
+shutdown_task (void *cls)
+{
+  GNUNET_log (GNUNET_ERROR_TYPE_INFO,
+             "Ending test.\n");
+  if (NULL != disconnect_task)
   {
-    GNUNET_SCHEDULER_cancel (shutdown_handle);
+    GNUNET_SCHEDULER_cancel (disconnect_task);
+    disconnect_task = GNUNET_SCHEDULER_add_now (&disconnect_cadet_peers,
+                                               (void *) __LINE__);
   }
-  shutdown_handle = GNUNET_SCHEDULER_add_now (&shutdown_task, NULL);
+  if (NULL != round_task)
+  {
+    GNUNET_SCHEDULER_cancel (round_task);
+    round_task = NULL;
+  }
+  if (NULL != test_task)
+  {
+    GNUNET_SCHEDULER_cancel (test_task);
+    test_task = NULL;
+  }
 }
 
 
@@ -418,13 +439,16 @@
  * @param subsystem name of subsystem that created the statistic
  * @param name the name of the datum
  * @param value the current value
- * @param is_persistent GNUNET_YES if the value is persistent, GNUNET_NO if not
- * @return GNUNET_OK to continue, GNUNET_SYSERR to abort iteration
+ * @param is_persistent #GNUNET_YES if the value is persistent, #GNUNET_NO if 
not
+ * @return #GNUNET_OK to continue, #GNUNET_SYSERR to abort iteration
  */
 static int
-stats_iterator (void *cls, const struct GNUNET_TESTBED_Peer *peer,
-                const char *subsystem, const char *name,
-                uint64_t value, int is_persistent)
+stats_iterator (void *cls,
+               const struct GNUNET_TESTBED_Peer *peer,
+                const char *subsystem,
+               const char *name,
+                uint64_t value,
+               int is_persistent)
 {
   uint32_t i;
 
@@ -444,16 +468,13 @@
 static void
 collect_stats (void *cls)
 {
-  const struct GNUNET_SCHEDULER_TaskContext *tc;
-
-  tc = GNUNET_SCHEDULER_get_task_context ();
-  if ((GNUNET_SCHEDULER_REASON_SHUTDOWN & tc->reason) != 0)
-    return;
-
-  GNUNET_log (GNUNET_ERROR_TYPE_INFO, "Start collecting statistics...\n");
-  stats_op = GNUNET_TESTBED_get_statistics (peers_total, testbed_handles,
+  GNUNET_log (GNUNET_ERROR_TYPE_INFO,
+             "Start collecting statistics...\n");
+  stats_op = GNUNET_TESTBED_get_statistics (peers_total,
+                                           testbed_handles,
                                             NULL, NULL,
-                                            stats_iterator, stats_cont, NULL);
+                                            &stats_iterator,
+                                           &stats_cont, NULL);
 }
 
 
@@ -465,17 +486,12 @@
 static void
 finish_profiler (void *cls)
 {
-  const struct GNUNET_SCHEDULER_TaskContext *tc;
-
-  tc = GNUNET_SCHEDULER_get_task_context ();
-  if ((GNUNET_SCHEDULER_REASON_SHUTDOWN & tc->reason) != 0)
-    return;
-
   test_finished = GNUNET_YES;
-  show_end_data();
+  show_end_data ();
   GNUNET_SCHEDULER_add_now (&collect_stats, NULL);
 }
 
+
 /**
  * Set the total number of running peers.
  *
@@ -515,9 +531,15 @@
                 run ? "arting" : "opping", r, GNUNET_i2s (&peers[r].id));
 
     if (NULL != peers[r].ping_task)
+    {
       GNUNET_SCHEDULER_cancel (peers[r].ping_task);
-    peers[r].ping_task = NULL;
-
+      peers[r].ping_task = NULL;
+    }
+    if (NULL != peers[r].ping_ntr)
+    {
+      GNUNET_CADET_notify_transmit_ready_cancel (peers[r].ping_ntr);
+      peers[r].ping_ntr = NULL;
+    }
     peers[r].up = run;
 
     if (NULL != peers[r].ch)
@@ -547,12 +569,6 @@
 static void
 next_rnd (void *cls)
 {
-  const struct GNUNET_SCHEDULER_TaskContext *tc;
-
-  tc = GNUNET_SCHEDULER_get_task_context ();
-  if ((GNUNET_SCHEDULER_REASON_SHUTDOWN & tc->reason) != 0)
-    return;
-
   GNUNET_log (GNUNET_ERROR_TYPE_INFO, "ROUND %ld\n", current_round);
   if (0.0 == rounds[current_round])
   {
@@ -563,7 +579,9 @@
   adjust_running_peers (rounds[current_round] * peers_total);
   current_round++;
 
-  GNUNET_SCHEDULER_add_delayed (round_time, &next_rnd, NULL);
+  round_task = GNUNET_SCHEDULER_add_delayed (round_time,
+                                            &next_rnd,
+                                            NULL);
 }
 
 
@@ -616,21 +634,19 @@
 ping (void *cls)
 {
   struct CadetPeer *peer = cls;
-  const struct GNUNET_SCHEDULER_TaskContext *tc;
 
   peer->ping_task = NULL;
-  tc = GNUNET_SCHEDULER_get_task_context ();
-  if (0 != (GNUNET_SCHEDULER_REASON_SHUTDOWN & tc->reason)
-      || GNUNET_YES == test_finished)
+  if (GNUNET_YES == test_finished)
     return;
-
-  GNUNET_log (GNUNET_ERROR_TYPE_INFO, "%u -> %u (%u)\n",
-              get_index (peer), get_index (peer->dest), peer->data_sent);
-
-  GNUNET_CADET_notify_transmit_ready (peer->ch, GNUNET_NO,
-                                      GNUNET_TIME_UNIT_FOREVER_REL,
-                                      sizeof (struct CadetPingMessage),
-                                      &tmt_rdy_ping, peer);
+  GNUNET_log (GNUNET_ERROR_TYPE_INFO,
+             "%u -> %u (%u)\n",
+              get_index (peer),
+             get_index (peer->dest),
+             peer->data_sent);
+  peer->ping_ntr = GNUNET_CADET_notify_transmit_ready (peer->ch, GNUNET_NO,
+                                                      
GNUNET_TIME_UNIT_FOREVER_REL,
+                                                      sizeof (struct 
CadetPingMessage),
+                                                      &tmt_rdy_ping, peer);
 }
 
 /**
@@ -640,12 +656,13 @@
  * @param tc Task context.
  */
 static void
-pong (struct GNUNET_CADET_Channel *channel, const struct CadetPingMessage 
*ping)
+pong (struct GNUNET_CADET_Channel *channel,
+      const struct CadetPingMessage *ping)
 {
   struct CadetPingMessage *copy;
 
   copy = GNUNET_new (struct CadetPingMessage);
-  memcpy (copy, ping, sizeof (*ping));
+  *copy = *ping;
   GNUNET_CADET_notify_transmit_ready (channel, GNUNET_NO,
                                      GNUNET_TIME_UNIT_FOREVER_REL,
                                      sizeof (struct CadetPingMessage),
@@ -666,7 +683,9 @@
   struct CadetPeer *peer = (struct CadetPeer *) cls;
   struct CadetPingMessage *msg = buf;
 
-  GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "tmt_rdy called, filling buffer\n");
+  peer->ping_ntr = NULL;
+  GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
+             "tmt_rdy called, filling buffer\n");
   if (size < sizeof (struct CadetPingMessage) || NULL == buf)
   {
     GNUNET_break (GNUNET_YES == test_finished);
@@ -827,7 +846,8 @@
  *                   with the channel is stored
  */
 static void
-channel_cleaner (void *cls, const struct GNUNET_CADET_Channel *channel,
+channel_cleaner (void *cls,
+                const struct GNUNET_CADET_Channel *channel,
                  void *channel_ctx)
 {
   long n = (long) cls;
@@ -874,13 +894,8 @@
 {
   enum GNUNET_CADET_ChannelOption flags;
   unsigned long i;
-  const struct GNUNET_SCHEDULER_TaskContext *tc;
 
   test_task = NULL;
-  tc = GNUNET_SCHEDULER_get_task_context ();
-  if ((GNUNET_SCHEDULER_REASON_SHUTDOWN & tc->reason) != 0)
-    return;
-
   GNUNET_log (GNUNET_ERROR_TYPE_INFO, "Start profiler\n");
 
   flags = GNUNET_CADET_OPTION_DEFAULT;
@@ -909,7 +924,9 @@
                                                                 number_rounds 
+ 1),
                                   &disconnect_cadet_peers,
                                   (void *) __LINE__);
-  GNUNET_SCHEDULER_add_delayed (round_time, &next_rnd, NULL);
+  round_task = GNUNET_SCHEDULER_add_delayed (round_time,
+                                            &next_rnd,
+                                            NULL);
 }
 
 
@@ -939,6 +956,7 @@
   }
 }
 
+
 /**
  * Callback to be called when the requested peer information is available
  *
@@ -950,9 +968,9 @@
  */
 static void
 peer_id_cb (void *cls,
-       struct GNUNET_TESTBED_Operation *op,
-       const struct GNUNET_TESTBED_PeerInformation *pinfo,
-       const char *emsg)
+           struct GNUNET_TESTBED_Operation *op,
+           const struct GNUNET_TESTBED_PeerInformation *pinfo,
+           const char *emsg)
 {
   long n = (long) cls;
 
@@ -991,6 +1009,7 @@
                                             &start_test, NULL);
 }
 
+
 /**
  * test main: start test when all peers are connected
  *
@@ -1009,7 +1028,8 @@
 {
   unsigned long i;
 
-  GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "test main\n");
+  GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
+             "test main\n");
   test_ctx = ctx;
   GNUNET_assert (peers_total == num_peers);
   peers_running = num_peers;
@@ -1017,11 +1037,12 @@
   disconnect_task = GNUNET_SCHEDULER_add_delayed (SHORT_TIME,
                                                   &disconnect_cadet_peers,
                                                   (void *) __LINE__);
-  shutdown_handle = GNUNET_SCHEDULER_add_delayed (GNUNET_TIME_UNIT_FOREVER_REL,
-                                                  &shutdown_task, NULL);
+  GNUNET_SCHEDULER_add_shutdown (&shutdown_task, NULL);
   for (i = 0; i < peers_total; i++)
   {
-    GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "requesting id %ld\n", i);
+    GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
+               "requesting id %ld\n",
+               i);
     peers[i].up = GNUNET_YES;
     peers[i].cadet = cadetes[i];
     peers[i].op =
@@ -1047,14 +1068,22 @@
 
   if (4 > argc)
   {
-    fprintf (stderr, "usage: %s ROUND_TIME PEERS PINGS [DO_WARMUP]\n", 
argv[0]);
-    fprintf (stderr, "example: %s 30s 16 1 Y\n", argv[0]);
+    fprintf (stderr,
+            "usage: %s ROUND_TIME PEERS PINGS [DO_WARMUP]\n",
+            argv[0]);
+    fprintf (stderr,
+            "example: %s 30s 16 1 Y\n",
+            argv[0]);
     return 1;
   }
 
-  if (GNUNET_OK != GNUNET_STRINGS_fancy_time_to_relative (argv[1], 
&round_time))
+  if (GNUNET_OK !=
+      GNUNET_STRINGS_fancy_time_to_relative (argv[1],
+                                            &round_time))
   {
-    fprintf (stderr, "%s is not a valid time\n", argv[1]);
+    fprintf (stderr,
+            "%s is not a valid time\n",
+            argv[1]);
     return 1;
   }
 
@@ -1061,11 +1090,13 @@
   peers_total = atoll (argv[2]);
   if (2 > peers_total)
   {
-    fprintf (stderr, "%s peers is not valid (> 2)\n", argv[1]);
+    fprintf (stderr,
+            "%s peers is not valid (> 2)\n",
+            argv[1]);
     return 1;
   }
-  peers = GNUNET_malloc (sizeof (struct CadetPeer) * peers_total);
-
+  peers = GNUNET_new_array (peers_total,
+                           struct CadetPeer);
   peers_pinging = atoll (argv[3]);
 
   if (peers_total < 2 * peers_pinging)
@@ -1077,7 +1108,8 @@
 
   do_warmup = (5 > argc || argv[4][0] != 'N');
 
-  ids = GNUNET_CONTAINER_multipeermap_create (2 * peers_total, GNUNET_YES);
+  ids = GNUNET_CONTAINER_multipeermap_create (2 * peers_total,
+                                             GNUNET_YES);
   GNUNET_assert (NULL != ids);
   p_ids = 0;
   test_finished = GNUNET_NO;

Modified: gnunet/src/cadet/gnunet-cadet.c
===================================================================
--- gnunet/src/cadet/gnunet-cadet.c     2016-04-30 08:16:14 UTC (rev 37101)
+++ gnunet/src/cadet/gnunet-cadet.c     2016-04-30 08:17:37 UTC (rev 37102)
@@ -72,22 +72,22 @@
 /**
  * Request echo service
  */
-int echo;
+static int echo;
 
 /**
  * Request a debug dump
  */
-int dump;
+static int dump;
 
 /**
  * Time of last echo request.
  */
-struct GNUNET_TIME_Absolute echo_time;
+static struct GNUNET_TIME_Absolute echo_time;
 
 /**
  * Task for next echo request.
  */
-struct GNUNET_SCHEDULER_Task * echo_task;
+static struct GNUNET_SCHEDULER_Task *echo_task;
 
 /**
  * Peer to connect to.
@@ -102,9 +102,8 @@
 /**
  * Data pending in netcat mode.
  */
-size_t data_size;
+static size_t data_size;
 
-
 /**
  * Cadet handle.
  */
@@ -123,10 +122,19 @@
 /**
  * Shutdown task handle.
  */
-struct GNUNET_SCHEDULER_Task * sd;
+static struct GNUNET_SCHEDULER_Task *sd;
 
+/**
+ * Task for reading from stdin.
+ */
+static struct GNUNET_SCHEDULER_Task *rd_task;
 
+/**
+ * Task for main job.
+ */
+static struct GNUNET_SCHEDULER_Task *job;
 
+
 static void
 listen_stdio (void);
 
@@ -195,7 +203,8 @@
 static void
 shutdown_task (void *cls)
 {
-  GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Shutdown\n");
+  GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
+             "Shutdown\n");
   if (NULL != th)
   {
     GNUNET_CADET_notify_transmit_ready_cancel (th);
@@ -209,8 +218,23 @@
   if (NULL != mh)
   {
     GNUNET_CADET_disconnect (mh);
-        mh = NULL;
+    mh = NULL;
   }
+  if (NULL != rd_task)
+  {
+    GNUNET_SCHEDULER_cancel (rd_task);
+    rd_task = NULL;
+  }
+  if (NULL != echo_task)
+  {
+    GNUNET_SCHEDULER_cancel (echo_task);
+    echo_task = NULL;
+  }
+  if (NULL != job)
+  {
+    GNUNET_SCHEDULER_cancel (job);
+    job = NULL;
+  }
 }
 
 
@@ -227,7 +251,7 @@
  * @param buf where the callee should write the message
  * @return number of bytes written to buf
  */
-size_t
+static size_t
 data_ready (void *cls, size_t size, void *buf)
 {
   struct GNUNET_MessageHeader *msg;
@@ -271,14 +295,7 @@
 read_stdio (void *cls)
 {
   static char buf[60000];
-  const struct GNUNET_SCHEDULER_TaskContext *tc;
 
-  tc = GNUNET_SCHEDULER_get_task_context ();
-  if (0 != (tc->reason & GNUNET_SCHEDULER_REASON_SHUTDOWN))
-  {
-    return;
-  }
-
   data_size = read (0, buf, 60000);
   GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "stdio read %u bytes\n", data_size);
   if (data_size < 1)
@@ -305,10 +322,10 @@
 
   rs = GNUNET_NETWORK_fdset_create ();
   GNUNET_NETWORK_fdset_set_native (rs, 0);
-  GNUNET_SCHEDULER_add_select (GNUNET_SCHEDULER_PRIORITY_DEFAULT,
-                               GNUNET_TIME_UNIT_FOREVER_REL,
-                               rs, NULL,
-                               &read_stdio, NULL);
+  rd_task = GNUNET_SCHEDULER_add_select (GNUNET_SCHEDULER_PRIORITY_DEFAULT,
+                                        GNUNET_TIME_UNIT_FOREVER_REL,
+                                        rs, NULL,
+                                        &read_stdio, NULL);
   GNUNET_NETWORK_fdset_destroy (rs);
 }
 
@@ -408,12 +425,8 @@
 static void
 send_echo (void *cls)
 {
-  const struct GNUNET_SCHEDULER_TaskContext *tc;
-
-  tc = GNUNET_SCHEDULER_get_task_context ();
-  if (0 != (tc->reason & GNUNET_SCHEDULER_REASON_SHUTDOWN) || NULL == ch)
+  if (NULL == ch)
     return;
-
   GNUNET_assert (NULL == th);
   th = GNUNET_CADET_notify_transmit_ready (ch, GNUNET_NO,
                                            GNUNET_TIME_UNIT_FOREVER_REL,
@@ -432,7 +445,8 @@
 {
   GNUNET_CADET_request_dump (mh);
   GNUNET_SCHEDULER_cancel (sd);
-  GNUNET_SCHEDULER_add_delayed (GNUNET_TIME_UNIT_SECONDS, &shutdown_task, 
NULL);
+  GNUNET_SCHEDULER_add_delayed (GNUNET_TIME_UNIT_SECONDS,
+                               &shutdown_task, NULL);
 }
 
 
@@ -466,7 +480,7 @@
   if (GNUNET_NO == echo)
     listen_stdio ();
   else
-    GNUNET_SCHEDULER_add_now (send_echo, NULL);
+    echo_task = GNUNET_SCHEDULER_add_now (&send_echo, NULL);
 }
 
 
@@ -561,8 +575,11 @@
  *                  (0 = unknown, 1 = ourselves, 2 = neighbor)
  */
 static void
-peers_callback (void *cls, const struct GNUNET_PeerIdentity *peer,
-                int tunnel, unsigned int n_paths, unsigned int best_path)
+peers_callback (void *cls,
+               const struct GNUNET_PeerIdentity *peer,
+                int tunnel,
+               unsigned int n_paths,
+               unsigned int best_path)
 {
   if (NULL == peer)
   {
@@ -589,7 +606,7 @@
  *              Each path starts with the local peer.
  *              Each path ends with the destination peer (given in @c peer).
  */
-void
+static void
 peer_callback (void *cls,
                const struct GNUNET_PeerIdentity *peer,
                int tunnel,
@@ -629,7 +646,7 @@
  * @param estate Encryption state.
  * @param cstate Connectivity state.
  */
-void
+static void
 tunnels_callback (void *cls,
                   const struct GNUNET_PeerIdentity *peer,
                   unsigned int channels,
@@ -665,7 +682,7 @@
  * @param estate Encryption status.
  * @param cstate Connectivity status.
  */
-void
+static void
 tunnel_callback (void *cls,
                  const struct GNUNET_PeerIdentity *peer,
                  unsigned int n_channels,
@@ -691,7 +708,7 @@
   }
   if (GNUNET_YES != monitor_mode)
   {
-    GNUNET_SCHEDULER_shutdown();
+    GNUNET_SCHEDULER_shutdown ();
   }
   return;
 }
@@ -705,14 +722,7 @@
 static void
 get_peers (void *cls)
 {
-  const struct GNUNET_SCHEDULER_TaskContext *tc;
-
-  tc = GNUNET_SCHEDULER_get_task_context ();
-  if (0 != (tc->reason & GNUNET_SCHEDULER_REASON_SHUTDOWN))
-  {
-    GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Shutdown\n");
-    return;
-  }
+  job = NULL;
   GNUNET_CADET_get_peers (mh, &peers_callback, NULL);
 }
 
@@ -727,6 +737,7 @@
 {
   struct GNUNET_PeerIdentity pid;
 
+  job = NULL;
   if (GNUNET_OK !=
       GNUNET_CRYPTO_eddsa_public_key_from_string (peer_id,
                                                   strlen (peer_id),
@@ -741,6 +752,7 @@
   GNUNET_CADET_get_peer (mh, &pid, peer_callback, NULL);
 }
 
+
 /**
  * Call CADET's meta API, get all tunnels known to a peer.
  *
@@ -749,14 +761,7 @@
 static void
 get_tunnels (void *cls)
 {
-  const struct GNUNET_SCHEDULER_TaskContext *tc;
-
-  tc = GNUNET_SCHEDULER_get_task_context ();
-  if (0 != (tc->reason & GNUNET_SCHEDULER_REASON_SHUTDOWN))
-  {
-    GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Shutdown\n");
-    return;
-  }
+  job = NULL;
   GNUNET_CADET_get_tunnels (mh, &tunnels_callback, NULL);
 }
 
@@ -779,7 +784,7 @@
     fprintf (stderr,
              _("Invalid tunnel owner `%s'\n"),
              tunnel_id);
-    GNUNET_SCHEDULER_shutdown();
+    GNUNET_SCHEDULER_shutdown ();
     return;
   }
   GNUNET_CADET_get_tunnel (mh, &pid, tunnel_callback, NULL);
@@ -794,7 +799,8 @@
 static void
 show_channel (void *cls)
 {
-
+  job = NULL;
+  GNUNET_break (0);
 }
 
 
@@ -806,7 +812,8 @@
 static void
 show_connection (void *cls)
 {
-
+  job = NULL;
+  GNUNET_break (0);
 }
 
 
@@ -819,7 +826,9 @@
  * @param cfg configuration
  */
 static void
-run (void *cls, char *const *args, const char *cfgfile,
+run (void *cls,
+     char *const *args,
+     const char *cfgfile,
      const struct GNUNET_CONFIGURATION_Handle *cfg)
 {
   GNUNET_CADET_InboundChannelNotificationHandler *newch = NULL;
@@ -871,32 +880,32 @@
   else if (NULL != peer_id)
   {
     GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Show peer\n");
-    GNUNET_SCHEDULER_add_now (&show_peer, NULL);
+    job = GNUNET_SCHEDULER_add_now (&show_peer, NULL);
   }
   else if (NULL != tunnel_id)
   {
     GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Show tunnel\n");
-    GNUNET_SCHEDULER_add_now (&show_tunnel, NULL);
+    job = GNUNET_SCHEDULER_add_now (&show_tunnel, NULL);
   }
   else if (NULL != channel_id)
   {
     GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Show channel\n");
-    GNUNET_SCHEDULER_add_now (&show_channel, NULL);
+    job = GNUNET_SCHEDULER_add_now (&show_channel, NULL);
   }
   else if (NULL != conn_id)
   {
     GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Show connection\n");
-    GNUNET_SCHEDULER_add_now (&show_connection, NULL);
+    job = GNUNET_SCHEDULER_add_now (&show_connection, NULL);
   }
   else if (GNUNET_YES == request_peers)
   {
     GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Show all peers\n");
-    GNUNET_SCHEDULER_add_now (&get_peers, NULL);
+    job = GNUNET_SCHEDULER_add_now (&get_peers, NULL);
   }
   else if (GNUNET_YES == request_tunnels)
   {
     GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Show all tunnels\n");
-    GNUNET_SCHEDULER_add_now (&get_tunnels, NULL);
+    job = GNUNET_SCHEDULER_add_now (&get_tunnels, NULL);
   }
   else
   {
@@ -913,11 +922,9 @@
                             ports);
   GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Done\n");
   if (NULL == mh)
-    GNUNET_SCHEDULER_add_now (shutdown_task, NULL);
+    GNUNET_SCHEDULER_add_now (&shutdown_task, NULL);
   else
-    sd = GNUNET_SCHEDULER_add_delayed (GNUNET_TIME_UNIT_FOREVER_REL,
-                                       shutdown_task, NULL);
-
+    sd = GNUNET_SCHEDULER_add_shutdown (&shutdown_task, NULL);
 }
 
 

Modified: gnunet/src/cadet/gnunet-service-cadet.c
===================================================================
--- gnunet/src/cadet/gnunet-service-cadet.c     2016-04-30 08:16:14 UTC (rev 
37101)
+++ gnunet/src/cadet/gnunet-service-cadet.c     2016-04-30 08:17:37 UTC (rev 
37102)
@@ -135,8 +135,8 @@
   stats = GNUNET_STATISTICS_create ("cadet", c);
 
   /* Scheduled the task to clean up when shutdown is called */
-  GNUNET_SCHEDULER_add_delayed (GNUNET_TIME_UNIT_FOREVER_REL, &shutdown_task,
-                                NULL);
+  GNUNET_SCHEDULER_add_shutdown (&shutdown_task,
+                                NULL);
   GNUNET_log (GNUNET_ERROR_TYPE_INFO, "reading key\n");
   my_private_key = GNUNET_CRYPTO_eddsa_key_create_from_configuration (c);
   GNUNET_assert (NULL != my_private_key);

Modified: gnunet/src/cadet/gnunet-service-cadet_channel.c
===================================================================
--- gnunet/src/cadet/gnunet-service-cadet_channel.c     2016-04-30 08:16:14 UTC 
(rev 37101)
+++ gnunet/src/cadet/gnunet-service-cadet_channel.c     2016-04-30 08:17:37 UTC 
(rev 37102)
@@ -730,13 +730,8 @@
   struct CadetChannel *ch;
   struct GNUNET_CADET_Data *payload;
   int fwd;
-  const struct GNUNET_SCHEDULER_TaskContext *tc;
 
   rel->retry_task = NULL;
-  tc = GNUNET_SCHEDULER_get_task_context ();
-  if (0 != (tc->reason & GNUNET_SCHEDULER_REASON_SHUTDOWN))
-    return;
-
   ch = rel->ch;
   copy = rel->head_sent;
   if (NULL == copy)
@@ -765,15 +760,11 @@
 channel_recreate (void *cls)
 {
   struct CadetChannelReliability *rel = cls;
-  const struct GNUNET_SCHEDULER_TaskContext *tc;
 
   rel->retry_task = NULL;
-  tc = GNUNET_SCHEDULER_get_task_context ();
-  if (0 != (tc->reason & GNUNET_SCHEDULER_REASON_SHUTDOWN))
-    return;
-
   LOG (GNUNET_ERROR_TYPE_DEBUG, "RE-CREATE\n");
-  GNUNET_STATISTICS_update (stats, "# data retransmitted", 1, GNUNET_NO);
+  GNUNET_STATISTICS_update (stats,
+                           "# data retransmitted", 1, GNUNET_NO);
 
   if (rel == rel->ch->root_rel)
   {
@@ -787,7 +778,6 @@
   {
     GNUNET_break (0);
   }
-
 }
 
 

Modified: gnunet/src/cadet/gnunet-service-cadet_connection.c
===================================================================
--- gnunet/src/cadet/gnunet-service-cadet_connection.c  2016-04-30 08:16:14 UTC 
(rev 37101)
+++ gnunet/src/cadet/gnunet-service-cadet_connection.c  2016-04-30 08:17:37 UTC 
(rev 37102)
@@ -1192,11 +1192,10 @@
  *
  * @param c Connection to keep alive.
  * @param fwd Direction.
- * @param shutdown Are we shutting down? (Don't send traffic)
- *                 Non-zero value for true, not necessarily GNUNET_YES.
  */
 static void
-connection_keepalive (struct CadetConnection *c, int fwd, int shutdown)
+connection_keepalive (struct CadetConnection *c,
+                     int fwd)
 {
   GCC_check_connections ();
   LOG (GNUNET_ERROR_TYPE_DEBUG,
@@ -1207,10 +1206,6 @@
     c->fwd_maintenance_task = NULL;
   else
     c->bck_maintenance_task = NULL;
-
-  if (GNUNET_NO != shutdown)
-    return;
-
   connection_maintain (c, fwd);
   GCC_check_connections ();
   /* Next execution will be scheduled by message_sent or _maintain*/
@@ -1225,13 +1220,11 @@
 static void
 connection_fwd_keepalive (void *cls)
 {
-  const struct GNUNET_SCHEDULER_TaskContext *tc;
+  struct CadetConnection *c = cls;
 
   GCC_check_connections ();
-  tc = GNUNET_SCHEDULER_get_task_context ();
-  connection_keepalive ((struct CadetConnection *) cls,
-                        GNUNET_YES,
-                        tc->reason & GNUNET_SCHEDULER_REASON_SHUTDOWN);
+  connection_keepalive (c,
+                        GNUNET_YES);
   GCC_check_connections ();
 }
 
@@ -1244,13 +1237,11 @@
 static void
 connection_bck_keepalive (void *cls)
 {
-  const struct GNUNET_SCHEDULER_TaskContext *tc;
+  struct CadetConnection *c = cls;
 
   GCC_check_connections ();
-  tc = GNUNET_SCHEDULER_get_task_context ();
-  connection_keepalive ((struct CadetConnection *) cls,
-                        GNUNET_NO,
-                        tc->reason & GNUNET_SCHEDULER_REASON_SHUTDOWN);
+  connection_keepalive (c,
+                        GNUNET_NO);
   GCC_check_connections ();
 }
 
@@ -1461,16 +1452,9 @@
   struct GNUNET_CADET_Poll msg;
   struct CadetConnection *c;
   int fwd;
-  const struct GNUNET_SCHEDULER_TaskContext *tc;
 
   fc->poll_task = NULL;
   GCC_check_connections ();
-  tc = GNUNET_SCHEDULER_get_task_context ();
-  if (0 != (tc->reason & GNUNET_SCHEDULER_REASON_SHUTDOWN))
-  {
-    return;
-  }
-
   c = fc->c;
   fwd = fc == &c->fwd_fc;
   LOG (GNUNET_ERROR_TYPE_DEBUG, "Polling connection %s %s\n",
@@ -1592,12 +1576,8 @@
 connection_fwd_timeout (void *cls)
 {
   struct CadetConnection *c = cls;
-  const struct GNUNET_SCHEDULER_TaskContext *tc;
 
   c->fwd_maintenance_task = NULL;
-  tc = GNUNET_SCHEDULER_get_task_context ();
-  if (0 != (tc->reason & GNUNET_SCHEDULER_REASON_SHUTDOWN))
-    return;
   GCC_check_connections ();
   connection_timeout (c, GNUNET_YES);
   GCC_check_connections ();
@@ -1614,12 +1594,8 @@
 connection_bck_timeout (void *cls)
 {
   struct CadetConnection *c = cls;
-  const struct GNUNET_SCHEDULER_TaskContext *tc;
 
   c->bck_maintenance_task = NULL;
-  tc = GNUNET_SCHEDULER_get_task_context ();
-  if (0 != (tc->reason & GNUNET_SCHEDULER_REASON_SHUTDOWN))
-    return;
   GCC_check_connections ();
   connection_timeout (c, GNUNET_NO);
   GCC_check_connections ();
@@ -1767,13 +1743,8 @@
 check_duplicates (void *cls)
 {
   struct CadetConnection *c = cls;
-  const struct GNUNET_SCHEDULER_TaskContext *tc;
 
   c->check_duplicates_task = NULL;
-  tc = GNUNET_SCHEDULER_get_task_context ();
-  if (0 != (tc->reason & GNUNET_SCHEDULER_REASON_SHUTDOWN))
-    return;
-
   if (GNUNET_YES == does_connection_exist (c))
   {
     GCT_debug (c->t, GNUNET_ERROR_TYPE_DEBUG);
@@ -1783,7 +1754,6 @@
 }
 
 
-
 /**
  * Wait for enough time to let any dead connections time out and check for
  * any remaining duplicates.
@@ -1797,7 +1767,6 @@
 
   if (NULL != c->check_duplicates_task)
     return;
-
   delay = GNUNET_TIME_relative_multiply (refresh_connection_time, 5);
   c->check_duplicates_task = GNUNET_SCHEDULER_add_delayed (delay,
                                                            &check_duplicates,
@@ -1805,7 +1774,6 @@
 }
 
 
-
 /**
  * Add the connection to the list of both neighbors.
  *
@@ -1903,7 +1871,8 @@
  * @param disconnected Peer that disconnected.
  */
 static void
-invalidate_paths (struct CadetConnection *c, struct CadetPeer *disconnected)
+invalidate_paths (struct CadetConnection *c,
+                 struct CadetPeer *disconnected)
 {
   struct CadetPeer *peer;
   unsigned int i;

Modified: gnunet/src/cadet/gnunet-service-cadet_dht.c
===================================================================
--- gnunet/src/cadet/gnunet-service-cadet_dht.c 2016-04-30 08:16:14 UTC (rev 
37101)
+++ gnunet/src/cadet/gnunet-service-cadet_dht.c 2016-04-30 08:17:37 UTC (rev 
37102)
@@ -215,14 +215,8 @@
   size_t size;
   struct GNUNET_TIME_Absolute expiration;
   struct GNUNET_TIME_Relative retry_time;
-  const struct GNUNET_SCHEDULER_TaskContext *tc;
 
-  tc = GNUNET_SCHEDULER_get_task_context ();
-  if (0 != (tc->reason & GNUNET_SCHEDULER_REASON_SHUTDOWN))
-  {
-    announce_id_task = NULL;
-    return;
-  }
+  announce_id_task = NULL;
   LOG (GNUNET_ERROR_TYPE_DEBUG, "Announce ID\n");
   /* TODO
    * - Set data expiration in function of X

Modified: gnunet/src/cadet/gnunet-service-cadet_peer.c
===================================================================
--- gnunet/src/cadet/gnunet-service-cadet_peer.c        2016-04-30 08:16:14 UTC 
(rev 37101)
+++ gnunet/src/cadet/gnunet-service-cadet_peer.c        2016-04-30 08:17:37 UTC 
(rev 37102)
@@ -387,7 +387,6 @@
  * Remove the direct path to the peer.
  *
  * @param peer Peer to remove the direct path from.
- *
  */
 static struct CadetPeerPath *
 pop_direct_path (struct CadetPeer *peer)
@@ -398,7 +397,9 @@
   {
     if (2 >= iter->length)
     {
-      GNUNET_CONTAINER_DLL_remove (peer->path_head, peer->path_tail, iter);
+      GNUNET_CONTAINER_DLL_remove (peer->path_head,
+                                  peer->path_tail,
+                                  iter);
       return iter;
     }
   }
@@ -750,7 +751,8 @@
        "destroying peer %s\n",
        GNUNET_i2s (&id));
 
-  if (GNUNET_YES != GNUNET_CONTAINER_multipeermap_remove (peers, &id, peer))
+  if (GNUNET_YES !=
+      GNUNET_CONTAINER_multipeermap_remove (peers, &id, peer))
   {
     GNUNET_break (0);
     LOG (GNUNET_ERROR_TYPE_WARNING, " peer not in peermap!!\n");
@@ -846,12 +848,8 @@
 delayed_search (void *cls)
 {
   struct CadetPeer *peer = cls;
-  const struct GNUNET_SCHEDULER_TaskContext *tc;
 
   peer->search_delayed = NULL;
-  tc = GNUNET_SCHEDULER_get_task_context ();
-  if (0 != (GNUNET_SCHEDULER_REASON_SHUTDOWN & tc->reason))
-    return;
   GCC_check_connections ();
   GCP_start_search (peer);
   GCC_check_connections ();
@@ -1934,8 +1932,9 @@
 
 
 /**
- * Retrieve the CadetPeer stucture associated with the peer. Optionally create
- * one and insert it in the appropriate structures if the peer is not known 
yet.
+ * Retrieve the CadetPeer stucture associated with the
+ * peer. Optionally create one and insert it in the appropriate
+ * structures if the peer is not known yet.
  *
  * @param peer Short identity of the peer.
  * @param create #GNUNET_YES if a new peer should be created if unknown.
@@ -2223,7 +2222,8 @@
       }
     }
   }
-  GNUNET_CONTAINER_DLL_insert_tail (peer->path_head, peer->path_tail,
+  GNUNET_CONTAINER_DLL_insert_tail (peer->path_head,
+                                   peer->path_tail,
                                     path);
   LOG (GNUNET_ERROR_TYPE_DEBUG, "  added last\n");
 
@@ -2300,7 +2300,8 @@
  * @param path Path to remove. Is always destroyed .
  */
 void
-GCP_remove_path (struct CadetPeer *peer, struct CadetPeerPath *path)
+GCP_remove_path (struct CadetPeer *peer,
+                struct CadetPeerPath *path)
 {
   struct CadetPeerPath *iter;
   struct CadetPeerPath *next;
@@ -2309,7 +2310,8 @@
   GNUNET_assert (myid == path->peers[0]);
   GNUNET_assert (peer->id == path->peers[path->length - 1]);
 
-  LOG (GNUNET_ERROR_TYPE_INFO, "Removing path %p (%u) from %s\n",
+  LOG (GNUNET_ERROR_TYPE_INFO,
+       "Removing path %p (%u) from %s\n",
        path, path->length, GCP_2s (peer));
 
   for (iter = peer->path_head; NULL != iter; iter = next)
@@ -2317,7 +2319,9 @@
     next = iter->next;
     if (0 == path_cmp (path, iter))
     {
-      GNUNET_CONTAINER_DLL_remove (peer->path_head, peer->path_tail, iter);
+      GNUNET_CONTAINER_DLL_remove (peer->path_head,
+                                  peer->path_tail,
+                                  iter);
       if (iter != path)
         path_destroy (iter);
     }
@@ -2512,7 +2516,8 @@
  * @param hello Hello message.
  */
 void
-GCP_set_hello (struct CadetPeer *peer, const struct GNUNET_HELLO_Message 
*hello)
+GCP_set_hello (struct CadetPeer *peer,
+              const struct GNUNET_HELLO_Message *hello)
 {
   struct GNUNET_HELLO_Message *old;
   size_t size;

Modified: gnunet/src/cadet/gnunet-service-cadet_tunnel.c
===================================================================
--- gnunet/src/cadet/gnunet-service-cadet_tunnel.c      2016-04-30 08:16:14 UTC 
(rev 37101)
+++ gnunet/src/cadet/gnunet-service-cadet_tunnel.c      2016-04-30 08:17:37 UTC 
(rev 37102)
@@ -1735,16 +1735,8 @@
 finish_kx (void *cls)
 {
   struct CadetTunnel *t = cls;
-  const struct GNUNET_SCHEDULER_TaskContext *tc;
 
   LOG (GNUNET_ERROR_TYPE_INFO, "finish KX for %s\n", GCT_2s (t));
-  tc = GNUNET_SCHEDULER_get_task_context ();
-  if (0 != (tc->reason & GNUNET_SCHEDULER_REASON_SHUTDOWN))
-  {
-    LOG (GNUNET_ERROR_TYPE_INFO, "  shutdown\n");
-    return;
-  }
-
   GNUNET_free (t->kx_ctx);
   t->kx_ctx = NULL;
 }
@@ -1767,7 +1759,7 @@
 
   if (is_key_null (&t->kx_ctx->e_key_old))
   {
-    t->kx_ctx->finish_task = GNUNET_SCHEDULER_add_now (finish_kx, t);
+    t->kx_ctx->finish_task = GNUNET_SCHEDULER_add_now (&finish_kx, t);
     return;
   }
 
@@ -1774,7 +1766,8 @@
   delay = GNUNET_TIME_relative_divide (rekey_period, 4);
   delay = GNUNET_TIME_relative_min (delay, GNUNET_TIME_UNIT_MINUTES);
 
-  t->kx_ctx->finish_task = GNUNET_SCHEDULER_add_delayed (delay, finish_kx, t);
+  t->kx_ctx->finish_task = GNUNET_SCHEDULER_add_delayed (delay,
+                                                        &finish_kx, t);
 }
 
 
@@ -2103,13 +2096,8 @@
 ax_kx_resend (void *cls)
 {
   struct CadetTunnel *t = cls;
-  const struct GNUNET_SCHEDULER_TaskContext *tc;
 
   t->rekey_task = NULL;
-  tc = GNUNET_SCHEDULER_get_task_context ();
-  if (0 != (tc->reason & GNUNET_SCHEDULER_REASON_SHUTDOWN))
-    return;
-
   if (CADET_TUNNEL_KEY_OK == t->estate)
   {
     /* Should have been canceled on estate change */
@@ -2333,14 +2321,9 @@
 rekey_tunnel (void *cls)
 {
   struct CadetTunnel *t = cls;
-  const struct GNUNET_SCHEDULER_TaskContext *tc;
 
   t->rekey_task = NULL;
   LOG (GNUNET_ERROR_TYPE_INFO, "Re-key Tunnel %s\n", GCT_2s (t));
-  tc = GNUNET_SCHEDULER_get_task_context ();
-  if (NULL != tc && 0 != (GNUNET_SCHEDULER_REASON_SHUTDOWN & tc->reason))
-    return;
-
   GNUNET_assert (NULL != t->kx_ctx);
   struct GNUNET_TIME_Relative duration;
 
@@ -2453,13 +2436,8 @@
 {
   struct GNUNET_TIME_Absolute time;
   long n;
-  const struct GNUNET_SCHEDULER_TaskContext *tc;
 
   rekey_task = NULL;
-  tc = GNUNET_SCHEDULER_get_task_context ();
-  if (0 != (GNUNET_SCHEDULER_REASON_SHUTDOWN & tc->reason))
-    return;
-
   GNUNET_free_non_null (otr_ephemeral_key);
   otr_ephemeral_key = GNUNET_CRYPTO_ecdhe_key_create ();
 
@@ -2501,7 +2479,8 @@
 {
   struct CadetTunnel *t = value;
 
-  LOG (GNUNET_ERROR_TYPE_DEBUG, "GCT_shutdown destroying tunnel at %p\n", t);
+  LOG (GNUNET_ERROR_TYPE_DEBUG,
+       "GCT_shutdown destroying tunnel at %p\n", t);
   GCT_destroy (t);
   return GNUNET_YES;
 }
@@ -3472,13 +3451,8 @@
 trim_connections (void *cls)
 {
   struct CadetTunnel *t = cls;
-  const struct GNUNET_SCHEDULER_TaskContext *tc;
 
   t->trim_connections_task = NULL;
-  tc = GNUNET_SCHEDULER_get_task_context ();
-  if (0 != (tc->reason & GNUNET_SCHEDULER_REASON_SHUTDOWN))
-    return;
-
   if (GCT_count_connections (t) > 2 * CONNECTIONS_PER_TUNNEL)
   {
     struct CadetTConnection *iter;
@@ -3624,8 +3598,11 @@
 
   aux = GNUNET_new (struct CadetTChannel);
   aux->ch = ch;
-  LOG (GNUNET_ERROR_TYPE_DEBUG, " adding %p to %p\n", aux, t->channel_head);
-  GNUNET_CONTAINER_DLL_insert_tail (t->channel_head, t->channel_tail, aux);
+  LOG (GNUNET_ERROR_TYPE_DEBUG,
+       " adding %p to %p\n", aux, t->channel_head);
+  GNUNET_CONTAINER_DLL_insert_tail (t->channel_head,
+                                   t->channel_tail,
+                                   aux);
 
   if (NULL != t->destroy_task)
   {
@@ -3653,7 +3630,9 @@
     if (aux->ch == ch)
     {
       LOG (GNUNET_ERROR_TYPE_DEBUG, " found! %s\n", GCCH_2s (ch));
-      GNUNET_CONTAINER_DLL_remove (t->channel_head, t->channel_tail, aux);
+      GNUNET_CONTAINER_DLL_remove (t->channel_head,
+                                  t->channel_tail,
+                                  aux);
       GNUNET_free (aux);
       return;
     }
@@ -3701,20 +3680,12 @@
 {
   struct CadetTunnel *t = cls;
   struct CadetTConnection *iter;
-  const struct GNUNET_SCHEDULER_TaskContext *tc;
 
-  LOG (GNUNET_ERROR_TYPE_DEBUG, "delayed destroying tunnel %p\n", t);
-  tc = GNUNET_SCHEDULER_get_task_context ();
-  if (0 != (GNUNET_SCHEDULER_REASON_SHUTDOWN & tc->reason))
-  {
-    LOG (GNUNET_ERROR_TYPE_WARNING,
-         "Not destroying tunnel, due to shutdown. "
-         "Tunnel at %p should have been freed by GCT_shutdown\n", t);
-    return;
-  }
   t->destroy_task = NULL;
+  LOG (GNUNET_ERROR_TYPE_DEBUG,
+       "delayed destroying tunnel %p\n",
+       t);
   t->cstate = CADET_TUNNEL_SHUTDOWN;
-
   for (iter = t->connection_head; NULL != iter; iter = iter->next)
   {
     GCC_send_destroy (iter->c);
@@ -3800,8 +3771,9 @@
   if (NULL == t)
     return;
 
-  LOG (GNUNET_ERROR_TYPE_DEBUG, "destroying tunnel %s\n", GCP_2s (t->peer));
-
+  LOG (GNUNET_ERROR_TYPE_DEBUG,
+       "destroying tunnel %s\n",
+       GCP_2s (t->peer));
   GNUNET_break (GNUNET_YES ==
                 GNUNET_CONTAINER_multipeermap_remove (tunnels,
                                                       GCP_get_id (t->peer), 
t));
@@ -3850,7 +3822,9 @@
 
   if (NULL != t->destroy_task)
   {
-    LOG (GNUNET_ERROR_TYPE_DEBUG, "cancelling dest: %p\n", t->destroy_task);
+    LOG (GNUNET_ERROR_TYPE_DEBUG,
+        "cancelling dest: %p\n",
+        t->destroy_task);
     GNUNET_SCHEDULER_cancel (t->destroy_task);
     t->destroy_task = NULL;
   }

Modified: gnunet/src/cadet/test_cadet.c
===================================================================
--- gnunet/src/cadet/test_cadet.c       2016-04-30 08:16:14 UTC (rev 37101)
+++ gnunet/src/cadet/test_cadet.c       2016-04-30 08:17:37 UTC (rev 37102)
@@ -144,17 +144,17 @@
 /**
  * Task called to disconnect peers.
  */
-static struct GNUNET_SCHEDULER_Task * disconnect_task;
+static struct GNUNET_SCHEDULER_Task *disconnect_task;
 
 /**
  * Task To perform tests
  */
-static struct GNUNET_SCHEDULER_Task * test_task;
+static struct GNUNET_SCHEDULER_Task *test_task;
 
 /**
- * Task called to shutdown test.
+ * Task runnining #data_task().
  */
-static struct GNUNET_SCHEDULER_Task * shutdown_handle;
+static struct GNUNET_SCHEDULER_Task *data_job;
 
 /**
  * Cadet handle for the root peer
@@ -230,6 +230,7 @@
     return peers_requested - 1;
 }
 
+
 /**
  * Show the results of the test (banwidth acheived) and log them to GAUGER
  */
@@ -256,20 +257,6 @@
 
 
 /**
- * Shut down peergroup, clean up.
- *
- * @param cls Closure (unused).
- * @param tc Task Context.
- */
-static void
-shutdown_task (void *cls)
-{
-  GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Ending test.\n");
-  shutdown_handle = NULL;
-}
-
-
-/**
  * Disconnect from cadet services af all peers, call shutdown.
  *
  * @param cls Closure (line number from which termination was requested).
@@ -280,18 +267,11 @@
 {
   long line = (long) cls;
   unsigned int i;
-  const struct GNUNET_SCHEDULER_TaskContext *tc;
 
-  tc = GNUNET_SCHEDULER_get_task_context ();
-  if ((GNUNET_SCHEDULER_REASON_SHUTDOWN & tc->reason) != 0)
-    GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
-                "disconnecting cadet peers due to SHUTDOWN! called from %ld\n",
-                line);
-  else
-    GNUNET_log (GNUNET_ERROR_TYPE_INFO,
-                "disconnecting cadet service of peers, called from line %ld\n",
-                line);
   disconnect_task = NULL;
+  GNUNET_log (GNUNET_ERROR_TYPE_INFO,
+             "disconnecting cadet service of peers, called from line %ld\n",
+             line);
   for (i = 0; i < 2; i++)
   {
     GNUNET_TESTBED_operation_done (t_op[i]);
@@ -317,15 +297,39 @@
     incoming_ch = NULL;
   }
   GNUNET_CADET_TEST_cleanup (test_ctx);
-  if (NULL != shutdown_handle)
+  GNUNET_SCHEDULER_shutdown ();
+}
+
+
+/**
+ * Shut down peergroup, clean up.
+ *
+ * @param cls Closure (unused).
+ * @param tc Task Context.
+ */
+static void
+shutdown_task (void *cls)
+{
+  GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Ending test.\n");
+  if (NULL != data_job)
   {
-    GNUNET_SCHEDULER_cancel (shutdown_handle);
+    GNUNET_SCHEDULER_cancel (data_job);
+    data_job = NULL;
   }
-  shutdown_handle = GNUNET_SCHEDULER_add_now (&shutdown_task, NULL);
+  if (NULL != test_task)
+  {
+    GNUNET_SCHEDULER_cancel (test_task);
+    test_task = NULL;
+  }
+  if (NULL != disconnect_task)
+  {
+    GNUNET_SCHEDULER_cancel (disconnect_task);
+    disconnect_task = GNUNET_SCHEDULER_add_now (&disconnect_cadet_peers,
+                                               (void *) __LINE__);
+  }
 }
 
 
-
 /**
  * Stats callback. Finish the stats testbed operation and when all stats have
  * been iterated, shutdown the test.
@@ -346,8 +350,8 @@
 
   if (NULL != disconnect_task)
     GNUNET_SCHEDULER_cancel (disconnect_task);
-  disconnect_task = GNUNET_SCHEDULER_add_now (&disconnect_cadet_peers, cls);
-
+  disconnect_task = GNUNET_SCHEDULER_add_now (&disconnect_cadet_peers,
+                                             cls);
 }
 
 
@@ -393,19 +397,11 @@
 gather_stats_and_exit (void *cls)
 {
   long l = (long) cls;
-  const struct GNUNET_SCHEDULER_TaskContext *tc;
 
   disconnect_task = NULL;
-  GNUNET_log (GNUNET_ERROR_TYPE_INFO, "gathering statistics from line %d\n", 
l);
-  tc = GNUNET_SCHEDULER_get_task_context ();
-  if ((GNUNET_SCHEDULER_REASON_SHUTDOWN & tc->reason) != 0)
-  {
-    disconnect_task = GNUNET_SCHEDULER_add_now (&disconnect_cadet_peers,
-                                                (void *) __LINE__);
-    return;
-  }
-
-
+  GNUNET_log (GNUNET_ERROR_TYPE_INFO,
+             "gathering statistics from line %d\n",
+             l);
   if (NULL != ch)
   {
     if (NULL != th)
@@ -463,14 +459,10 @@
 {
   struct GNUNET_CADET_Channel *channel;
   static struct GNUNET_CADET_TransmitHandle **pth;
-  const struct GNUNET_SCHEDULER_TaskContext *tc;
   long src;
 
+  data_job = NULL;
   GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Data task\n");
-  tc = GNUNET_SCHEDULER_get_task_context ();
-  if ((GNUNET_SCHEDULER_REASON_SHUTDOWN & tc->reason) != 0)
-    return;
-
   if (GNUNET_YES == test_backwards)
   {
     channel = incoming_ch;
@@ -499,17 +491,16 @@
     if (0 == i)
     {
       GNUNET_log (GNUNET_ERROR_TYPE_WARNING, "  in 1 ms\n");
-      GNUNET_SCHEDULER_add_delayed (GNUNET_TIME_UNIT_MILLISECONDS,
-                                    &data_task, (void *) 1L);
+      data_job = GNUNET_SCHEDULER_add_delayed (GNUNET_TIME_UNIT_MILLISECONDS,
+                                              &data_task, (void *) 1L);
     }
     else
     {
       i++;
       GNUNET_log (GNUNET_ERROR_TYPE_WARNING, "in %u ms\n", i);
-      GNUNET_SCHEDULER_add_delayed (GNUNET_TIME_relative_multiply (
-                                        GNUNET_TIME_UNIT_MILLISECONDS,
-                                        i),
-                                    &data_task, (void *) i);
+      data_job = GNUNET_SCHEDULER_add_delayed (GNUNET_TIME_relative_multiply 
(GNUNET_TIME_UNIT_MILLISECONDS,
+                                                                             
i),
+                                              &data_task, (void *) i);
     }
   }
 }
@@ -574,7 +565,7 @@
     {
       GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, " Scheduling message %d\n",
                   counter + 1);
-      GNUNET_SCHEDULER_add_now (&data_task, NULL);
+      data_job = GNUNET_SCHEDULER_add_now (&data_task, NULL);
     }
   }
 
@@ -661,7 +652,7 @@
     if (SPEED == test)
     {
       GNUNET_assert (peers_requested - 1 == client);
-      GNUNET_SCHEDULER_add_now (&data_task, NULL);
+      data_job = GNUNET_SCHEDULER_add_now (&data_task, NULL);
       return GNUNET_OK;
     }
   }
@@ -842,17 +833,14 @@
 do_test (void *cls)
 {
   enum GNUNET_CADET_ChannelOption flags;
-  const struct GNUNET_SCHEDULER_TaskContext *tc;
 
-  tc = GNUNET_SCHEDULER_get_task_context ();
-  if ((GNUNET_SCHEDULER_REASON_SHUTDOWN & tc->reason) != 0)
-    return;
-
+  test_task = NULL;
   GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "do_test\n");
 
   if (NULL != disconnect_task)
   {
     GNUNET_SCHEDULER_cancel (disconnect_task);
+    disconnect_task = NULL;
   }
 
   flags = GNUNET_CADET_OPTION_DEFAULT;
@@ -880,6 +868,7 @@
                                            &tmt_rdy, (void *) 0L);
 }
 
+
 /**
  * Callback to be called when the requested peer information is available
  *
@@ -942,8 +931,7 @@
   disconnect_task = GNUNET_SCHEDULER_add_delayed (SHORT_TIME,
                                                   &disconnect_cadet_peers,
                                                   (void *) __LINE__);
-  shutdown_handle = GNUNET_SCHEDULER_add_delayed (GNUNET_TIME_UNIT_FOREVER_REL,
-                                                  &shutdown_task, NULL);
+  GNUNET_SCHEDULER_add_shutdown (&shutdown_task, NULL);
   t_op[0] = GNUNET_TESTBED_peer_get_information (peers[0],
                                                  GNUNET_TESTBED_PIT_IDENTITY,
                                                  &pi_cb, (void *) 0L);

Modified: gnunet/src/cadet/test_cadet_local.c
===================================================================
--- gnunet/src/cadet/test_cadet_local.c 2016-04-30 08:16:14 UTC (rev 37101)
+++ gnunet/src/cadet/test_cadet_local.c 2016-04-30 08:17:37 UTC (rev 37102)
@@ -42,9 +42,9 @@
 
 static int got_data = GNUNET_NO;
 
-static struct GNUNET_SCHEDULER_Task * abort_task;
+static struct GNUNET_SCHEDULER_Task *abort_task;
 
-static struct GNUNET_SCHEDULER_Task * shutdown_task;
+static struct GNUNET_SCHEDULER_Task *connect_task;
 
 static struct GNUNET_CADET_TransmitHandle *mth;
 
@@ -68,20 +68,29 @@
   if (NULL != abort_task)
   {
     GNUNET_SCHEDULER_cancel (abort_task);
+    abort_task = NULL;
   }
+  if (NULL != connect_task)
+  {
+    GNUNET_SCHEDULER_cancel (connect_task);
+    connect_task = NULL;
+  }
   if (NULL != ch)
   {
     GNUNET_CADET_channel_destroy (ch);
+    ch = NULL;
   }
   GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Disconnect client 1\n");
   if (NULL != cadet_peer_1)
   {
     GNUNET_CADET_disconnect (cadet_peer_1);
+    cadet_peer_1 = NULL;
   }
   GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Disconnect client 2\n");
   if (NULL != cadet_peer_2)
   {
     GNUNET_CADET_disconnect (cadet_peer_2);
+    cadet_peer_2 = NULL;
   }
 }
 
@@ -95,12 +104,7 @@
   GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "ABORT\n");
   result = GNUNET_SYSERR;
   abort_task = NULL;
-  if (NULL != shutdown_task)
-  {
-    GNUNET_SCHEDULER_cancel (shutdown_task);
-    shutdown_task = NULL;
-  }
-  do_shutdown (cls);
+  GNUNET_SCHEDULER_shutdown ();
 }
 
 
@@ -120,14 +124,10 @@
                void **channel_ctx,
                const struct GNUNET_MessageHeader *message)
 {
-  GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Data callback! Shutting down.\n");
+  GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
+             "Data callback! Shutting down.\n");
   got_data = GNUNET_YES;
-  if (NULL != shutdown_task)
-    GNUNET_SCHEDULER_cancel (shutdown_task);
-  shutdown_task =
-    GNUNET_SCHEDULER_add_delayed (GNUNET_TIME_UNIT_SECONDS,
-                                  &do_shutdown,
-                                  NULL);
+  GNUNET_SCHEDULER_shutdown ();
   GNUNET_CADET_receive_done (channel);
   return GNUNET_OK;
 }
@@ -254,12 +254,8 @@
 do_connect (void *cls)
 {
   struct GNUNET_PeerIdentity id;
-  const struct GNUNET_SCHEDULER_TaskContext *tc;
 
-  tc = GNUNET_SCHEDULER_get_task_context ();
-  if (NULL != tc && 0 != (GNUNET_SCHEDULER_REASON_SHUTDOWN & tc->reason))
-    return;
-
+  connect_task = NULL;
   GNUNET_TESTING_peer_get_identity (me, &id);
   GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "CONNECT BY PORT\n");
   ch = GNUNET_CADET_channel_create (cadet_peer_1, NULL, &id, 1,
@@ -286,9 +282,11 @@
   static uint32_t ports[] = {1, 0};
 
   me = peer;
+  GNUNET_SCHEDULER_add_shutdown (&do_shutdown, NULL);
   abort_task =
       GNUNET_SCHEDULER_add_delayed (GNUNET_TIME_relative_multiply
-                                    (GNUNET_TIME_UNIT_SECONDS, 15), &do_abort,
+                                    (GNUNET_TIME_UNIT_SECONDS, 15),
+                                   &do_abort,
                                     NULL);
   cadet_peer_1 = GNUNET_CADET_connect (cfg,       /* configuration */
                                      (void *) 1L,       /* cls */
@@ -305,14 +303,12 @@
                                      ports);     /* ports offered */
   if (NULL == cadet_peer_1 || NULL == cadet_peer_2)
   {
-    GNUNET_log (GNUNET_ERROR_TYPE_ERROR, "Couldn't connect to cadet :(\n");
+    GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
+               "Couldn't connect to cadet :(\n");
     result = GNUNET_SYSERR;
+    GNUNET_SCHEDULER_shutdown ();
     return;
   }
-  else
-  {
-    GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "YAY! CONNECTED TO CADET :D\n");
-  }
   GNUNET_SCHEDULER_add_delayed (GNUNET_TIME_relative_multiply (
                                   GNUNET_TIME_UNIT_SECONDS,
                                   2),

Modified: gnunet/src/cadet/test_cadet_single.c
===================================================================
--- gnunet/src/cadet/test_cadet_single.c        2016-04-30 08:16:14 UTC (rev 
37101)
+++ gnunet/src/cadet/test_cadet_single.c        2016-04-30 08:17:37 UTC (rev 
37102)
@@ -43,9 +43,9 @@
 
 static int result;
 
-static struct GNUNET_SCHEDULER_Task * abort_task;
+static struct GNUNET_SCHEDULER_Task *abort_task;
 
-static struct GNUNET_SCHEDULER_Task * shutdown_task;
+static struct GNUNET_SCHEDULER_Task *connect_task;
 
 static unsigned int repetition;
 
@@ -65,10 +65,17 @@
   if (NULL != abort_task)
   {
     GNUNET_SCHEDULER_cancel (abort_task);
+    abort_task = NULL;
   }
+  if (NULL != connect_task)
+  {
+    GNUNET_SCHEDULER_cancel (connect_task);
+    connect_task = NULL;
+  }
   if (NULL != ch1)
   {
     GNUNET_CADET_channel_destroy (ch1);
+    ch1 = NULL;
   }
   GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Disconnect client 1\n");
   GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Disconnect client 2\n");
@@ -93,25 +100,10 @@
   GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "ABORT\n");
   result = GNUNET_SYSERR;
   abort_task = NULL;
-  if (NULL != shutdown_task)
-  {
-    GNUNET_SCHEDULER_cancel (shutdown_task);
-    shutdown_task = NULL;
-  }
-  do_shutdown (cls);
+  GNUNET_SCHEDULER_shutdown ();
 }
 
 
-static void
-finish (void)
-{
-  if (NULL != shutdown_task)
-    GNUNET_SCHEDULER_cancel (shutdown_task);
-  shutdown_task = GNUNET_SCHEDULER_add_delayed (GNUNET_TIME_UNIT_SECONDS,
-                                                &do_shutdown, NULL);
-}
-
-
 /**
  * Function is called whenever a message is received.
  *
@@ -202,7 +194,7 @@
     ch2 = NULL;
     GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "everything fine! finishing!\n");
     result = GNUNET_OK;
-    finish ();
+    GNUNET_SCHEDULER_shutdown ();
   }
 }
 
@@ -253,12 +245,8 @@
 {
   struct GNUNET_PeerIdentity id;
   size_t size = sizeof (struct GNUNET_MessageHeader) + DATA_SIZE;
-  const struct GNUNET_SCHEDULER_TaskContext *tc;
 
-  tc = GNUNET_SCHEDULER_get_task_context ();
-  if ((GNUNET_SCHEDULER_REASON_SHUTDOWN & tc->reason) != 0)
-    return;
-
+  connect_task = NULL;
   GNUNET_TESTING_peer_get_identity (me, &id);
   GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "CONNECT BY PORT\n");
   ch1 = GNUNET_CADET_channel_create (cadet, NULL, &id, 1,
@@ -284,6 +272,7 @@
   static uint32_t ports[] = {1, 0};
 
   me = peer;
+  GNUNET_SCHEDULER_add_shutdown (&do_shutdown, NULL);
   abort_task =
       GNUNET_SCHEDULER_add_delayed (GNUNET_TIME_relative_multiply
                                     (GNUNET_TIME_UNIT_SECONDS, 15), &do_abort,
@@ -301,11 +290,10 @@
     result = GNUNET_SYSERR;
     return;
   }
-  else
-  {
-    GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "YAY! CONNECTED TO CADET :D\n");
-  }
-  GNUNET_SCHEDULER_add_delayed (GNUNET_TIME_UNIT_SECONDS, &do_connect, NULL);
+  connect_task
+    = GNUNET_SCHEDULER_add_delayed (GNUNET_TIME_UNIT_SECONDS,
+                                   &do_connect,
+                                   NULL);
 }
 
 

Modified: gnunet/src/consensus/gnunet-service-consensus.c
===================================================================
--- gnunet/src/consensus/gnunet-service-consensus.c     2016-04-30 08:16:14 UTC 
(rev 37101)
+++ gnunet/src/consensus/gnunet-service-consensus.c     2016-04-30 08:17:37 UTC 
(rev 37102)
@@ -3231,7 +3231,7 @@
   }
   statistics = GNUNET_STATISTICS_create ("consensus", cfg);
   GNUNET_SERVER_add_handlers (server, server_handlers);
-  GNUNET_SCHEDULER_add_delayed (GNUNET_TIME_UNIT_FOREVER_REL, &shutdown_task, 
NULL);
+  GNUNET_SCHEDULER_add_shutdown (&shutdown_task, NULL);
   GNUNET_SERVER_disconnect_notify (server, handle_client_disconnect, NULL);
   GNUNET_log (GNUNET_ERROR_TYPE_INFO, "consensus running\n");
 }

Modified: gnunet/src/consensus/test_consensus_api.c
===================================================================
--- gnunet/src/consensus/test_consensus_api.c   2016-04-30 08:16:14 UTC (rev 
37101)
+++ gnunet/src/consensus/test_consensus_api.c   2016-04-30 08:17:37 UTC (rev 
37102)
@@ -92,11 +92,8 @@
   GNUNET_log_setup ("test_consensus_api",
                     "INFO",
                     NULL);
+  GNUNET_SCHEDULER_add_shutdown (&on_shutdown, NULL);
 
-  GNUNET_log (GNUNET_ERROR_TYPE_INFO, "testing consensus api\n");
-
-  GNUNET_SCHEDULER_add_delayed (GNUNET_TIME_UNIT_FOREVER_REL, &on_shutdown, 
NULL);
-
   GNUNET_CRYPTO_hash (str, strlen (str), &session_id);
   consensus = GNUNET_CONSENSUS_create (cfg, 0, NULL, &session_id,
       GNUNET_TIME_relative_to_absolute (GNUNET_TIME_UNIT_SECONDS),
@@ -112,10 +109,7 @@
 int
 main (int argc, char **argv)
 {
-  int ret;
-
-  ret = GNUNET_TESTING_peer_run ("test_consensus_api",
-                                 "test_consensus.conf",
-                                 &run, NULL);
-  return ret;
+  return GNUNET_TESTING_peer_run ("test_consensus_api",
+                                 "test_consensus.conf",
+                                 &run, NULL);
 }

Modified: gnunet/src/conversation/gnunet-conversation-test.c
===================================================================
--- gnunet/src/conversation/gnunet-conversation-test.c  2016-04-30 08:16:14 UTC 
(rev 37101)
+++ gnunet/src/conversation/gnunet-conversation-test.c  2016-04-30 08:17:37 UTC 
(rev 37102)
@@ -204,9 +204,8 @@
   switch_task = GNUNET_SCHEDULER_add_delayed (TIMEOUT,
                                              &switch_to_speaker,
                                              NULL);
-  st = GNUNET_SCHEDULER_add_delayed (GNUNET_TIME_UNIT_FOREVER_REL,
-                                    &do_shutdown,
-                                    NULL);
+  st = GNUNET_SCHEDULER_add_shutdown (&do_shutdown,
+                                     NULL);
   fprintf (stderr,
           _("We will now be recording you for %s. After that time, the 
recording will be played back to you..."),
           GNUNET_STRINGS_relative_time_to_string (TIMEOUT, GNUNET_YES));

Modified: gnunet/src/conversation/gnunet-conversation.c
===================================================================
--- gnunet/src/conversation/gnunet-conversation.c       2016-04-30 08:16:14 UTC 
(rev 37101)
+++ gnunet/src/conversation/gnunet-conversation.c       2016-04-30 08:17:37 UTC 
(rev 37102)
@@ -1249,8 +1249,8 @@
   handle_cmd_task =
     GNUNET_SCHEDULER_add_with_priority (GNUNET_SCHEDULER_PRIORITY_UI,
                                        &handle_command, NULL);
-  GNUNET_SCHEDULER_add_delayed (GNUNET_TIME_UNIT_FOREVER_REL, &do_stop_task,
-                               NULL);
+  GNUNET_SCHEDULER_add_shutdown (&do_stop_task,
+                                NULL);
 }
 
 

Modified: gnunet/src/conversation/gnunet-service-conversation.c
===================================================================
--- gnunet/src/conversation/gnunet-service-conversation.c       2016-04-30 
08:16:14 UTC (rev 37101)
+++ gnunet/src/conversation/gnunet-service-conversation.c       2016-04-30 
08:17:37 UTC (rev 37102)
@@ -1574,10 +1574,11 @@
   }
   nc = GNUNET_SERVER_notification_context_create (server, 16);
   GNUNET_SERVER_add_handlers (server, server_handlers);
-  GNUNET_SERVER_disconnect_notify (server, &handle_client_disconnect, NULL);
-  GNUNET_SCHEDULER_add_delayed (GNUNET_TIME_UNIT_FOREVER_REL,
-                                &do_shutdown,
-                               NULL);
+  GNUNET_SERVER_disconnect_notify (server,
+                                  &handle_client_disconnect,
+                                  NULL);
+  GNUNET_SCHEDULER_add_shutdown (&do_shutdown,
+                                NULL);
 }
 
 

Modified: gnunet/src/core/gnunet-core.c
===================================================================
--- gnunet/src/core/gnunet-core.c       2016-04-30 08:16:14 UTC (rev 37101)
+++ gnunet/src/core/gnunet-core.c       2016-04-30 08:17:37 UTC (rev 37102)
@@ -155,8 +155,7 @@
              _("Failed to connect to CORE service!\n"));
     return;
   }
-  GNUNET_SCHEDULER_add_delayed (GNUNET_TIME_UNIT_FOREVER_REL,
-                                &shutdown_task, NULL);
+  GNUNET_SCHEDULER_add_shutdown (&shutdown_task, NULL);
 }
 
 

Modified: gnunet/src/core/gnunet-service-core.c
===================================================================
--- gnunet/src/core/gnunet-service-core.c       2016-04-30 08:16:14 UTC (rev 
37101)
+++ gnunet/src/core/gnunet-service-core.c       2016-04-30 08:17:37 UTC (rev 
37102)
@@ -106,9 +106,8 @@
     return;
   }
   GSC_stats = GNUNET_STATISTICS_create ("core", GSC_cfg);
-  GNUNET_SCHEDULER_add_delayed (GNUNET_TIME_UNIT_FOREVER_REL,
-                                &shutdown_task,
-                                NULL);
+  GNUNET_SCHEDULER_add_shutdown (&shutdown_task,
+                                NULL);
   GNUNET_SERVER_suspend (server);
   GSC_TYPEMAP_init ();
   pk = GNUNET_CRYPTO_eddsa_key_create_from_file (keyfile);

Modified: gnunet/src/core/gnunet-service-core_kx.c
===================================================================
--- gnunet/src/core/gnunet-service-core_kx.c    2016-04-30 08:16:14 UTC (rev 
37101)
+++ gnunet/src/core/gnunet-service-core_kx.c    2016-04-30 08:17:37 UTC (rev 
37102)
@@ -745,9 +745,10 @@
   {
     /* peer with "higher" identity starts a delayed  KX, if the "lower" peer
      * does not start a KX since he sees no reasons to do so  */
-    kx->retry_set_key_task = GNUNET_SCHEDULER_add_delayed 
(GNUNET_TIME_UNIT_SECONDS,
-                                                           &set_key_retry_task,
-                                                           kx);
+    kx->retry_set_key_task
+      = GNUNET_SCHEDULER_add_delayed (GNUNET_TIME_UNIT_SECONDS,
+                                     &set_key_retry_task,
+                                     kx);
   }
   return kx;
 }

Modified: gnunet/src/core/test_core_api_mq.c
===================================================================
--- gnunet/src/core/test_core_api_mq.c  2016-04-30 08:16:14 UTC (rev 37101)
+++ gnunet/src/core/test_core_api_mq.c  2016-04-30 08:17:37 UTC (rev 37102)
@@ -29,15 +29,15 @@
 /**
  * Has the test been successful?
  */
-int result;
+static int result;
 
-unsigned int num_received;
+static unsigned int num_received;
 
-struct GNUNET_CORE_Handle *core;
+static struct GNUNET_CORE_Handle *core;
 
-struct GNUNET_MQ_Handle *mq;
+static struct GNUNET_MQ_Handle *mq;
 
-struct GNUNET_PeerIdentity myself;
+static struct GNUNET_PeerIdentity myself;
 
 
 static void
@@ -55,15 +55,19 @@
 
 
 static void
-connect_cb (void *cls, const struct GNUNET_PeerIdentity *peer)
+connect_cb (void *cls,
+           const struct GNUNET_PeerIdentity *peer)
 {
-  GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Connected to peer %s.\n",
+  GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
+             "Connected to peer %s.\n",
               GNUNET_i2s (peer));
   if (0 == memcmp (peer, &myself, sizeof (struct GNUNET_PeerIdentity)))
   {
     unsigned int i;
     struct GNUNET_MQ_Envelope *ev;
-    GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Queueing messages.\n");
+
+    GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
+               "Queueing messages.\n");
     for (i = 0; i < NUM_MSG; i++)
     {
       ev = GNUNET_MQ_msg_header (GNUNET_MESSAGE_TYPE_TEST);
@@ -78,7 +82,9 @@
              const struct GNUNET_PeerIdentity *other,
              const struct GNUNET_MessageHeader *message)
 {
-  GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Got test message %d\n", num_received);
+  GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
+             "Got test message %d\n",
+             num_received);
   num_received++;
   if (NUM_MSG == num_received)
   {
@@ -98,7 +104,8 @@
 static void
 shutdown_task (void *cls)
 {
-  GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Shutting down\n");
+  GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
+             "Shutting down\n");
   GNUNET_MQ_destroy (mq);
   GNUNET_CORE_disconnect (core);
 }
@@ -129,9 +136,10 @@
     GNUNET_assert (0);
     return;
   }
-  GNUNET_SCHEDULER_add_delayed (GNUNET_TIME_UNIT_FOREVER_REL, &shutdown_task, 
NULL);
+  GNUNET_SCHEDULER_add_shutdown (&shutdown_task, NULL);
 }
 
+
 int
 main (int argc, char *argv1[])
 {

Modified: gnunet/src/core/test_core_quota_compliance.c
===================================================================
--- gnunet/src/core/test_core_quota_compliance.c        2016-04-30 08:16:14 UTC 
(rev 37101)
+++ gnunet/src/core/test_core_quota_compliance.c        2016-04-30 08:17:37 UTC 
(rev 37102)
@@ -163,13 +163,9 @@
 static void
 terminate_task_error (void *cls)
 {
-  const struct GNUNET_SCHEDULER_TaskContext *tc;
-
   err_task = NULL;
-  tc = GNUNET_SCHEDULER_get_task_context ();
-  if (0 != (tc->reason & GNUNET_SCHEDULER_REASON_SHUTDOWN))
-    GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
-                "Testcase failed!\n");
+  GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
+             "Testcase failed!\n");
   terminate_peer (&p1);
   terminate_peer (&p2);
   //GNUNET_break (0);
@@ -301,7 +297,6 @@
 */
   GNUNET_SCHEDULER_cancel (err_task);
   err_task = GNUNET_SCHEDULER_add_now (&terminate_task, NULL);
-
 }
 
 
@@ -357,7 +352,6 @@
 }
 
 
-
 static void
 connect_notify (void *cls, const struct GNUNET_PeerIdentity *peer)
 {
@@ -375,8 +369,7 @@
     GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
                 "Asking core (1) for transmission to peer `%4s'\n",
                 GNUNET_i2s (&p2.id));
-    if (err_task != NULL)
-      GNUNET_SCHEDULER_cancel (err_task);
+    GNUNET_SCHEDULER_cancel (err_task);
     err_task =
         GNUNET_SCHEDULER_add_delayed (TIMEOUT, &terminate_task_error, NULL);
     start_time = GNUNET_TIME_absolute_get ();

Modified: gnunet/src/curl/Makefile.am
===================================================================
--- gnunet/src/curl/Makefile.am 2016-04-30 08:16:14 UTC (rev 37101)
+++ gnunet/src/curl/Makefile.am 2016-04-30 08:17:37 UTC (rev 37102)
@@ -17,6 +17,7 @@
 libgnunetcurl_la_LIBADD = \
   $(top_builddir)/src/util/libgnunetutil.la \
   -ljansson \
+  -lcurl \
   $(XLIB)
 
 #check_PROGRAMS = \

Modified: gnunet/src/datastore/gnunet-datastore.c
===================================================================
--- gnunet/src/datastore/gnunet-datastore.c     2016-04-30 08:16:14 UTC (rev 
37101)
+++ gnunet/src/datastore/gnunet-datastore.c     2016-04-30 08:17:37 UTC (rev 
37102)
@@ -224,8 +224,7 @@
     ret = 1;
     return;
   }
-  GNUNET_SCHEDULER_add_delayed (GNUNET_TIME_UNIT_FOREVER_REL,
-                               &do_shutdown, NULL);
+  GNUNET_SCHEDULER_add_shutdown (&do_shutdown, NULL);
   do_get ();
 }
 

Modified: gnunet/src/datastore/gnunet-service-datastore.c
===================================================================
--- gnunet/src/datastore/gnunet-service-datastore.c     2016-04-30 08:16:14 UTC 
(rev 37101)
+++ gnunet/src/datastore/gnunet-service-datastore.c     2016-04-30 08:17:37 UTC 
(rev 37102)
@@ -391,7 +391,9 @@
 delete_expired (void *cls)
 {
   expired_kill_task = NULL;
-  plugin->api->get_expiration (plugin->api->cls, &expired_processor, NULL);
+  plugin->api->get_expiration (plugin->api->cls,
+                              &expired_processor,
+                              NULL);
 }
 
 
@@ -1819,9 +1821,8 @@
   GNUNET_SERVER_disconnect_notify (server,
                                    &cleanup_reservations,
                                    NULL);
-  GNUNET_SCHEDULER_add_delayed (GNUNET_TIME_UNIT_FOREVER_REL,
-                                &cleaning_task,
-                                NULL);
+  GNUNET_SCHEDULER_add_shutdown (&cleaning_task,
+                                NULL);
 }
 
 

Modified: gnunet/src/datastore/perf_datastore_api.c
===================================================================
--- gnunet/src/datastore/perf_datastore_api.c   2016-04-30 08:16:14 UTC (rev 
37101)
+++ gnunet/src/datastore/perf_datastore_api.c   2016-04-30 08:17:37 UTC (rev 
37102)
@@ -351,11 +351,7 @@
   static struct GNUNET_HashCode key;
   static char data[65536];
   char gstr[128];
-  const struct GNUNET_SCHEDULER_TaskContext *tc;
 
-  tc = GNUNET_SCHEDULER_get_task_context ();
-  if (0 != (tc->reason & GNUNET_SCHEDULER_REASON_SHUTDOWN))
-    crc->phase = RP_ERROR;
   ok = (int) crc->phase;
   switch (crc->phase)
   {

Modified: gnunet/src/datastore/perf_plugin_datastore.c
===================================================================
--- gnunet/src/datastore/perf_plugin_datastore.c        2016-04-30 08:16:14 UTC 
(rev 37101)
+++ gnunet/src/datastore/perf_plugin_datastore.c        2016-04-30 08:17:37 UTC 
(rev 37102)
@@ -133,6 +133,7 @@
   GNUNET_SCHEDULER_add_now (&test, crc);
 }
 
+
 static void
 do_put (struct CpsRunContext *crc)
 {
@@ -195,9 +196,14 @@
 
 
 static int
-iterate_zeros (void *cls, const struct GNUNET_HashCode * key, uint32_t size,
-               const void *data, enum GNUNET_BLOCK_Type type, uint32_t 
priority,
-               uint32_t anonymity, struct GNUNET_TIME_Absolute expiration,
+iterate_zeros (void *cls,
+              const struct GNUNET_HashCode *key,
+              uint32_t size,
+               const void *data,
+              enum GNUNET_BLOCK_Type type,
+              uint32_t priority,
+               uint32_t anonymity,
+              struct GNUNET_TIME_Absolute expiration,
                uint64_t uid)
 {
   struct CpsRunContext *crc = cls;
@@ -246,10 +252,15 @@
 
 
 static int
-expiration_get (void *cls, const struct GNUNET_HashCode * key, uint32_t size,
-                const void *data, enum GNUNET_BLOCK_Type type,
-                uint32_t priority, uint32_t anonymity,
-                struct GNUNET_TIME_Absolute expiration, uint64_t uid)
+expiration_get (void *cls,
+               const struct GNUNET_HashCode *key,
+               uint32_t size,
+                const void *data,
+               enum GNUNET_BLOCK_Type type,
+                uint32_t priority,
+               uint32_t anonymity,
+                struct GNUNET_TIME_Absolute expiration,
+               uint64_t uid)
 {
   struct CpsRunContext *crc = cls;
   int i;
@@ -293,10 +304,15 @@
 
 
 static int
-replication_get (void *cls, const struct GNUNET_HashCode * key, uint32_t size,
-                 const void *data, enum GNUNET_BLOCK_Type type,
-                 uint32_t priority, uint32_t anonymity,
-                 struct GNUNET_TIME_Absolute expiration, uint64_t uid)
+replication_get (void *cls,
+                const struct GNUNET_HashCode *key,
+                uint32_t size,
+                 const void *data,
+                enum GNUNET_BLOCK_Type type,
+                 uint32_t priority,
+                uint32_t anonymity,
+                 struct GNUNET_TIME_Absolute expiration,
+                uint64_t uid)
 {
   struct CpsRunContext *crc = cls;
   int i;
@@ -388,14 +404,7 @@
 test (void *cls)
 {
   struct CpsRunContext *crc = cls;
-  const struct GNUNET_SCHEDULER_TaskContext *tc;
 
-  tc = GNUNET_SCHEDULER_get_task_context ();
-  if (0 != (tc->reason & GNUNET_SCHEDULER_REASON_SHUTDOWN))
-  {
-    GNUNET_break (0);
-    crc->phase = RP_ERROR;
-  }
   GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
              "In phase %d, iteration %u\n", crc->phase, crc->cnt);
   switch (crc->phase)

Modified: gnunet/src/datastore/test_plugin_datastore.c
===================================================================
--- gnunet/src/datastore/test_plugin_datastore.c        2016-04-30 08:16:14 UTC 
(rev 37101)
+++ gnunet/src/datastore/test_plugin_datastore.c        2016-04-30 08:17:37 UTC 
(rev 37102)
@@ -267,14 +267,7 @@
 {
   struct CpsRunContext *crc = cls;
   struct GNUNET_HashCode key;
-  const struct GNUNET_SCHEDULER_TaskContext *tc;
 
-  tc = GNUNET_SCHEDULER_get_task_context ();
-  if (0 != (tc->reason & GNUNET_SCHEDULER_REASON_SHUTDOWN))
-  {
-    GNUNET_log (GNUNET_ERROR_TYPE_WARNING, "Test aborted.\n");
-    crc->phase = RP_ERROR;
-  }
   GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
              "In phase %d, iteration %u\n", crc->phase, crc->cnt);
   switch (crc->phase)

Modified: gnunet/src/dht/gnunet-dht-get.c
===================================================================
--- gnunet/src/dht/gnunet-dht-get.c     2016-04-30 08:16:14 UTC (rev 37101)
+++ gnunet/src/dht/gnunet-dht-get.c     2016-04-30 08:17:37 UTC (rev 37102)
@@ -82,9 +82,14 @@
  */
 static int ret;
 
+/**
+ * Task scheduled to handle timeout.
+ */
+static struct GNUNET_SCHEDULER_Task *tt;
 
+
 /**
- * Task run to clean up on timeout.
+ * Task run to clean up on shutdown.
  *
  * @param cls unused
  */
@@ -101,10 +106,28 @@
     GNUNET_DHT_disconnect (dht_handle);
     dht_handle = NULL;
   }
+  if (NULL != tt)
+  {
+    GNUNET_SCHEDULER_cancel (tt);
+    tt = NULL;
+  }
 }
 
 
 /**
+ * Task run on timeout. Triggers shutdown.
+ *
+ * @param cls unused
+ */
+static void
+timeout_task (void *cls)
+{
+  tt = NULL;
+  GNUNET_SCHEDULER_shutdown ();
+}
+
+
+/**
  * Iterator called on each result obtained for a DHT
  * operation that expects a reply
  *
@@ -170,8 +193,9 @@
   GNUNET_CRYPTO_hash (query_key, strlen (query_key), &key);
   if (verbose)
     FPRINTF (stderr, "%s `%s' \n",  _("Issueing DHT GET with key"), 
GNUNET_h2s_full (&key));
-  GNUNET_SCHEDULER_add_delayed (timeout_request,
-                               &cleanup_task, NULL);
+  GNUNET_SCHEDULER_add_shutdown (&cleanup_task, NULL);
+  tt = GNUNET_SCHEDULER_add_delayed (timeout_request,
+                                    &timeout_task, NULL);
   get_handle =
       GNUNET_DHT_get_start (dht_handle, query_type, &key, replication,
                             (demultixplex_everywhere) ? 
GNUNET_DHT_RO_DEMULTIPLEX_EVERYWHERE : GNUNET_DHT_RO_NONE,

Modified: gnunet/src/dht/gnunet-dht-monitor.c
===================================================================
--- gnunet/src/dht/gnunet-dht-monitor.c 2016-04-30 08:16:14 UTC (rev 37101)
+++ gnunet/src/dht/gnunet-dht-monitor.c 2016-04-30 08:17:37 UTC (rev 37102)
@@ -71,7 +71,12 @@
  */
 static int ret;
 
+/**
+ * Task scheduled to handle timeout.
+ */
+static struct GNUNET_SCHEDULER_Task *tt;
 
+
 /**
  * Stop monitoring request and start shutdown
  *
@@ -92,10 +97,29 @@
     GNUNET_DHT_disconnect (dht_handle);
     dht_handle = NULL;
   }
+  if (NULL != tt)
+  {
+    GNUNET_SCHEDULER_cancel (tt);
+    tt = NULL;
+  }
 }
 
 
 /**
+ * We hit a timeout. Stop monitoring request and start shutdown
+ *
+ * @param cls closure (unused)
+ */
+static void
+timeout_task (void *cls)
+{
+  tt = NULL;
+  GNUNET_SCHEDULER_shutdown ();
+}
+
+
+
+/**
  * Callback called on each GET request going through the DHT.
  *
  * @param cls Closure.
@@ -107,7 +131,7 @@
  * @param desired_replication_level Desired replication level.
  * @param key Key of the requested data.
  */
-void
+static void
 get_callback (void *cls,
               enum GNUNET_DHT_RouteOption options,
               enum GNUNET_BLOCK_Type type,
@@ -139,7 +163,7 @@
  * @param data Pointer to the result data.
  * @param size Number of bytes in data.
  */
-void
+static void
 get_resp_callback (void *cls,
                    enum GNUNET_BLOCK_Type type,
                    const struct GNUNET_PeerIdentity *get_path,
@@ -177,7 +201,7 @@
  * @param data Pointer to the data carried.
  * @param size Number of bytes in data.
  */
-void
+static void
 put_callback (void *cls,
               enum GNUNET_DHT_RouteOption options,
               enum GNUNET_BLOCK_Type type,
@@ -242,7 +266,11 @@
     FPRINTF (stderr,
             "Monitoring for %s\n",
             GNUNET_STRINGS_relative_time_to_string (timeout_request, 
GNUNET_NO));
-  GNUNET_SCHEDULER_add_delayed (timeout_request, &cleanup_task, NULL);
+  tt = GNUNET_SCHEDULER_add_delayed (timeout_request,
+                                    &timeout_task,
+                                    NULL);
+  GNUNET_SCHEDULER_add_shutdown (&cleanup_task,
+                               NULL);
   monitor_handle = GNUNET_DHT_monitor_start (dht_handle,
                                              block_type,
                                              key,

Modified: gnunet/src/dht/gnunet-dht-put.c
===================================================================
--- gnunet/src/dht/gnunet-dht-put.c     2016-04-30 08:16:14 UTC (rev 37101)
+++ gnunet/src/dht/gnunet-dht-put.c     2016-04-30 08:17:37 UTC (rev 37102)
@@ -98,6 +98,7 @@
   }
 }
 
+
 /**
  * Signature of the main function of a task.
  *
@@ -132,6 +133,7 @@
   GNUNET_SCHEDULER_add_now (&shutdown_task, NULL);
 }
 
+
 /**
  * Main function that will be run by the scheduler.
  *
@@ -141,7 +143,9 @@
  * @param c configuration
  */
 static void
-run (void *cls, char *const *args, const char *cfgfile,
+run (void *cls,
+     char *const *args,
+     const char *cfgfile,
      const struct GNUNET_CONFIGURATION_Handle *c)
 {
   struct GNUNET_TIME_Relative timeout;
@@ -148,7 +152,6 @@
   struct GNUNET_TIME_Absolute expiration;
 
   cfg = c;
-
   if ((NULL == query_key) || (NULL == data))
   {
     FPRINTF (stderr, "%s",  _("Must provide KEY and DATA for DHT put!\n"));

Modified: gnunet/src/dht/gnunet-service-dht.c
===================================================================
--- gnunet/src/dht/gnunet-service-dht.c 2016-04-30 08:16:14 UTC (rev 37101)
+++ gnunet/src/dht/gnunet-service-dht.c 2016-04-30 08:17:37 UTC (rev 37102)
@@ -161,9 +161,8 @@
     shutdown_task (NULL);
     return;
   }
-  GNUNET_SCHEDULER_add_delayed (GNUNET_TIME_UNIT_FOREVER_REL,
-                                &shutdown_task,
-                                NULL);
+  GNUNET_SCHEDULER_add_shutdown (&shutdown_task,
+                                NULL);
   GDS_transport_handle =
       GNUNET_TRANSPORT_connect (GDS_cfg, NULL, NULL, NULL, NULL, NULL);
   if (GDS_transport_handle == NULL)

Modified: gnunet/src/dht/gnunet-service-dht_clients.c
===================================================================
--- gnunet/src/dht/gnunet-service-dht_clients.c 2016-04-30 08:16:14 UTC (rev 
37101)
+++ gnunet/src/dht/gnunet-service-dht_clients.c 2016-04-30 08:17:37 UTC (rev 
37102)
@@ -456,12 +456,8 @@
 {
   struct ClientQueryRecord *cqr;
   struct GNUNET_TIME_Relative delay;
-  const struct GNUNET_SCHEDULER_TaskContext *tc;
 
   retry_task = NULL;
-  tc = GNUNET_SCHEDULER_get_task_context ();
-  if (0 != (tc->reason & GNUNET_SCHEDULER_REASON_SHUTDOWN))
-    return;
   while (NULL != (cqr = GNUNET_CONTAINER_heap_remove_root (retry_heap)))
   {
     cqr->hnode = NULL;

Modified: gnunet/src/dht/gnunet-service-dht_neighbours.c
===================================================================
--- gnunet/src/dht/gnunet-service-dht_neighbours.c      2016-04-30 08:16:14 UTC 
(rev 37101)
+++ gnunet/src/dht/gnunet-service-dht_neighbours.c      2016-04-30 08:17:37 UTC 
(rev 37102)
@@ -712,12 +712,8 @@
   struct GNUNET_TIME_Relative next_send_time;
   struct BloomConstructorContext bcc;
   struct GNUNET_CONTAINER_BloomFilter *peer_bf;
-  const struct GNUNET_SCHEDULER_TaskContext *tc;
 
   find_peer_task = NULL;
-  tc = GNUNET_SCHEDULER_get_task_context ();
-  if ((tc->reason & GNUNET_SCHEDULER_REASON_SHUTDOWN) != 0)
-    return;
   if (newly_found_peers > bucket_size)
   {
     /* If we are finding many peers already, no need to send out our request 
right now! */
@@ -2443,6 +2439,7 @@
   }
 }
 
+
 /**
  * Get the ID of the local node.
  *

Modified: gnunet/src/dht/gnunet-service-wdht.c
===================================================================
--- gnunet/src/dht/gnunet-service-wdht.c        2016-04-30 08:16:14 UTC (rev 
37101)
+++ gnunet/src/dht/gnunet-service-wdht.c        2016-04-30 08:17:37 UTC (rev 
37102)
@@ -102,9 +102,8 @@
     shutdown_task (NULL);
     return;
   }
-  GNUNET_SCHEDULER_add_delayed (GNUNET_TIME_UNIT_FOREVER_REL,
-                                &shutdown_task,
-                                NULL);
+  GNUNET_SCHEDULER_add_shutdown (&shutdown_task,
+                                NULL);
 }
 
 

Modified: gnunet/src/dht/gnunet-service-wdht_clients.c
===================================================================
--- gnunet/src/dht/gnunet-service-wdht_clients.c        2016-04-30 08:16:14 UTC 
(rev 37101)
+++ gnunet/src/dht/gnunet-service-wdht_clients.c        2016-04-30 08:17:37 UTC 
(rev 37102)
@@ -880,12 +880,8 @@
 {
   struct ClientQueryRecord *cqr;
   struct GNUNET_TIME_Relative delay;
-  const struct GNUNET_SCHEDULER_TaskContext *tc;
 
   retry_task = NULL;
-  tc = GNUNET_SCHEDULER_get_task_context ();
-  if (0 != (tc->reason & GNUNET_SCHEDULER_REASON_SHUTDOWN))
-    return;
   while (NULL != (cqr = GNUNET_CONTAINER_heap_remove_root (retry_heap)))
   {
     cqr->hnode = NULL;

Modified: gnunet/src/dht/gnunet-service-xdht.c
===================================================================
--- gnunet/src/dht/gnunet-service-xdht.c        2016-04-30 08:16:14 UTC (rev 
37101)
+++ gnunet/src/dht/gnunet-service-xdht.c        2016-04-30 08:17:37 UTC (rev 
37102)
@@ -17,7 +17,6 @@
      Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
      Boston, MA 02110-1301, USA.
 */
-
 /**
  * @file dht/gnunet-service-xdht.c
  * @brief GNUnet DHT service
@@ -24,7 +23,6 @@
  * @author Christian Grothoff
  * @author Nathan Evans
  */
-
 #include "platform.h"
 #include "gnunet_block_lib.h"
 #include "gnunet_util_lib.h"
@@ -125,9 +123,8 @@
     shutdown_task (NULL);
     return;
   }
-  GNUNET_SCHEDULER_add_delayed (GNUNET_TIME_UNIT_FOREVER_REL,
-                                &shutdown_task,
-                                NULL);
+  GNUNET_SCHEDULER_add_shutdown (&shutdown_task,
+                                NULL);
 }
 
 

Modified: gnunet/src/dht/gnunet-service-xdht_clients.c
===================================================================
--- gnunet/src/dht/gnunet-service-xdht_clients.c        2016-04-30 08:16:14 UTC 
(rev 37101)
+++ gnunet/src/dht/gnunet-service-xdht_clients.c        2016-04-30 08:17:37 UTC 
(rev 37102)
@@ -877,12 +877,8 @@
 {
   struct ClientQueryRecord *cqr;
   struct GNUNET_TIME_Relative delay;
-  const struct GNUNET_SCHEDULER_TaskContext *tc;
 
   retry_task = NULL;
-  tc = GNUNET_SCHEDULER_get_task_context ();
-  if (0 != (tc->reason & GNUNET_SCHEDULER_REASON_SHUTDOWN))
-    return;
   while (NULL != (cqr = GNUNET_CONTAINER_heap_remove_root (retry_heap)))
   {
     cqr->hnode = NULL;

Modified: gnunet/src/dht/gnunet_dht_profiler.c
===================================================================
--- gnunet/src/dht/gnunet_dht_profiler.c        2016-04-30 08:16:14 UTC (rev 
37101)
+++ gnunet/src/dht/gnunet_dht_profiler.c        2016-04-30 08:17:37 UTC (rev 
37102)
@@ -461,9 +461,21 @@
     a_ctx = NULL;
   }
   //FIXME: Should we collect stats only for put/get not for other messages.
-  if(NULL != bandwidth_stats_op)
+  if (NULL != bandwidth_stats_op)
+  {
     GNUNET_TESTBED_operation_done (bandwidth_stats_op);
-  bandwidth_stats_op = NULL;
+    bandwidth_stats_op = NULL;
+  }
+  if (NULL != successor_stats_op)
+  {
+    GNUNET_TESTBED_operation_done (successor_stats_op);
+    successor_stats_op = NULL;
+  }
+  if (NULL != successor_stats_task)
+  {
+    GNUNET_SCHEDULER_cancel (successor_stats_task);
+    successor_stats_task = NULL;
+  }
   GNUNET_free_non_null (a_ac);
 }
 
@@ -687,11 +699,7 @@
 {
   struct Context *ctx = cls;
   struct GNUNET_TESTBED_Operation *op;
-  const struct GNUNET_SCHEDULER_TaskContext *tc;
 
-  tc = GNUNET_SCHEDULER_get_task_context ();
-  if (0 != (GNUNET_SCHEDULER_REASON_SHUTDOWN & tc->reason))
-    return;
   GNUNET_assert (NULL != ctx);
   GNUNET_assert (NULL != (op = ctx->op));
   ctx->op = NULL;
@@ -1070,7 +1078,7 @@
   successor_stats_op = NULL;
   if (0 == max_searches)
   {
-    start_func();
+    start_func ();
     return;
   }
 
@@ -1108,7 +1116,7 @@
                                                                  GNUNET_NO);
   if ((start_val == val) && (count == num_peers))
   {
-    DEBUG("CIRCLE COMPLETED after %u tries", tries);
+    DEBUG ("CIRCLE COMPLETED after %u tries", tries);
     if(NULL == successor_stats_task)
     {
       start_func();
@@ -1115,32 +1123,20 @@
     }
     return;
   }
-  else
+  if (max_searches == ++tries)
   {
-    if (max_searches == ++tries)
-    {
-      GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
-                  "Maximum tries %u exceeded while checking successor TOTAL 
TRIES %u"
-                  " circle formation.  Exiting\n",
-                  max_searches,tries);
-      if (NULL != successor_stats_task)
-      {
-        successor_stats_task = NULL;
-      }
-      if(NULL == successor_stats_task)
-      {
-        start_func();
-      }
-
-      return;
-    }
-    else
-    {
-      flag = 0;
-      successor_stats_task = GNUNET_SCHEDULER_add_delayed (delay_stats,
-                                                           &collect_stats, 
cls);
-    }
+    GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
+               "Maximum tries %u exceeded while checking successor TOTAL TRIES 
%u"
+               " circle formation.  Exiting\n",
+               max_searches,tries);
+    start_func();
+    return;
   }
+  flag = 0;
+  successor_stats_task
+    = GNUNET_SCHEDULER_add_delayed (delay_stats,
+                                   &collect_stats,
+                                   cls);
 }
 
 
@@ -1214,26 +1210,21 @@
 static void
 collect_stats (void *cls)
 {
-  const struct GNUNET_SCHEDULER_TaskContext *tc;
-
-  tc = GNUNET_SCHEDULER_get_task_context ();
-  if ((GNUNET_SCHEDULER_REASON_SHUTDOWN & tc->reason) != 0)
-    return;
-
+  successor_stats_task = NULL;
   GNUNET_log (GNUNET_ERROR_TYPE_INFO,
               "Start collecting statistics...\n");
   GNUNET_assert(NULL != testbed_handles);
 
   if (0 != max_searches)
-  successor_peer_hashmap = GNUNET_CONTAINER_multihashmap_create (num_peers,
-                                                                    GNUNET_NO);
-  successor_stats_op =
-          GNUNET_TESTBED_get_statistics (num_peers, testbed_handles,
-                                         "dht", NULL,
-                                          successor_stats_iterator,
-                                          successor_stats_cont, cls);
-
-  GNUNET_assert(NULL != successor_stats_op);
+    successor_peer_hashmap
+      = GNUNET_CONTAINER_multihashmap_create (num_peers,
+                                             GNUNET_NO);
+  successor_stats_op
+    = GNUNET_TESTBED_get_statistics (num_peers, testbed_handles,
+                                    "dht", NULL,
+                                    successor_stats_iterator,
+                                    successor_stats_cont, cls);
+  GNUNET_assert (NULL != successor_stats_op);
 }
 
 
@@ -1265,9 +1256,10 @@
      collect_stat_cls->service_connect_ctx = cls;
      collect_stat_cls->op = op;
 
-     successor_stats_task = GNUNET_SCHEDULER_add_delayed (delay_stats,
-                                                          &collect_stats,
-                                                          collect_stat_cls);
+     successor_stats_task
+       = GNUNET_SCHEDULER_add_delayed (delay_stats,
+                                      &collect_stats,
+                                      collect_stat_cls);
   }
 }
 
@@ -1393,7 +1385,8 @@
 
   if (0 == num_peers)
   {
-    GNUNET_log (GNUNET_ERROR_TYPE_ERROR, _("Exiting as the number of peers is 
%u\n"),
+    GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
+               _("Exiting as the number of peers is %u\n"),
                 num_peers);
     return;
   }
@@ -1401,8 +1394,8 @@
   event_mask = 0;
   GNUNET_TESTBED_run (hosts_file, cfg, num_peers, event_mask, NULL,
                       NULL, &test_run, NULL);
-  GNUNET_SCHEDULER_add_delayed (GNUNET_TIME_UNIT_FOREVER_REL, &do_shutdown,
-                                NULL);
+  GNUNET_SCHEDULER_add_shutdown (&do_shutdown,
+                                NULL);
 }
 
 

Modified: gnunet/src/dns/dnsstub.c
===================================================================
--- gnunet/src/dns/dnsstub.c    2016-04-30 08:16:14 UTC (rev 37101)
+++ gnunet/src/dns/dnsstub.c    2016-04-30 08:17:37 UTC (rev 37102)
@@ -476,7 +476,7 @@
   tc = GNUNET_SCHEDULER_get_task_context ();
   if (0 == (tc->reason & GNUNET_SCHEDULER_REASON_READ_READY))
   {
-    /* timeout or shutdown */
+    /* timeout */
     cleanup_rs (rs);
     return;
   }

Modified: gnunet/src/dns/gnunet-dns-monitor.c
===================================================================
--- gnunet/src/dns/gnunet-dns-monitor.c 2016-04-30 08:16:14 UTC (rev 37101)
+++ gnunet/src/dns/gnunet-dns-monitor.c 2016-04-30 08:17:37 UTC (rev 37102)
@@ -339,8 +339,7 @@
                        flags,
                        &display_request,
                        NULL);
-  GNUNET_SCHEDULER_add_delayed (GNUNET_TIME_UNIT_FOREVER_REL,
-                               &do_disconnect, NULL);
+  GNUNET_SCHEDULER_add_shutdown (&do_disconnect, NULL);
 }
 
 

Modified: gnunet/src/dns/gnunet-dns-redirector.c
===================================================================
--- gnunet/src/dns/gnunet-dns-redirector.c      2016-04-30 08:16:14 UTC (rev 
37101)
+++ gnunet/src/dns/gnunet-dns-redirector.c      2016-04-30 08:17:37 UTC (rev 
37102)
@@ -223,8 +223,7 @@
                        GNUNET_DNS_FLAG_POST_RESOLUTION,
                        &modify_request,
                        NULL);
-  GNUNET_SCHEDULER_add_delayed (GNUNET_TIME_UNIT_FOREVER_REL,
-                               &do_disconnect, NULL);
+  GNUNET_SCHEDULER_add_shutdown (&do_disconnect, NULL);
 }
 
 

Modified: gnunet/src/dns/gnunet-service-dns.c
===================================================================
--- gnunet/src/dns/gnunet-service-dns.c 2016-04-30 08:16:14 UTC (rev 37101)
+++ gnunet/src/dns/gnunet-service-dns.c 2016-04-30 08:17:37 UTC (rev 37102)
@@ -1045,9 +1045,8 @@
   cfg = cfg_;
   stats = GNUNET_STATISTICS_create ("dns", cfg);
   nc = GNUNET_SERVER_notification_context_create (server, 1);
-  GNUNET_SCHEDULER_add_delayed (GNUNET_TIME_UNIT_FOREVER_REL,
-                                &cleanup_task,
-                                cls);
+  GNUNET_SCHEDULER_add_shutdown (&cleanup_task,
+                                cls);
   dns_exit = NULL;
   if ( ( (GNUNET_OK !=
          GNUNET_CONFIGURATION_get_value_string (cfg,

Modified: gnunet/src/dv/gnunet-dv.c
===================================================================
--- gnunet/src/dv/gnunet-dv.c   2016-04-30 08:16:14 UTC (rev 37101)
+++ gnunet/src/dv/gnunet-dv.c   2016-04-30 08:17:37 UTC (rev 37102)
@@ -145,8 +145,7 @@
                                  &change_cb,
                                  &disconnect_cb,
                                  &message_cb);
-  GNUNET_SCHEDULER_add_delayed (GNUNET_TIME_UNIT_FOREVER_REL,
-                               &shutdown_task, NULL);
+  GNUNET_SCHEDULER_add_shutdown (&shutdown_task, NULL);
 }
 
 

Modified: gnunet/src/dv/gnunet-service-dv.c
===================================================================
--- gnunet/src/dv/gnunet-service-dv.c   2016-04-30 08:16:14 UTC (rev 37101)
+++ gnunet/src/dv/gnunet-service-dv.c   2016-04-30 08:17:37 UTC (rev 37102)
@@ -2229,8 +2229,7 @@
                                                  MAX_QUEUE_SIZE_PLUGIN);
   stats = GNUNET_STATISTICS_create ("dv", cfg);
   GNUNET_SERVER_add_handlers (server, plugin_handlers);
-  GNUNET_SCHEDULER_add_delayed (GNUNET_TIME_UNIT_FOREVER_REL,
-                               &shutdown_task, NULL);
+  GNUNET_SCHEDULER_add_shutdown (&shutdown_task, NULL);
 }
 
 

Modified: gnunet/src/dv/test_transport_dv.c
===================================================================
--- gnunet/src/dv/test_transport_dv.c   2016-04-30 08:16:14 UTC (rev 37101)
+++ gnunet/src/dv/test_transport_dv.c   2016-04-30 08:17:37 UTC (rev 37102)
@@ -82,8 +82,8 @@
                  unsigned int links_succeeded,
                  unsigned int links_failed)
 {
-  shutdown_task = GNUNET_SCHEDULER_add_delayed (GNUNET_TIME_UNIT_FOREVER_REL,
-                                                &do_shutdown, NULL);
+  shutdown_task = GNUNET_SCHEDULER_add_shutdown (&do_shutdown,
+                                                NULL);
   if (4 != num_peers)
   {
     ok = 1;

Modified: gnunet/src/exit/gnunet-daemon-exit.c
===================================================================
--- gnunet/src/exit/gnunet-daemon-exit.c        2016-04-30 08:16:14 UTC (rev 
37101)
+++ gnunet/src/exit/gnunet-daemon-exit.c        2016-04-30 08:17:37 UTC (rev 
37102)
@@ -3149,7 +3149,6 @@
  * Function scheduled as very last function, cleans up after us
  *
  * @param cls NULL
- * @param tc scheduler context
  */
 static void
 cleanup (void *cls)
@@ -3548,9 +3547,8 @@
       GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
                  _("`%s' must be installed SUID, EXIT will not work\n"),
                  "gnunet-helper-exit");
-      GNUNET_SCHEDULER_add_delayed (GNUNET_TIME_UNIT_FOREVER_REL,
-                                    &dummy_task,
-                                    NULL);
+      GNUNET_SCHEDULER_add_shutdown (&dummy_task,
+                                    NULL);
       global_ret = 1;
       return;
     }
@@ -3639,9 +3637,8 @@
     app_idx++;
   }
   GNUNET_free_non_null (dns_exit);
-  GNUNET_SCHEDULER_add_delayed (GNUNET_TIME_UNIT_FOREVER_REL,
-                                &cleanup,
-                                cls);
+  GNUNET_SCHEDULER_add_shutdown (&cleanup,
+                                NULL);
 
   if (GNUNET_OK !=
       GNUNET_CONFIGURATION_get_value_number (cfg, "exit", "MAX_CONNECTIONS",

Modified: gnunet/src/fs/gnunet-auto-share.c
===================================================================
--- gnunet/src/fs/gnunet-auto-share.c   2016-04-30 08:16:14 UTC (rev 37101)
+++ gnunet/src/fs/gnunet-auto-share.c   2016-04-30 08:17:37 UTC (rev 37102)
@@ -95,11 +95,6 @@
 static int do_disable_creation_time;
 
 /**
- * Handle for the 'shutdown' task.
- */
-static struct GNUNET_SCHEDULER_Task *kill_task;
-
-/**
  * Handle for the main task that does scanning and working.
  */
 static struct GNUNET_SCHEDULER_Task *run_task;
@@ -321,7 +316,6 @@
 static void
 do_stop_task (void *cls)
 {
-  kill_task = NULL;
   do_shutdown = GNUNET_YES;
   if (NULL != publish_proc)
   {
@@ -729,10 +723,8 @@
   run_task = GNUNET_SCHEDULER_add_with_priority 
(GNUNET_SCHEDULER_PRIORITY_IDLE,
                                                 &scan,
                                                 NULL);
-  kill_task =
-      GNUNET_SCHEDULER_add_delayed (GNUNET_TIME_UNIT_FOREVER_REL,
-                                   &do_stop_task,
-                                    NULL);
+  GNUNET_SCHEDULER_add_shutdown (&do_stop_task,
+                                NULL);
 }
 
 

Modified: gnunet/src/fs/gnunet-daemon-fsprofiler.c
===================================================================
--- gnunet/src/fs/gnunet-daemon-fsprofiler.c    2016-04-30 08:16:14 UTC (rev 
37101)
+++ gnunet/src/fs/gnunet-daemon-fsprofiler.c    2016-04-30 08:17:37 UTC (rev 
37102)
@@ -500,12 +500,8 @@
 {
   struct Pattern *p = cls;
   struct GNUNET_FS_FileInformation *fi;
-  const struct GNUNET_SCHEDULER_TaskContext *tc;
 
   p->task = NULL;
-  tc = GNUNET_SCHEDULER_get_task_context ();
-  if (0 != (tc->reason & GNUNET_SCHEDULER_REASON_SHUTDOWN))
-    return;
   fi = make_file (p->x, p->y, p);
   p->start_time = GNUNET_TIME_absolute_get ();
   p->ctx = GNUNET_FS_publish_start (fs_handle,
@@ -525,12 +521,8 @@
 {
   struct Pattern *p = cls;
   struct GNUNET_FS_Uri *keywords;
-  const struct GNUNET_SCHEDULER_TaskContext *tc;
 
   p->task = NULL;
-  tc = GNUNET_SCHEDULER_get_task_context ();
-  if (0 != (tc->reason & GNUNET_SCHEDULER_REASON_SHUTDOWN))
-    return;
   keywords = make_keywords (p->x);
   p->start_time = GNUNET_TIME_absolute_get ();
   p->sctx = GNUNET_FS_search_start (fs_handle, keywords,
@@ -558,8 +550,8 @@
 
   cfg = cfg_;
   /* Scheduled the task to clean up when shutdown is called */
-  GNUNET_SCHEDULER_add_delayed (GNUNET_TIME_UNIT_FOREVER_REL, &shutdown_task,
-                                NULL);
+  GNUNET_SCHEDULER_add_shutdown (&shutdown_task,
+                                NULL);
 
   if (GNUNET_OK !=
       GNUNET_CONFIGURATION_get_value_number (cfg,

Modified: gnunet/src/fs/gnunet-download.c
===================================================================
--- gnunet/src/fs/gnunet-download.c     2016-04-30 08:16:14 UTC (rev 37101)
+++ gnunet/src/fs/gnunet-download.c     2016-04-30 08:17:37 UTC (rev 37102)
@@ -284,8 +284,8 @@
     ctx = NULL;
     return;
   }
-  GNUNET_SCHEDULER_add_delayed (GNUNET_TIME_UNIT_FOREVER_REL, &shutdown_task,
-                                NULL);
+  GNUNET_SCHEDULER_add_shutdown (&shutdown_task,
+                                NULL);
 }
 
 

Modified: gnunet/src/fs/gnunet-fs-profiler.c
===================================================================
--- gnunet/src/fs/gnunet-fs-profiler.c  2016-04-30 08:16:14 UTC (rev 37101)
+++ gnunet/src/fs/gnunet-fs-profiler.c  2016-04-30 08:17:37 UTC (rev 37102)
@@ -105,7 +105,7 @@
 
 
 /**
- * Task run on timeout to terminate.  Triggers printing out
+ * Task run on shutdown to terminate.  Triggers printing out
  * all statistics.
  *
  * @param cls NULL
@@ -113,7 +113,11 @@
 static void
 terminate_task (void *cls)
 {
-  terminate_taskid = NULL;
+  if (NULL != terminate_taskid)
+  {
+    GNUNET_SCHEDULER_cancel (terminate_taskid);
+    terminate_taskid = NULL;
+  }
   GNUNET_TESTBED_get_statistics (0, NULL,
                                  NULL, NULL,
                                 &process_stats,
@@ -123,6 +127,20 @@
 
 
 /**
+ * Task run on timeout to terminate.  Triggers printing out
+ * all statistics.
+ *
+ * @param cls NULL
+ */
+static void
+timeout_task (void *cls)
+{
+  terminate_taskid = NULL;
+  GNUNET_SCHEDULER_shutdown ();
+}
+
+
+/**
  * Signature of a main function for a testcase.
  *
  * @param cls closure
@@ -148,11 +166,10 @@
 
   if (0 != timeout.rel_value_us)
     terminate_taskid = GNUNET_SCHEDULER_add_delayed (timeout,
-                                                    &terminate_task, NULL);
-  else
-    terminate_taskid = GNUNET_SCHEDULER_add_delayed 
(GNUNET_TIME_UNIT_FOREVER_REL,
-                                                    &terminate_task,
+                                                    &timeout_task,
                                                     NULL);
+   GNUNET_SCHEDULER_add_shutdown (&terminate_task,
+                                 NULL);
 }
 
 

Modified: gnunet/src/fs/gnunet-publish.c
===================================================================
--- gnunet/src/fs/gnunet-publish.c      2016-04-30 08:16:14 UTC (rev 37101)
+++ gnunet/src/fs/gnunet-publish.c      2016-04-30 08:17:37 UTC (rev 37102)
@@ -872,9 +872,8 @@
     ret = 1;
     return;
   }
-  GNUNET_SCHEDULER_add_delayed (GNUNET_TIME_UNIT_FOREVER_REL,
-                                &do_stop_task,
-                                NULL);
+  GNUNET_SCHEDULER_add_shutdown (&do_stop_task,
+                                NULL);
   if (NULL != pseudonym)
     identity = GNUNET_IDENTITY_connect (cfg,
                                        &identity_cb,

Modified: gnunet/src/fs/gnunet-search.c
===================================================================
--- gnunet/src/fs/gnunet-search.c       2016-04-30 08:16:14 UTC (rev 37101)
+++ gnunet/src/fs/gnunet-search.c       2016-04-30 08:17:37 UTC (rev 37102)
@@ -55,6 +55,9 @@
 
 static int local_only;
 
+static struct GNUNET_SCHEDULER_Task *tt;
+
+
 /**
  * Type of a function that libextractor calls for each
  * meta data item found.
@@ -220,6 +223,14 @@
 }
 
 
+static void
+timeout_task (void *cls)
+{
+  tt = NULL;
+  GNUNET_SCHEDULER_shutdown ();
+}
+
+
 /**
  * Main function that will be run by the scheduler.
  *
@@ -272,10 +283,11 @@
     return;
   }
   if (0 != timeout.rel_value_us)
-    GNUNET_SCHEDULER_add_delayed (timeout, &shutdown_task, NULL);
-  else
-    GNUNET_SCHEDULER_add_delayed (GNUNET_TIME_UNIT_FOREVER_REL, &shutdown_task,
-                                  NULL);
+    tt = GNUNET_SCHEDULER_add_delayed (timeout,
+                                      &timeout_task,
+                                      NULL);
+  GNUNET_SCHEDULER_add_shutdown (&shutdown_task,
+                                NULL);
 }
 
 

Modified: gnunet/src/fs/gnunet-service-fs.c
===================================================================
--- gnunet/src/fs/gnunet-service-fs.c   2016-04-30 08:16:14 UTC (rev 37101)
+++ gnunet/src/fs/gnunet-service-fs.c   2016-04-30 08:17:37 UTC (rev 37102)
@@ -191,7 +191,8 @@
   GSF_cover_content_count = (GSF_cover_content_count * 15) / 16;
   GSF_cover_query_count = (GSF_cover_query_count * 15) / 16;
   cover_age_task =
-      GNUNET_SCHEDULER_add_delayed (COVER_AGE_FREQUENCY, &age_cover_counters,
+      GNUNET_SCHEDULER_add_delayed (COVER_AGE_FREQUENCY,
+                                   &age_cover_counters,
                                     NULL);
 }
 
@@ -759,13 +760,14 @@
                                    NULL);
   GNUNET_SERVER_add_handlers (server, handlers);
   cover_age_task =
-      GNUNET_SCHEDULER_add_delayed (COVER_AGE_FREQUENCY, &age_cover_counters,
+      GNUNET_SCHEDULER_add_delayed (COVER_AGE_FREQUENCY,
+                                   &age_cover_counters,
                                     NULL);
   datastore_get_load = GNUNET_LOAD_value_init (DATASTORE_LOAD_AUTODECLINE);
   GSF_cadet_start_server ();
   GSF_cadet_start_client ();
-  GNUNET_SCHEDULER_add_delayed (GNUNET_TIME_UNIT_FOREVER_REL, &shutdown_task,
-                                NULL);
+  GNUNET_SCHEDULER_add_shutdown (&shutdown_task,
+                                NULL);
   return GNUNET_OK;
 }
 

Modified: gnunet/src/fs/gnunet-service-fs_cp.c
===================================================================
--- gnunet/src/fs/gnunet-service-fs_cp.c        2016-04-30 08:16:14 UTC (rev 
37101)
+++ gnunet/src/fs/gnunet-service-fs_cp.c        2016-04-30 08:17:37 UTC (rev 
37102)
@@ -335,7 +335,12 @@
  */
 static struct GNUNET_PEERSTORE_Handle *peerstore;
 
+/**
+ * Task used to flush respect values to disk.
+ */
+static struct GNUNET_SCHEDULER_Task *fr_task;
 
+
 /**
  * Update the latency information kept for the given peer.
  *
@@ -876,19 +881,11 @@
 {
   struct GSF_DelayedHandle *dh = cls;
   struct GSF_ConnectedPeer *cp = dh->cp;
-  const struct GNUNET_SCHEDULER_TaskContext *tc;
 
   GNUNET_CONTAINER_DLL_remove (cp->delayed_head,
                                cp->delayed_tail,
                                dh);
   cp->delay_queue_size--;
-  tc = GNUNET_SCHEDULER_get_task_context ();
-  if (0 != (GNUNET_SCHEDULER_REASON_SHUTDOWN & tc->reason))
-  {
-    GNUNET_free (dh->pm);
-    GNUNET_free (dh);
-    return;
-  }
   (void) GSF_peer_transmit_ (cp,
                              GNUNET_NO,
                              UINT32_MAX,
@@ -1977,18 +1974,13 @@
 static void
 cron_flush_respect (void *cls)
 {
-  const struct GNUNET_SCHEDULER_TaskContext *tc;
-
-  if (NULL == cp_map)
-    return;
+  fr_task = NULL;
   GNUNET_CONTAINER_multipeermap_iterate (cp_map,
-                                         &flush_respect, NULL);
-  tc = GNUNET_SCHEDULER_get_task_context ();
-  if (0 != (tc->reason & GNUNET_SCHEDULER_REASON_SHUTDOWN))
-    return;
-  GNUNET_SCHEDULER_add_delayed_with_priority (RESPECT_FLUSH_FREQ,
-                                             GNUNET_SCHEDULER_PRIORITY_HIGH,
-                                             &cron_flush_respect, NULL);
+                                         &flush_respect,
+                                        NULL);
+  fr_task = GNUNET_SCHEDULER_add_delayed_with_priority (RESPECT_FLUSH_FREQ,
+                                                       
GNUNET_SCHEDULER_PRIORITY_HIGH,
+                                                       &cron_flush_respect, 
NULL);
 }
 
 
@@ -2000,8 +1992,8 @@
 {
   cp_map = GNUNET_CONTAINER_multipeermap_create (128, GNUNET_YES);
   peerstore = GNUNET_PEERSTORE_connect (GSF_cfg);
-  GNUNET_SCHEDULER_add_with_priority (GNUNET_SCHEDULER_PRIORITY_HIGH,
-                                      &cron_flush_respect, NULL);
+  fr_task = GNUNET_SCHEDULER_add_with_priority (GNUNET_SCHEDULER_PRIORITY_HIGH,
+                                               &cron_flush_respect, NULL);
 }
 
 
@@ -2033,10 +2025,15 @@
                                          &flush_respect,
                                          NULL);
   GNUNET_CONTAINER_multipeermap_iterate (cp_map,
-                                         &clean_peer, NULL);
+                                         &clean_peer,
+                                        NULL);
+  GNUNET_SCHEDULER_cancel (fr_task);
+  fr_task = NULL;
   GNUNET_CONTAINER_multipeermap_destroy (cp_map);
   cp_map = NULL;
-  GNUNET_PEERSTORE_disconnect (peerstore, GNUNET_YES);
+  GNUNET_PEERSTORE_disconnect (peerstore,
+                              GNUNET_YES);
+  
 }
 
 

Modified: gnunet/src/fs/gnunet-service-fs_put.c
===================================================================
--- gnunet/src/fs/gnunet-service-fs_put.c       2016-04-30 08:16:14 UTC (rev 
37101)
+++ gnunet/src/fs/gnunet-service-fs_put.c       2016-04-30 08:17:37 UTC (rev 
37102)
@@ -215,12 +215,8 @@
 gather_dht_put_blocks (void *cls)
 {
   struct PutOperator *po = cls;
-  const struct GNUNET_SCHEDULER_TaskContext *tc;
 
   po->dht_task = NULL;
-  tc = GNUNET_SCHEDULER_get_task_context ();
-  if (0 != (tc->reason & GNUNET_SCHEDULER_REASON_SHUTDOWN))
-    return;
   po->dht_qe =
       GNUNET_DATASTORE_get_zero_anonymity (GSF_dsh, po->current_offset++, 0,
                                            UINT_MAX,

Modified: gnunet/src/fs/gnunet-unindex.c
===================================================================
--- gnunet/src/fs/gnunet-unindex.c      2016-04-30 08:16:14 UTC (rev 37101)
+++ gnunet/src/fs/gnunet-unindex.c      2016-04-30 08:17:37 UTC (rev 37102)
@@ -147,8 +147,8 @@
     GNUNET_FS_stop (ctx);
     return;
   }
-  GNUNET_SCHEDULER_add_delayed (GNUNET_TIME_UNIT_FOREVER_REL, &shutdown_task,
-                                NULL);
+  GNUNET_SCHEDULER_add_shutdown (&shutdown_task,
+                                NULL);
 }
 
 

Modified: gnunet/src/fs/test_gnunet_service_fs_migration.c
===================================================================
--- gnunet/src/fs/test_gnunet_service_fs_migration.c    2016-04-30 08:16:14 UTC 
(rev 37101)
+++ gnunet/src/fs/test_gnunet_service_fs_migration.c    2016-04-30 08:17:37 UTC 
(rev 37102)
@@ -142,15 +142,13 @@
 stop_source_peer (void *cls)
 {
   struct DownloadContext *dc = cls;
-  const struct GNUNET_SCHEDULER_TaskContext *tc;
 
-  tc = GNUNET_SCHEDULER_get_task_context ();
-  /* Do not interact with testbed when shutting down */
-  if (0 != (tc->reason & GNUNET_SCHEDULER_REASON_SHUTDOWN))
-    return;
+  /* FIXME: We should not interact with testbed when shutting down */
   GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
               "Stopping source peer\n");
-  op = GNUNET_TESTBED_peer_stop (NULL, daemons[1], &do_download, dc);
+  op = GNUNET_TESTBED_peer_stop (NULL,
+                                daemons[1],
+                                &do_download, dc);
   GNUNET_assert (NULL != op);
 }
 
@@ -176,7 +174,9 @@
   dc->uri = GNUNET_FS_uri_dup (uri);
   if (NULL != fn)
     dc->fn = GNUNET_strdup (fn);
-  (void) GNUNET_SCHEDULER_add_delayed (MIGRATION_DELAY, &stop_source_peer, dc);
+  (void) GNUNET_SCHEDULER_add_delayed (MIGRATION_DELAY,
+                                      &stop_source_peer,
+                                      dc);
 }
 
 
@@ -196,7 +196,8 @@
   GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
               "Publishing %llu bytes\n",
               (unsigned long long) FILESIZE);
-  GNUNET_FS_TEST_publish (daemons[1], TIMEOUT, 1, GNUNET_NO, FILESIZE, SEED,
+  GNUNET_FS_TEST_publish (daemons[1], TIMEOUT, 1, GNUNET_NO,
+                         FILESIZE, SEED,
                           VERBOSE, &do_wait, NULL);
 }
 

Modified: gnunet/src/gns/gns_api.c
===================================================================
--- gnunet/src/gns/gns_api.c    2016-04-30 08:16:14 UTC (rev 37101)
+++ gnunet/src/gns/gns_api.c    2016-04-30 08:17:37 UTC (rev 37102)
@@ -239,9 +239,10 @@
                                 p);
   }
   handle->reconnect_backoff = GNUNET_TIME_STD_BACKOFF 
(handle->reconnect_backoff);
-  handle->reconnect_task = GNUNET_SCHEDULER_add_delayed 
(handle->reconnect_backoff,
-                                                    &reconnect_task,
-                                                    handle);
+  handle->reconnect_task
+    = GNUNET_SCHEDULER_add_delayed (handle->reconnect_backoff,
+                                   &reconnect_task,
+                                   handle);
 }
 
 

Modified: gnunet/src/gns/gnunet-bcd.c
===================================================================
--- gnunet/src/gns/gnunet-bcd.c 2016-04-30 08:16:14 UTC (rev 37101)
+++ gnunet/src/gns/gnunet-bcd.c 2016-04-30 08:17:37 UTC (rev 37102)
@@ -90,10 +90,14 @@
  * Main request handler.
  */
 static int
-access_handler_callback (void *cls, struct MHD_Connection *connection,
-                         const char *url, const char *method,
-                         const char *version, const char *upload_data,
-                         size_t * upload_data_size, void **con_cls)
+access_handler_callback (void *cls,
+                        struct MHD_Connection *connection,
+                         const char *url,
+                        const char *method,
+                         const char *version,
+                        const char *upload_data,
+                         size_t * upload_data_size,
+                        void **con_cls)
 {
   static int dummy;
   static const struct Entry map[] = {
@@ -290,12 +294,8 @@
 run_daemon (void *cls)
 {
   struct MHD_Daemon *daemon_handle = cls;
-  const struct GNUNET_SCHEDULER_TaskContext *tc;
 
   http_task = NULL;
-  tc = GNUNET_SCHEDULER_get_task_context ();
-  if (0 != (tc->reason & GNUNET_SCHEDULER_REASON_SHUTDOWN))
-    return;
   GNUNET_assert (MHD_YES == MHD_run (daemon_handle));
   http_task = prepare_daemon (daemon_handle);
 }
@@ -499,9 +499,8 @@
   if (GNUNET_OK !=
       server_start ())
     return;
-  GNUNET_SCHEDULER_add_delayed (GNUNET_TIME_UNIT_FOREVER_REL,
-                                &server_stop,
-                                NULL);
+  GNUNET_SCHEDULER_add_shutdown (&server_stop,
+                                NULL);
 }
 
 

Modified: gnunet/src/gns/gnunet-dns2gns.c
===================================================================
--- gnunet/src/gns/gnunet-dns2gns.c     2016-04-30 08:16:14 UTC (rev 37101)
+++ gnunet/src/gns/gnunet-dns2gns.c     2016-04-30 08:17:37 UTC (rev 37102)
@@ -175,9 +175,15 @@
 do_shutdown (void *cls)
 {
   if (NULL != t4)
+  {
     GNUNET_SCHEDULER_cancel (t4);
+    t4 = NULL;
+  }
   if (NULL != t6)
+  {
     GNUNET_SCHEDULER_cancel (t6);
+    t6 = NULL;
+  }
   if (NULL != listen_socket4)
   {
     GNUNET_NETWORK_socket_close (listen_socket4);
@@ -607,57 +613,57 @@
                                                 SOCK_DGRAM,
                                                 IPPROTO_UDP);
   if (NULL != listen_socket4)
-    {
-      struct sockaddr_in v4;
-
-      memset (&v4, 0, sizeof (v4));
-      v4.sin_family = AF_INET;
+  {
+    struct sockaddr_in v4;
+    
+    memset (&v4, 0, sizeof (v4));
+    v4.sin_family = AF_INET;
 #if HAVE_SOCKADDR_IN_SIN_LEN
-      v4.sin_len = sizeof (v4);
+    v4.sin_len = sizeof (v4);
 #endif
-      v4.sin_port = htons (listen_port);
-      if (GNUNET_OK !=
-         GNUNET_NETWORK_socket_bind (listen_socket4,
-                                     (struct sockaddr *) &v4,
-                                     sizeof (v4)))
-       {
-         GNUNET_log_strerror (GNUNET_ERROR_TYPE_ERROR, "bind");
-         GNUNET_NETWORK_socket_close (listen_socket4);
-         listen_socket4 = NULL;
-       }
+    v4.sin_port = htons (listen_port);
+    if (GNUNET_OK !=
+       GNUNET_NETWORK_socket_bind (listen_socket4,
+                                   (struct sockaddr *) &v4,
+                                   sizeof (v4)))
+    {
+      GNUNET_log_strerror (GNUNET_ERROR_TYPE_ERROR, "bind");
+      GNUNET_NETWORK_socket_close (listen_socket4);
+      listen_socket4 = NULL;
     }
+  }
   listen_socket6 = GNUNET_NETWORK_socket_create (PF_INET6,
                                                SOCK_DGRAM,
                                                IPPROTO_UDP);
   if (NULL != listen_socket6)
-    {
-      struct sockaddr_in6 v6;
-
-      memset (&v6, 0, sizeof (v6));
-      v6.sin6_family = AF_INET6;
+  {
+    struct sockaddr_in6 v6;
+    
+    memset (&v6, 0, sizeof (v6));
+    v6.sin6_family = AF_INET6;
 #if HAVE_SOCKADDR_IN_SIN_LEN
-      v6.sin6_len = sizeof (v6);
+    v6.sin6_len = sizeof (v6);
 #endif
-      v6.sin6_port = htons (listen_port);
-      if (GNUNET_OK !=
-         GNUNET_NETWORK_socket_bind (listen_socket6,
-                                     (struct sockaddr *) &v6,
-                                     sizeof (v6)))
-       {
-         GNUNET_log_strerror (GNUNET_ERROR_TYPE_ERROR, "bind");
-         GNUNET_NETWORK_socket_close (listen_socket6);
-         listen_socket6 = NULL;
-       }
+    v6.sin6_port = htons (listen_port);
+    if (GNUNET_OK !=
+       GNUNET_NETWORK_socket_bind (listen_socket6,
+                                   (struct sockaddr *) &v6,
+                                   sizeof (v6)))
+    {
+      GNUNET_log_strerror (GNUNET_ERROR_TYPE_ERROR, "bind");
+      GNUNET_NETWORK_socket_close (listen_socket6);
+      listen_socket6 = NULL;
     }
+  }
   if ( (NULL == listen_socket4) &&
        (NULL == listen_socket6) )
-    {
-      GNUNET_GNS_disconnect (gns);
-      gns = NULL;
-      GNUNET_DNSSTUB_stop (dns_stub);
-      dns_stub = NULL;
-      return;
-    }
+  {
+    GNUNET_GNS_disconnect (gns);
+    gns = NULL;
+    GNUNET_DNSSTUB_stop (dns_stub);
+    dns_stub = NULL;
+    return;
+  }
   if (NULL != listen_socket4)
     t4 = GNUNET_SCHEDULER_add_read_net (GNUNET_TIME_UNIT_FOREVER_REL,
                                        listen_socket4,
@@ -668,7 +674,6 @@
                                        listen_socket6,
                                        &read_dns6,
                                        listen_socket6);
-
 }
 
 
@@ -719,7 +724,9 @@
  * @param c configuration
  */
 static void
-run (void *cls, char *const *args, const char *cfgfile,
+run (void *cls,
+     char *const *args,
+     const char *cfgfile,
      const struct GNUNET_CONFIGURATION_Handle *c)
 {
   cfg = c;
@@ -730,8 +737,7 @@
                 _("No DNS server specified!\n"));
     return;
   }
-  GNUNET_SCHEDULER_add_delayed (GNUNET_TIME_UNIT_FOREVER_REL,
-                               &do_shutdown, NULL);
+  GNUNET_SCHEDULER_add_shutdown (&do_shutdown, NULL);
   if (NULL == gns_zone_str)
     {
       identity = GNUNET_IDENTITY_connect (cfg,
@@ -745,8 +751,8 @@
   if ( (NULL == gns_zone_str) ||
        (GNUNET_OK !=
        GNUNET_CRYPTO_ecdsa_public_key_from_string (gns_zone_str,
-                                                 strlen (gns_zone_str),
-                                                 &my_zone)) )
+                                                   strlen (gns_zone_str),
+                                                   &my_zone)) )
   {
     GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
                _("No valid GNS zone specified!\n"));

Modified: gnunet/src/gns/gnunet-gns-helper-service-w32.c
===================================================================
--- gnunet/src/gns/gnunet-gns-helper-service-w32.c      2016-04-30 08:16:14 UTC 
(rev 37101)
+++ gnunet/src/gns/gnunet-gns-helper-service-w32.c      2016-04-30 08:17:37 UTC 
(rev 37102)
@@ -827,8 +827,8 @@
     GNUNET_SCHEDULER_shutdown ();
     return;
   }
-  GNUNET_SCHEDULER_add_delayed (GNUNET_TIME_UNIT_FOREVER_REL, &do_shutdown,
-      NULL);
+  GNUNET_SCHEDULER_add_shutdown (&do_shutdown,
+                                NULL);
 
   identity = GNUNET_IDENTITY_connect (cfg, NULL, NULL);
   if (NULL == identity)

Modified: gnunet/src/gns/gnunet-gns-import.c
===================================================================
--- gnunet/src/gns/gnunet-gns-import.c  2016-04-30 08:16:14 UTC (rev 37101)
+++ gnunet/src/gns/gnunet-gns-import.c  2016-04-30 08:17:37 UTC (rev 37102)
@@ -454,8 +454,7 @@
 
   ns = GNUNET_NAMESTORE_connect (cfg);
   sh = GNUNET_IDENTITY_connect (cfg, &get_ego, NULL);
-  GNUNET_SCHEDULER_add_delayed (GNUNET_TIME_UNIT_FOREVER_REL,
-                               &shutdown_task, NULL);
+  GNUNET_SCHEDULER_add_shutdown (&shutdown_task, NULL);
 }
 
 

Modified: gnunet/src/gns/gnunet-gns-proxy.c
===================================================================
--- gnunet/src/gns/gnunet-gns-proxy.c   2016-04-30 08:16:14 UTC (rev 37101)
+++ gnunet/src/gns/gnunet-gns-proxy.c   2016-04-30 08:17:37 UTC (rev 37102)
@@ -2713,15 +2713,11 @@
   struct GNUNET_NETWORK_Handle *lsock = cls;
   struct GNUNET_NETWORK_Handle *s;
   struct Socks5Request *s5r;
-  const struct GNUNET_SCHEDULER_TaskContext *tc;
 
   if (lsock == lsock4)
     ltask4 = NULL;
   else
     ltask6 = NULL;
-  tc = GNUNET_SCHEDULER_get_task_context ();
-  if (0 != (tc->reason & GNUNET_SCHEDULER_REASON_SHUTDOWN))
-    return;
   if (lsock == lsock4)
     ltask4 = GNUNET_SCHEDULER_add_read_net (GNUNET_TIME_UNIT_FOREVER_REL,
                                             lsock,
@@ -3126,8 +3122,7 @@
                               "gns-proxy",
                               &identity_master_cb,
                               NULL);
-  GNUNET_SCHEDULER_add_delayed (GNUNET_TIME_UNIT_FOREVER_REL,
-                                &do_shutdown, NULL);
+  GNUNET_SCHEDULER_add_shutdown (&do_shutdown, NULL);
 }
 
 

Modified: gnunet/src/gns/gnunet-gns.c
===================================================================
--- gnunet/src/gns/gnunet-gns.c 2016-04-30 08:16:14 UTC (rev 37101)
+++ gnunet/src/gns/gnunet-gns.c 2016-04-30 08:17:37 UTC (rev 37102)
@@ -100,7 +100,12 @@
  */
 static struct GNUNET_IDENTITY_Operation *id_op;
 
+/**
+ * Task scheduled to handle timeout.
+ */
+static struct GNUNET_SCHEDULER_Task *tt;
 
+
 /**
  * Task run on shutdown.  Cleans up everything.
  *
@@ -134,10 +139,28 @@
     GNUNET_GNS_disconnect (gns);
     gns = NULL;
   }
+  if (NULL != tt)
+  {
+    GNUNET_SCHEDULER_cancel (tt);
+    tt = NULL;
+  }
 }
 
 
 /**
+ * Task run on timeout. Triggers shutdown.
+ *
+ * @param cls unused
+ */
+static void
+do_timeout (void *cls)
+{
+  tt = NULL;
+  GNUNET_SCHEDULER_shutdown ();
+}
+
+
+/**
  * Function called with the result of a GNS lookup.
  *
  * @param cls the 'const char *' name that was resolved
@@ -376,7 +399,9 @@
  * @param c configuration
  */
 static void
-run (void *cls, char *const *args, const char *cfgfile,
+run (void *cls,
+     char *const *args,
+     const char *cfgfile,
      const struct GNUNET_CONFIGURATION_Handle *c)
 {
   struct GNUNET_CRYPTO_EcdsaPublicKey pkey;
@@ -390,8 +415,9 @@
             _("Failed to connect to GNS\n"));
     return;
   }
-  GNUNET_SCHEDULER_add_delayed (timeout,
-                               &do_shutdown, NULL);
+  tt = GNUNET_SCHEDULER_add_delayed (timeout,
+                                    &do_timeout, NULL);
+  GNUNET_SCHEDULER_add_shutdown (&do_shutdown, NULL);
   if (NULL != public_key)
   {
     if (GNUNET_OK !=

Modified: gnunet/src/gns/gnunet-service-gns.c
===================================================================
--- gnunet/src/gns/gnunet-service-gns.c 2016-04-30 08:16:14 UTC (rev 37101)
+++ gnunet/src/gns/gnunet-service-gns.c 2016-04-30 08:17:37 UTC (rev 37102)
@@ -1010,8 +1010,7 @@
                                               &monitor_sync_event,
                                               NULL);
   GNUNET_break (NULL != zmon);
-  GNUNET_SCHEDULER_add_delayed (GNUNET_TIME_UNIT_FOREVER_REL,
-                               &shutdown_task, NULL);
+  GNUNET_SCHEDULER_add_shutdown (&shutdown_task, NULL);
 }
 
 

Modified: gnunet/src/gns/plugin_rest_gns.c
===================================================================
--- gnunet/src/gns/plugin_rest_gns.c    2016-04-30 08:16:14 UTC (rev 37101)
+++ gnunet/src/gns/plugin_rest_gns.c    2016-04-30 08:17:37 UTC (rev 37102)
@@ -632,9 +632,10 @@
   MHD_add_response_header (resp,
                            "Access-Control-Allow-Methods",
                            MHD_HTTP_METHOD_GET);
-  handle->proc (handle->proc_cls, resp, MHD_HTTP_OK);
+  handle->proc (handle->proc_cls,
+               resp,
+               MHD_HTTP_OK);
   cleanup_handle (handle);
-  return;
 }
 
 
@@ -671,7 +672,6 @@
 }
 
 
-
 /**
  * Entry point for the plugin.
  *

Modified: gnunet/src/gns/test_gns_proxy.c
===================================================================
--- gnunet/src/gns/test_gns_proxy.c     2016-04-30 08:16:14 UTC (rev 37101)
+++ gnunet/src/gns/test_gns_proxy.c     2016-04-30 08:17:37 UTC (rev 37102)
@@ -245,6 +245,7 @@
                                              NULL);
 }
 
+
 static void
 start_curl (void *cls)
 {
@@ -289,25 +290,27 @@
  *                specified target peer; NULL on error
  */
 static void
-commence_testing (void *cls, int32_t success, const char *emsg)
+commence_testing (void *cls,
+                 int32_t success,
+                 const char *emsg)
 {
   GNUNET_SCHEDULER_add_now (&disco_ns, NULL);
 
-  if ((emsg != NULL) && (GNUNET_YES != success))
+  if ( (emsg != NULL) && (GNUNET_YES != success) )
   {
     fprintf (stderr,
-            "NS failed to create record %s\n", emsg);
+            "NS failed to create record %s\n",
+            emsg);
     GNUNET_SCHEDULER_shutdown ();
     return;
   }
 
-  GNUNET_SCHEDULER_add_delayed (GNUNET_TIME_relative_multiply 
(GNUNET_TIME_UNIT_SECONDS, 1), start_curl, NULL);
-
+  curl_task_id =
+    GNUNET_SCHEDULER_add_delayed (GNUNET_TIME_UNIT_SECONDS, 
+                                 &start_curl, NULL);
 }
 
 
-
-
 /**
  * Function to keep the HTTP server running.
  */

Modified: gnunet/src/hostlist/gnunet-daemon-hostlist.c
===================================================================
--- gnunet/src/hostlist/gnunet-daemon-hostlist.c        2016-04-30 08:16:14 UTC 
(rev 37101)
+++ gnunet/src/hostlist/gnunet-daemon-hostlist.c        2016-04-30 08:17:37 UTC 
(rev 37102)
@@ -299,9 +299,8 @@
     GNUNET_HOSTLIST_server_start (cfg, stats, core, &server_ch, &server_dh,
                                   advertising);
 #endif
-  GNUNET_SCHEDULER_add_delayed (GNUNET_TIME_UNIT_FOREVER_REL,
-                               &cleaning_task,
-                                NULL);
+  GNUNET_SCHEDULER_add_shutdown (&cleaning_task,
+                                NULL);
 
   if (NULL == core)
   {

Modified: gnunet/src/hostlist/gnunet-daemon-hostlist_client.c
===================================================================
--- gnunet/src/hostlist/gnunet-daemon-hostlist_client.c 2016-04-30 08:16:14 UTC 
(rev 37101)
+++ gnunet/src/hostlist/gnunet-daemon-hostlist_client.c 2016-04-30 08:17:37 UTC 
(rev 37102)
@@ -210,27 +210,27 @@
 /**
  * ID of the task, checking if hostlist download should take plate
  */
-static struct GNUNET_SCHEDULER_Task * ti_check_download;
+static struct GNUNET_SCHEDULER_Task *ti_check_download;
 
 /**
  * ID of the task downloading the hostlist
  */
-static struct GNUNET_SCHEDULER_Task * ti_download;
+static struct GNUNET_SCHEDULER_Task *ti_download;
 
 /**
  * ID of the task saving the hostlsit in a regular intervall
  */
-static struct GNUNET_SCHEDULER_Task * ti_saving_task;
+static struct GNUNET_SCHEDULER_Task *ti_saving_task;
 
 /**
  * ID of the task called to initiate a download
  */
-static struct GNUNET_SCHEDULER_Task * ti_download_dispatcher_task;
+static struct GNUNET_SCHEDULER_Task *ti_download_dispatcher_task;
 
 /**
  * ID of the task controlling the locking between two hostlist tests
  */
-static struct GNUNET_SCHEDULER_Task * ti_testing_intervall_task;
+static struct GNUNET_SCHEDULER_Task *ti_testing_intervall_task;
 
 /**
  * At what time MUST the current hostlist request be done?
@@ -719,8 +719,9 @@
 {
   CURLMcode mret;
 
-  if ((stat_testing_hostlist == GNUNET_YES) &&
-      (GNUNET_NO == stat_download_successful) && (NULL != hostlist_to_test))
+  if ( (stat_testing_hostlist == GNUNET_YES) &&
+       (GNUNET_NO == stat_download_successful) &&
+       (NULL != hostlist_to_test) )
   {
     GNUNET_log (GNUNET_ERROR_TYPE_INFO,
                 _
@@ -738,7 +739,7 @@
     hostlist_to_test = NULL;
   }
 
-  if (multi != NULL)
+  if (NULL != multi)
   {
     mret = curl_multi_remove_handle (multi, curl);
     if (mret != CURLM_OK)
@@ -754,7 +755,7 @@
                   curl_multi_strerror (mret));
     multi = NULL;
   }
-  if (curl != NULL)
+  if (NULL != curl)
   {
     curl_easy_cleanup (curl);
     curl = NULL;
@@ -847,19 +848,8 @@
   int running;
   struct CURLMsg *msg;
   CURLMcode mret;
-  const struct GNUNET_SCHEDULER_TaskContext *tc;
 
   ti_download = NULL;
-  tc = GNUNET_SCHEDULER_get_task_context ();
-  if (0 != (tc->reason & GNUNET_SCHEDULER_REASON_SHUTDOWN))
-  {
-    GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
-                "Shutdown requested while trying to download hostlist from 
`%s'\n",
-                current_url);
-    update_hostlist ();
-    clean_up ();
-    return;
-  }
   if (0 == GNUNET_TIME_absolute_get_remaining (end_time).rel_value_us)
   {
     GNUNET_log (GNUNET_ERROR_TYPE_WARNING,
@@ -1047,12 +1037,7 @@
 static void
 task_download_dispatcher (void *cls)
 {
-  const struct GNUNET_SCHEDULER_TaskContext *tc;
-
   ti_download_dispatcher_task = NULL;
-  tc = GNUNET_SCHEDULER_get_task_context ();
-  if (0 != (tc->reason & GNUNET_SCHEDULER_REASON_SHUTDOWN))
-    return;
   GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Download is initiated...\n");
   if (GNUNET_NO == stat_download_in_progress)
   {
@@ -1080,12 +1065,8 @@
 {
   static int once;
   struct GNUNET_TIME_Relative delay;
-  const struct GNUNET_SCHEDULER_TaskContext *tc;
 
   ti_check_download = NULL;
-  tc = GNUNET_SCHEDULER_get_task_context ();
-  if (0 != (tc->reason & GNUNET_SCHEDULER_REASON_SHUTDOWN))
-    return;
   if (stats == NULL)
   {
     curl_global_cleanup ();
@@ -1120,7 +1101,8 @@
               _("Have %u/%u connections.  Will consider downloading hostlist 
in %s\n"),
               stat_connection_count, MIN_CONNECTIONS,
               GNUNET_STRINGS_relative_time_to_string (delay, GNUNET_YES));
-  ti_check_download = GNUNET_SCHEDULER_add_delayed (delay, &task_check, NULL);
+  ti_check_download = GNUNET_SCHEDULER_add_delayed (delay,
+                                                   &task_check, NULL);
 }
 
 
@@ -1132,12 +1114,7 @@
 static void
 task_testing_intervall_reset (void *cls)
 {
-  const struct GNUNET_SCHEDULER_TaskContext *tc;
-
   ti_testing_intervall_task = NULL;
-  tc = GNUNET_SCHEDULER_get_task_context ();
-  if (0 != (tc->reason & GNUNET_SCHEDULER_REASON_SHUTDOWN))
-    return;
   stat_testing_allowed = GNUNET_OK;
   GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
               "Testing new hostlist advertisements is allowed again\n");
@@ -1152,12 +1129,7 @@
 static void
 task_hostlist_saving (void *cls)
 {
-  const struct GNUNET_SCHEDULER_TaskContext *tc;
-
   ti_saving_task = NULL;
-  tc = GNUNET_SCHEDULER_get_task_context ();
-  if (0 != (tc->reason & GNUNET_SCHEDULER_REASON_SHUTDOWN))
-    return;
   save_hostlist_file (GNUNET_NO);
 
   GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
@@ -1164,7 +1136,8 @@
               "Hostlists will be saved to file again in %s\n",
              GNUNET_STRINGS_relative_time_to_string(SAVING_INTERVAL, 
GNUNET_YES));
   ti_saving_task =
-      GNUNET_SCHEDULER_add_delayed (SAVING_INTERVAL, &task_hostlist_saving,
+      GNUNET_SCHEDULER_add_delayed (SAVING_INTERVAL,
+                                   &task_hostlist_saving,
                                     NULL);
 }
 
@@ -1684,7 +1657,8 @@
 void
 GNUNET_HOSTLIST_client_stop ()
 {
-  GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Hostlist client shutdown\n");
+  GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
+             "Hostlist client shutdown\n");
   if (NULL != sget)
   {
     GNUNET_STATISTICS_get_cancel (sget);
@@ -1693,28 +1667,29 @@
   stats = NULL;
   if (GNUNET_YES == stat_learning)
     save_hostlist_file (GNUNET_YES);
-  if (ti_saving_task != NULL)
+  if (NULL != ti_saving_task)
   {
     GNUNET_SCHEDULER_cancel (ti_saving_task);
     ti_saving_task = NULL;
   }
-
-  if (ti_download_dispatcher_task != NULL)
+  if (NULL != ti_download_dispatcher_task)
     {
     GNUNET_SCHEDULER_cancel (ti_download_dispatcher_task);
     ti_download_dispatcher_task = NULL;
   }
-  if (ti_testing_intervall_task != NULL)
+  if (NULL != ti_testing_intervall_task)
   {
     GNUNET_SCHEDULER_cancel (ti_testing_intervall_task);
     ti_testing_intervall_task = NULL;
   }
-  if (ti_download != NULL)
+  if (NULL != ti_download)
   {
     GNUNET_SCHEDULER_cancel (ti_download);
     ti_download = NULL;
+    update_hostlist ();
+    clean_up ();
   }
-  if (ti_check_download != NULL)
+  if (NULL != ti_check_download)
   {
     GNUNET_SCHEDULER_cancel (ti_check_download);
     ti_check_download = NULL;

Modified: gnunet/src/hostlist/gnunet-daemon-hostlist_server.c
===================================================================
--- gnunet/src/hostlist/gnunet-daemon-hostlist_server.c 2016-04-30 08:16:14 UTC 
(rev 37101)
+++ gnunet/src/hostlist/gnunet-daemon-hostlist_server.c 2016-04-30 08:17:37 UTC 
(rev 37102)
@@ -74,12 +74,12 @@
 /**
  * Our primary task for IPv4.
  */
-static struct GNUNET_SCHEDULER_Task * hostlist_task_v4;
+static struct GNUNET_SCHEDULER_Task *hostlist_task_v4;
 
 /**
  * Our primary task for IPv6.
  */
-static struct GNUNET_SCHEDULER_Task * hostlist_task_v6;
+static struct GNUNET_SCHEDULER_Task *hostlist_task_v6;
 
 /**
  * Our canonical response.
@@ -632,15 +632,11 @@
 run_daemon (void *cls)
 {
   struct MHD_Daemon *daemon_handle = cls;
-  const struct GNUNET_SCHEDULER_TaskContext *tc;
 
   if (daemon_handle == daemon_handle_v4)
     hostlist_task_v4 = NULL;
   else
     hostlist_task_v6 = NULL;
-  tc = GNUNET_SCHEDULER_get_task_context ();
-  if (0 != (tc->reason & GNUNET_SCHEDULER_REASON_SHUTDOWN))
-    return;
   GNUNET_assert (MHD_YES == MHD_run (daemon_handle));
   if (daemon_handle == daemon_handle_v4)
     hostlist_task_v4 = prepare_daemon (daemon_handle);
@@ -675,7 +671,9 @@
   wrs = GNUNET_NETWORK_fdset_create ();
   wws = GNUNET_NETWORK_fdset_create ();
   max = -1;
-  GNUNET_assert (MHD_YES == MHD_get_fdset (daemon_handle, &rs, &ws, &es, 
&max));
+  GNUNET_assert (MHD_YES ==
+                MHD_get_fdset (daemon_handle,
+                               &rs, &ws, &es, &max));
   haveto = MHD_get_timeout (daemon_handle, &timeout);
   if (haveto == MHD_YES)
     tv.rel_value_us = (uint64_t) timeout * 1000LL;
@@ -683,10 +681,9 @@
     tv = GNUNET_TIME_UNIT_FOREVER_REL;
   GNUNET_NETWORK_fdset_copy_native (wrs, &rs, max + 1);
   GNUNET_NETWORK_fdset_copy_native (wws, &ws, max + 1);
-  ret =
-      GNUNET_SCHEDULER_add_select (GNUNET_SCHEDULER_PRIORITY_HIGH,
-                                  tv, wrs, wws,
-                                   &run_daemon, daemon_handle);
+  ret = GNUNET_SCHEDULER_add_select (GNUNET_SCHEDULER_PRIORITY_HIGH,
+                                    tv, wrs, wws,
+                                    &run_daemon, daemon_handle);
   GNUNET_NETWORK_fdset_destroy (wrs);
   GNUNET_NETWORK_fdset_destroy (wws);
   return ret;

Modified: gnunet/src/hostlist/test_gnunet_daemon_hostlist.c
===================================================================
--- gnunet/src/hostlist/test_gnunet_daemon_hostlist.c   2016-04-30 08:16:14 UTC 
(rev 37101)
+++ gnunet/src/hostlist/test_gnunet_daemon_hostlist.c   2016-04-30 08:17:37 UTC 
(rev 37102)
@@ -35,7 +35,7 @@
 
 static int ok;
 
-static struct GNUNET_SCHEDULER_Task * timeout_task;
+static struct GNUNET_SCHEDULER_Task *timeout_task;
 
 struct PeerContext
 {
@@ -100,11 +100,13 @@
  * @param distance in overlay hops, as given by transport plugin
  */
 static void
-notify_connect (void *cls, const struct GNUNET_PeerIdentity *peer)
+notify_connect (void *cls,
+               const struct GNUNET_PeerIdentity *peer)
 {
   if (peer == NULL)
     return;
-  GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Peers connected, shutting down.\n");
+  GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
+             "Peers connected, shutting down.\n");
   ok = 0;
   if (timeout_task != NULL)
   {
@@ -116,7 +118,8 @@
 
 
 static void
-process_hello (void *cls, const struct GNUNET_MessageHeader *message)
+process_hello (void *cls,
+              const struct GNUNET_MessageHeader *message)
 {
   struct PeerContext *p = cls;
 
@@ -170,8 +173,10 @@
 static void
 stop_arm (struct PeerContext *p)
 {
-  GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Asking ARM to stop core service\n");
-  GNUNET_SCHEDULER_add_delayed (GNUNET_TIME_UNIT_SECONDS, &waitpid_task, p);
+  GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
+             "Asking ARM to stop core service\n");
+  GNUNET_SCHEDULER_add_delayed (GNUNET_TIME_UNIT_SECONDS,
+                               &waitpid_task, p);
 }
 
 
@@ -187,14 +192,18 @@
 
 
 static void
-run (void *cls, char *const *args, const char *cfgfile,
+run (void *cls,
+     char *const *args,
+     const char *cfgfile,
      const struct GNUNET_CONFIGURATION_Handle *cfg)
 {
   GNUNET_assert (ok == 1);
   ok++;
-  timeout_task = GNUNET_SCHEDULER_add_delayed (TIMEOUT, &timeout_error, NULL);
-  GNUNET_SCHEDULER_add_delayed (GNUNET_TIME_UNIT_FOREVER_REL, &shutdown_task,
-                                NULL);
+  timeout_task = GNUNET_SCHEDULER_add_delayed (TIMEOUT,
+                                              &timeout_error,
+                                              NULL);
+  GNUNET_SCHEDULER_add_shutdown (&shutdown_task,
+                                NULL);
   setup_peer (&p1, "test_gnunet_daemon_hostlist_peer1.conf");
   setup_peer (&p2, "test_gnunet_daemon_hostlist_peer2.conf");
 }

Modified: gnunet/src/hostlist/test_gnunet_daemon_hostlist_learning.c
===================================================================
--- gnunet/src/hostlist/test_gnunet_daemon_hostlist_learning.c  2016-04-30 
08:16:14 UTC (rev 37101)
+++ gnunet/src/hostlist/test_gnunet_daemon_hostlist_learning.c  2016-04-30 
08:17:37 UTC (rev 37102)
@@ -242,7 +242,9 @@
 
 
 static int
-process_adv_sent (void *cls, const char *subsystem, const char *name,
+process_adv_sent (void *cls,
+                 const char *subsystem,
+                 const char *name,
                   uint64_t value, int is_persistent)
 {
   if ((value >= 1) && (adv_sent == GNUNET_NO))
@@ -267,13 +269,10 @@
 check_statistics (void *cls)
 {
   char *stat;
-  const struct GNUNET_SCHEDULER_TaskContext *tc;
 
   check_task = NULL;
-  tc = GNUNET_SCHEDULER_get_task_context ();
-  if (0 != (tc->reason & GNUNET_SCHEDULER_REASON_SHUTDOWN))
-    return;
-  GNUNET_asprintf (&stat, gettext_noop ("# advertised URI `%s' downloaded"),
+  GNUNET_asprintf (&stat,
+                  gettext_noop ("# advertised URI `%s' downloaded"),
                    current_adv_uri);
   if (NULL != learn_peer.stats)
   {
@@ -313,7 +312,8 @@
  * Core handler for p2p hostlist advertisements
  */
 static int
-ad_arrive_handler (void *cls, const struct GNUNET_PeerIdentity *peer,
+ad_arrive_handler (void *cls,
+                  const struct GNUNET_PeerIdentity *peer,
                    const struct GNUNET_MessageHeader *message)
 {
   char *hostname;

Modified: gnunet/src/hostlist/test_gnunet_daemon_hostlist_reconnect.c
===================================================================
--- gnunet/src/hostlist/test_gnunet_daemon_hostlist_reconnect.c 2016-04-30 
08:16:14 UTC (rev 37101)
+++ gnunet/src/hostlist/test_gnunet_daemon_hostlist_reconnect.c 2016-04-30 
08:17:37 UTC (rev 37102)
@@ -100,11 +100,13 @@
  * @param distance in overlay hops, as given by transport plugin
  */
 static void
-notify_connect (void *cls, const struct GNUNET_PeerIdentity *peer)
+notify_connect (void *cls,
+               const struct GNUNET_PeerIdentity *peer)
 {
   if (peer == NULL)
     return;
-  GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Peers connected, shutting down.\n");
+  GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
+             "Peers connected, shutting down.\n");
   ok = 0;
   if (timeout_task != NULL)
   {
@@ -116,7 +118,8 @@
 
 
 static void
-process_hello (void *cls, const struct GNUNET_MessageHeader *message)
+process_hello (void *cls,
+              const struct GNUNET_MessageHeader *message)
 {
   struct PeerContext *p = cls;
 
@@ -171,7 +174,8 @@
 stop_arm (struct PeerContext *p)
 {
   GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Asking ARM to stop core service\n");
-  GNUNET_SCHEDULER_add_delayed (GNUNET_TIME_UNIT_SECONDS, &waitpid_task, p);
+  GNUNET_SCHEDULER_add_delayed (GNUNET_TIME_UNIT_SECONDS,
+                               &waitpid_task, p);
 }
 
 
@@ -192,8 +196,10 @@
 {
   GNUNET_assert (ok == 1);
   ok++;
-  timeout_task = GNUNET_SCHEDULER_add_delayed (TIMEOUT, &timeout_error, NULL);
-  GNUNET_SCHEDULER_add_delayed (GNUNET_TIME_UNIT_FOREVER_REL, &shutdown_task,
+  timeout_task = GNUNET_SCHEDULER_add_delayed (TIMEOUT,
+                                              &timeout_error, NULL);
+  GNUNET_SCHEDULER_add_delayed (GNUNET_TIME_UNIT_FOREVER_REL,
+                               &shutdown_task,
                                 NULL);
   setup_peer (&p1, "test_gnunet_daemon_hostlist_peer1.conf");
   setup_peer (&p2, "test_gnunet_daemon_hostlist_peer2.conf");

Modified: gnunet/src/identity/gnunet-identity.c
===================================================================
--- gnunet/src/identity/gnunet-identity.c       2016-04-30 08:16:14 UTC (rev 
37101)
+++ gnunet/src/identity/gnunet-identity.c       2016-04-30 08:17:37 UTC (rev 
37102)
@@ -302,8 +302,7 @@
                                        create_ego,
                                        &create_finished,
                                        &create_op);
-  GNUNET_SCHEDULER_add_delayed (GNUNET_TIME_UNIT_FOREVER_REL,
-                               &shutdown_task, NULL);
+  GNUNET_SCHEDULER_add_shutdown (&shutdown_task, NULL);
   test_finished ();
 }
 

Modified: gnunet/src/identity/gnunet-service-identity.c
===================================================================
--- gnunet/src/identity/gnunet-service-identity.c       2016-04-30 08:16:14 UTC 
(rev 37101)
+++ gnunet/src/identity/gnunet-service-identity.c       2016-04-30 08:17:37 UTC 
(rev 37102)
@@ -916,8 +916,8 @@
   GNUNET_DISK_directory_scan (ego_directory,
                              &process_ego_file,
                              NULL);
-  GNUNET_SCHEDULER_add_delayed (GNUNET_TIME_UNIT_FOREVER_REL, &shutdown_task,
-                                NULL);
+  GNUNET_SCHEDULER_add_shutdown (&shutdown_task,
+                                NULL);
 }
 
 

Modified: gnunet/src/identity/plugin_rest_identity.c
===================================================================
--- gnunet/src/identity/plugin_rest_identity.c  2016-04-30 08:16:14 UTC (rev 
37101)
+++ gnunet/src/identity/plugin_rest_identity.c  2016-04-30 08:17:37 UTC (rev 
37102)
@@ -257,9 +257,9 @@
 
 
 /**
- * Task run on shutdown.  Cleans up everything.
+ * Task run on errors.  Reports an error and cleans up everything.
  *
- * @param cls unused
+ * @param cls the `struct RequestHandle`
  */
 static void
 do_error (void *cls)
@@ -273,7 +273,9 @@
                    &handle->emsg);
 
   resp = GNUNET_REST_create_json_response (json_error);
-  handle->proc (handle->proc_cls, resp, MHD_HTTP_BAD_REQUEST);
+  handle->proc (handle->proc_cls,
+               resp,
+               MHD_HTTP_BAD_REQUEST);
   cleanup_handle (handle);
   GNUNET_free (json_error);
 }

Modified: gnunet/src/identity/test_identity.c
===================================================================
--- gnunet/src/identity/test_identity.c 2016-04-30 08:16:14 UTC (rev 37101)
+++ gnunet/src/identity/test_identity.c 2016-04-30 08:17:37 UTC (rev 37102)
@@ -110,8 +110,7 @@
     GNUNET_SCHEDULER_cancel (endbadly_task);
     endbadly_task = NULL;
   }
-  GNUNET_SCHEDULER_add_delayed (GNUNET_TIME_UNIT_MILLISECONDS,
-                               &end_normally, NULL);
+  GNUNET_SCHEDULER_add_now (&end_normally, NULL);
 }
 
 

Modified: gnunet/src/identity-provider/gnunet-service-identity-provider.c
===================================================================
--- gnunet/src/identity-provider/gnunet-service-identity-provider.c     
2016-04-30 08:16:14 UTC (rev 37101)
+++ gnunet/src/identity-provider/gnunet-service-identity-provider.c     
2016-04-30 08:17:37 UTC (rev 37102)
@@ -105,13 +105,12 @@
 /**
  * Timeout task
  */
-static struct GNUNET_SCHEDULER_Task * timeout_task;
+static struct GNUNET_SCHEDULER_Task *timeout_task;
 
-
 /**
  * Update task
  */
-static struct GNUNET_SCHEDULER_Task * update_task;
+static struct GNUNET_SCHEDULER_Task *update_task;
 
 /**
  * Timeout for next update pass
@@ -494,9 +493,11 @@
   scopes = NULL;
 }
 
+
 static void
 update_identities(void *cls);
 
+
 /**
  *
  * Cleanup attr_map
@@ -504,7 +505,7 @@
  * @param cls NULL
  * @param key the key
  * @param value the json_t attribute value
- * @return GNUNET_YES
+ * @return #GNUNET_YES
  */
 static int
 clear_ego_attrs (void *cls,
@@ -530,6 +531,7 @@
   return GNUNET_YES;
 }
 
+
 /**
  *
  * Update all ID_TOKEN records for an identity and store them
@@ -539,7 +541,6 @@
  * @param lbl the name of the record
  * @param rd_count number of records
  * @param rd record data
- *
  */
 static void
 token_collect (void *cls,
@@ -579,7 +580,9 @@
   {
     token_metadata_record = &rd[0];
     token_record = &rd[1];
-  } else {
+  }
+  else
+  {
     token_record = &rd[0];
     token_metadata_record = &rd[1];
   }
@@ -607,7 +610,8 @@
   label = GNUNET_strdup (lbl);
   rd_exp = token_record->expiration_time;
 
-  GNUNET_SCHEDULER_add_now (&handle_token_update, ego_entry);
+  GNUNET_SCHEDULER_add_now (&handle_token_update,
+                           ego_entry);
 }
 
 
@@ -642,7 +646,8 @@
     GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
                 ">>> Updating Attributes finished\n");
     ego_entry->attributes_dirty = GNUNET_NO;
-    update_task = GNUNET_SCHEDULER_add_now (&update_identities, ego_entry);
+    update_task = GNUNET_SCHEDULER_add_now (&update_identities,
+                                           ego_entry);
     return;
   }
 
@@ -752,7 +757,6 @@
 }
 
 
-
 /**
  * Function called initially to start update task
  */
@@ -761,9 +765,11 @@
 {
   GNUNET_log (GNUNET_ERROR_TYPE_INFO, ">>> Starting Service\n");
   //Initially iterate all itenties and refresh all tokens
-  update_task = GNUNET_SCHEDULER_add_now (&update_identities, ego_head);
+  update_task = GNUNET_SCHEDULER_add_now (&update_identities,
+                                         ego_head);
 }
 
+
 /**
  * Initial ego collection function.
  *
@@ -934,6 +940,7 @@
   struct GNUNET_IDENTITY_PROVIDER_IssueResultMessage *irm;
   char *ticket_str;
   char *token_str;
+  
   handle->ns_qe = NULL;
   if (GNUNET_SYSERR == success)
   {
@@ -964,7 +971,9 @@
     GNUNET_SCHEDULER_add_now (&do_shutdown, NULL);
     return;
   }
-  irm = create_issue_result_message (handle->label, ticket_str, token_str);
+  irm = create_issue_result_message (handle->label,
+                                    ticket_str,
+                                    token_str);
   GNUNET_SERVER_notification_context_unicast (nc,
                                               handle->client,
                                               &irm->header,
@@ -1528,19 +1537,16 @@
     token_expiration_interval = DEFAULT_TOKEN_EXPIRATION_INTERVAL;
   }
 
-  GNUNET_SCHEDULER_add_delayed (GNUNET_TIME_UNIT_FOREVER_REL,
-                                &do_shutdown, NULL);
+  GNUNET_SCHEDULER_add_shutdown (&do_shutdown, NULL);
 }
 
 
 /**
- *
  * The main function
  *
  * @param argc number of arguments from the cli
  * @param argv command line arguments
  * @return 0 ok, 1 on error
- *
  */
 int
 main (int argc, char *const *argv)
@@ -1551,4 +1557,4 @@
                                &run, NULL)) ? 0 : 1;
 }
 
-/* end of gnunet-rest-server.c */
+/* end of gnunet-service-identity-provider.c */

Modified: gnunet/src/identity-provider/plugin_rest_identity_provider.c
===================================================================
--- gnunet/src/identity-provider/plugin_rest_identity_provider.c        
2016-04-30 08:16:14 UTC (rev 37101)
+++ gnunet/src/identity-provider/plugin_rest_identity_provider.c        
2016-04-30 08:17:37 UTC (rev 37102)
@@ -248,7 +248,7 @@
   /**
    * ID of a task associated with the resolution process.
    */
-  struct GNUNET_SCHEDULER_Task * timeout_task;
+  struct GNUNET_SCHEDULER_Task *timeout_task;
 
   /**
    * The plugin result processor
@@ -321,9 +321,9 @@
 
 
 /**
- * Task run on shutdown.  Cleans up everything.
+ * Task run on error, sends error message.  Cleans up everything.
  *
- * @param cls unused
+ * @param cls the `struct RequestHandle`
  */
 static void
 do_error (void *cls)
@@ -342,6 +342,21 @@
 }
 
 /**
+ * Task run on timeout, sends error message.  Cleans up everything.
+ *
+ * @param cls the `struct RequestHandle`
+ */
+static void
+do_timeout (void *cls)
+{
+  struct RequestHandle *handle = cls;
+
+  handle->timeout_task = NULL;
+  do_error (handle);
+}
+
+
+/**
  * Task run on shutdown.  Cleans up everything.
  *
  * @param cls unused
@@ -350,7 +365,8 @@
 do_cleanup_handle_delayed (void *cls)
 {
   struct RequestHandle *handle = cls;
-  cleanup_handle(handle);
+
+  cleanup_handle (handle);
 }
 
 
@@ -406,10 +422,9 @@
   handle->proc (handle->proc_cls, resp, MHD_HTTP_OK);
   GNUNET_free (result_str);
   GNUNET_SCHEDULER_add_now (&do_cleanup_handle_delayed, handle);
+}
 
 
-}
-
 /**
  * Continueationf for token issue request
  *
@@ -459,7 +474,8 @@
        GNUNET_CONTAINER_multihashmap_contains 
(handle->conndata_handle->url_param_map,
                                                &key) )
   {
-    GNUNET_log (GNUNET_ERROR_TYPE_ERROR, "Issuer not found\n");
+    GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
+               "Issuer not found\n");
     GNUNET_SCHEDULER_add_now (&do_error, handle);
     return;
   }
@@ -468,7 +484,9 @@
   if (NULL == ego_val)
   {
     GNUNET_SCHEDULER_add_now (&do_error, handle);
-    GNUNET_log (GNUNET_ERROR_TYPE_ERROR, "Ego invalid: %s\n", ego_val);
+    GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
+               "Ego invalid: %s\n",
+               ego_val);
     return;
   }
   for (ego_entry = handle->ego_head;
@@ -480,13 +498,18 @@
     egoname = ego_entry->identifier;
     break;
   }
-  if (NULL == egoname || NULL == ego_entry)
+  if ( (NULL == egoname) ||
+       (NULL == ego_entry) )
   {
-    GNUNET_log (GNUNET_ERROR_TYPE_ERROR, "Ego not found: %s\n", ego_val);
+    GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
+               "Ego not found: %s\n",
+               ego_val);
     GNUNET_SCHEDULER_add_now (&do_error, handle);
     return;
   }
-  GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Ego to issue token for: %s\n", 
egoname);
+  GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
+             "Ego to issue token for: %s\n",
+             egoname);
 
 
   //Meta info
@@ -516,13 +539,16 @@
        GNUNET_CONTAINER_multihashmap_contains 
(handle->conndata_handle->url_param_map,
                                                &key) )
   {
-    GNUNET_log (GNUNET_ERROR_TYPE_ERROR, "Audience missing!\n");
+    GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
+               "Audience missing!\n");
     GNUNET_SCHEDULER_add_now (&do_error, handle);
     return;
   }
   audience = GNUNET_CONTAINER_multihashmap_get 
(handle->conndata_handle->url_param_map,
                                                 &key);
-  GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Audience to issue token for: %s\n", 
audience);
+  GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
+             "Audience to issue token for: %s\n",
+             audience);
 
   priv_key = GNUNET_IDENTITY_ego_get_private_key (ego_entry->ego);
   GNUNET_IDENTITY_ego_get_public_key (ego_entry->ego,
@@ -547,7 +573,9 @@
   }
   nonce_str = GNUNET_CONTAINER_multihashmap_get 
(handle->conndata_handle->url_param_map,
                                                  &key);
-  GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Request nonce: %s\n", nonce_str);
+  GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
+             "Request nonce: %s\n",
+             nonce_str);
   sscanf (nonce_str, "%"SCNu64, &nonce);
 
   //Get expiration for token from URL parameter
@@ -1048,10 +1076,8 @@
                                                      handle);
   handle->timeout_task =
     GNUNET_SCHEDULER_add_delayed (handle->timeout,
-                                  &do_error,
+                                  &do_timeout,
                                   handle);
-
-
   GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
               "Connected\n");
 }

Modified: gnunet/src/include/gnunet_common.h
===================================================================
--- gnunet/src/include/gnunet_common.h  2016-04-30 08:16:14 UTC (rev 37101)
+++ gnunet/src/include/gnunet_common.h  2016-04-30 08:17:37 UTC (rev 37102)
@@ -66,7 +66,7 @@
 /**
  * Version of the API (for entire gnunetutil.so library).
  */
-#define GNUNET_UTIL_VERSION 0x000A0100
+#define GNUNET_UTIL_VERSION 0x000A0101
 
 
 /**

Modified: gnunet/src/include/gnunet_scheduler_lib.h
===================================================================
--- gnunet/src/include/gnunet_scheduler_lib.h   2016-04-30 08:16:14 UTC (rev 
37101)
+++ gnunet/src/include/gnunet_scheduler_lib.h   2016-04-30 08:17:37 UTC (rev 
37102)
@@ -65,8 +65,7 @@
   GNUNET_SCHEDULER_REASON_STARTUP = 1,
 
   /**
-   * We are shutting down and are running all shutdown-related tasks
-   * (regardless of timeout, etc.).
+   * We are shutting down and are running all shutdown-related tasks.
    */
   GNUNET_SCHEDULER_REASON_SHUTDOWN = 2,
 
@@ -158,7 +157,7 @@
  * tasks have completed.  On systems with signals, receiving a SIGTERM
  * (and other similar signals) will cause #GNUNET_SCHEDULER_shutdown
  * to be run after the active task is complete.  As a result, SIGTERM
- * causes all active tasks to be scheduled with reason
+ * causes all shutdown tasks to be scheduled with reason
  * #GNUNET_SCHEDULER_REASON_SHUTDOWN.  (However, tasks added
  * afterwards will execute normally!).  Note that any particular
  * signal will only shut down one scheduler; applications should
@@ -173,11 +172,10 @@
 
 
 /**
- * Request the shutdown of the scheduler.  Marks all currently
- * pending tasks as ready because of shutdown.  This will
- * cause all tasks to run (as soon as possible, respecting
- * priorities and prerequisite tasks).  Note that tasks
- * scheduled AFTER this call may still be delayed arbitrarily.
+ * Request the shutdown of a scheduler.  Marks all tasks 
+ * awaiting shutdown as ready. Note that tasks
+ * scheduled with #GNUNET_SCHEDULER_add_shutdown() AFTER this call
+ * will be delayed until the next shutdown signal.
  */
 void
 GNUNET_SCHEDULER_shutdown (void);
@@ -272,6 +270,21 @@
 
 
 /**
+ * Schedule a new task to be run on shutdown, that is when a CTRL-C
+ * signal is received, or when #GNUNET_SCHEDULER_shutdown() is being
+ * invoked.
+ *
+ * @param task main function of the task
+ * @param task_cls closure of @a task
+ * @return unique task identifier for the job
+ *         only valid until @a task is started!
+ */
+struct GNUNET_SCHEDULER_Task *
+GNUNET_SCHEDULER_add_shutdown (GNUNET_SCHEDULER_TaskCallback task,
+                              void *task_cls);
+
+
+/**
  * Schedule a new task to be run as soon as possible with the
  * (transitive) ignore-shutdown flag either explicitly set or
  * explicitly enabled.  This task (and all tasks created from it,
@@ -296,8 +309,7 @@
  * will be scheduled for execution once the delay has expired. It
  * will be run with the DEFAULT priority.
  *
- * * @param delay when should this operation time out? Use
- *        #GNUNET_TIME_UNIT_FOREVER_REL for "on shutdown"
+ * @param delay when should this operation time out?
  * @param task main function of the task
  * @param task_cls closure of @a task
  * @return unique task identifier for the job
@@ -313,8 +325,7 @@
  * Schedule a new task to be run with a specified delay.  The task
  * will be scheduled for execution once the delay has expired.
  *
- * @param delay when should this operation time out? Use
- *        #GNUNET_TIME_UNIT_FOREVER_REL for "on shutdown"
+ * @param delay when should this operation time out? 
  * @param priority priority to use for the task
  * @param task main function of the task
  * @param task_cls closure of @a task
@@ -335,8 +346,7 @@
  * scheduled for execution once either the delay has expired or the
  * socket operation is ready.  It will be run with the DEFAULT priority.
  *
- * * @param delay when should this operation time out? Use
- *        #GNUNET_TIME_UNIT_FOREVER_REL for "on shutdown"
+ * * @param delay when should this operation time out?
  * @param rfd read file-descriptor
  * @param task main function of the task
  * @param task_cls closure of @a task
@@ -358,8 +368,7 @@
  * either the delay has expired or the socket operation is ready.  It
  * will be run with the DEFAULT priority.
  *
- * @param delay when should this operation time out? Use
- *        #GNUNET_TIME_UNIT_FOREVER_REL for "on shutdown"
+ * @param delay when should this operation time out?
  * @param priority priority to use for the task
  * @param rfd read file-descriptor
  * @param task main function of the task
@@ -382,8 +391,7 @@
  * scheduled for execution once either the delay has expired or the
  * socket operation is ready.  It will be run with the DEFAULT priority.
  *
- * * @param delay when should this operation time out? Use
- *        #GNUNET_TIME_UNIT_FOREVER_REL for "on shutdown"
+ * * @param delay when should this operation time out?
  * @param wfd write file-descriptor
  * @param task main function of the task
  * @param task_cls closure of @a task
@@ -404,8 +412,7 @@
  * scheduled for execution once either the delay has expired or the
  * socket operation is ready.
  *
- * @param delay when should this operation time out? Use
- *        #GNUNET_TIME_UNIT_FOREVER_REL for "on shutdown"
+ * @param delay when should this operation time out?
  * @param priority priority of the task
  * @param fd file-descriptor
  * @param on_read whether to poll the file-descriptor for readability
@@ -431,8 +438,7 @@
  * scheduled for execution once either the delay has expired or the
  * socket operation is ready. It will be run with the DEFAULT priority.
  *
- * * @param delay when should this operation time out? Use
- *        #GNUNET_TIME_UNIT_FOREVER_REL for "on shutdown"
+ * * @param delay when should this operation time out?
  * @param rfd read file-descriptor
  * @param task main function of the task
  * @param task_cls closure of @a task
@@ -453,8 +459,7 @@
  * scheduled for execution once either the delay has expired or the
  * socket operation is ready. It will be run with the DEFAULT priority.
  *
- * * @param delay when should this operation time out? Use
- *        #GNUNET_TIME_UNIT_FOREVER_REL for "on shutdown"
+ * * @param delay when should this operation time out?
  * @param wfd write file-descriptor
  * @param task main function of the task
  * @param task_cls closure of @a task
@@ -475,8 +480,7 @@
  * scheduled for execution once either the delay has expired or the
  * socket operation is ready.
  *
- * @param delay when should this operation time out? Use
- *        #GNUNET_TIME_UNIT_FOREVER_REL for "on shutdown"
+ * @param delay when should this operation time out? 
  * @param priority priority of the task
  * @param fd file-descriptor
  * @param on_read whether to poll the file-descriptor for readability
@@ -508,13 +512,11 @@
  * (prerequisite-run)
  * && (delay-ready
  *     || any-rs-ready
- *     || any-ws-ready
- *     || shutdown-active)
+ *     || any-ws-ready)
  * </code>
  *
  * @param prio how important is this task?
- * @param delay how long should we wait? Use #GNUNET_TIME_UNIT_FOREVER_REL for 
"forever",
- *        which means that the task will only be run after we receive SIGTERM
+ * @param delay how long should we wait? 
  * @param rs set of file descriptors we want to read (can be NULL)
  * @param ws set of file descriptors we want to write (can be NULL)
  * @param task main function of the task

Modified: gnunet/src/multicast/gnunet-service-multicast.c
===================================================================
--- gnunet/src/multicast/gnunet-service-multicast.c     2016-04-30 08:16:14 UTC 
(rev 37101)
+++ gnunet/src/multicast/gnunet-service-multicast.c     2016-04-30 08:17:37 UTC 
(rev 37102)
@@ -1837,10 +1837,10 @@
 
   nc = GNUNET_SERVER_notification_context_create (server, 1);
   GNUNET_SERVER_add_handlers (server, server_handlers);
-  GNUNET_SERVER_disconnect_notify (server, &client_notify_disconnect, NULL);
-
-  GNUNET_SCHEDULER_add_delayed (GNUNET_TIME_UNIT_FOREVER_REL, &shutdown_task,
-                                NULL);
+  GNUNET_SERVER_disconnect_notify (server,
+                                  &client_notify_disconnect, NULL);
+  GNUNET_SCHEDULER_add_shutdown (&shutdown_task,
+                                NULL);
 }
 
 
@@ -1852,7 +1852,8 @@
  * @param cfg configuration to use
  */
 static void
-run (void *cls, struct GNUNET_SERVER_Handle *srv,
+run (void *cls,
+     struct GNUNET_SERVER_Handle *srv,
      const struct GNUNET_CONFIGURATION_Handle *c)
 {
   cfg = c;

Modified: gnunet/src/multicast/test_multicast.c
===================================================================
--- gnunet/src/multicast/test_multicast.c       2016-04-30 08:16:14 UTC (rev 
37101)
+++ gnunet/src/multicast/test_multicast.c       2016-04-30 08:17:37 UTC (rev 
37102)
@@ -276,7 +276,7 @@
     break;
 
   case TEST_MEMBER_PART:
-    GNUNET_SCHEDULER_add_now (schedule_origin_stop, NULL);
+    GNUNET_SCHEDULER_add_now (&schedule_origin_stop, NULL);
     break;
 
   default:
@@ -302,7 +302,7 @@
   test = TEST_MEMBER_PART;
   GNUNET_log (GNUNET_ERROR_TYPE_WARNING,
               "Test #%u: member_part()\n", test);
-  GNUNET_SCHEDULER_add_now (schedule_member_part, NULL);
+  GNUNET_SCHEDULER_add_now (&schedule_member_part, NULL);
 }
 
 
@@ -569,7 +569,7 @@
   {
   case TEST_MEMBER_JOIN_REFUSE:
     GNUNET_assert (0 == relay_count);
-    GNUNET_SCHEDULER_add_now (schedule_member_part, NULL);
+    GNUNET_SCHEDULER_add_now (&schedule_member_part, NULL);
     break;
 
   case TEST_MEMBER_JOIN_ADMIT:
@@ -695,7 +695,9 @@
  */
 static void
 #if DEBUG_TEST_MULTICAST
-run (void *cls, char *const *args, const char *cfgfile,
+run (void *cls,
+     char *const *args,
+     const char *cfgfile,
      const struct GNUNET_CONFIGURATION_Handle *c)
 #else
 run (void *cls,
@@ -704,10 +706,13 @@
 #endif
 {
   cfg = c;
-  end_badly_task = GNUNET_SCHEDULER_add_delayed (TIMEOUT, &end_badly, NULL);
-
-  core = GNUNET_CORE_connect (cfg, NULL, &core_connected, NULL, NULL,
-                              NULL, GNUNET_NO, NULL, GNUNET_NO, NULL);
+  end_badly_task = GNUNET_SCHEDULER_add_delayed (TIMEOUT,
+                                                &end_badly, NULL);
+  core = GNUNET_CORE_connect (cfg, NULL,
+                             &core_connected, NULL, NULL,
+                              NULL, GNUNET_NO,
+                             NULL, GNUNET_NO,
+                             NULL);
 }
 
 

Modified: gnunet/src/namecache/gnunet-namecache.c
===================================================================
--- gnunet/src/namecache/gnunet-namecache.c     2016-04-30 08:16:14 UTC (rev 
37101)
+++ gnunet/src/namecache/gnunet-namecache.c     2016-04-30 08:17:37 UTC (rev 
37102)
@@ -202,10 +202,8 @@
     return;
   }
 
-
-  GNUNET_SCHEDULER_add_delayed (GNUNET_TIME_UNIT_FOREVER_REL,
-                                &do_shutdown,
-                                NULL);
+  GNUNET_SCHEDULER_add_shutdown (&do_shutdown,
+                                NULL);
   ns = GNUNET_NAMECACHE_connect (cfg);
   GNUNET_GNSRECORD_query_from_public_key (&pubkey,
                                           name,

Modified: gnunet/src/namecache/gnunet-service-namecache.c
===================================================================
--- gnunet/src/namecache/gnunet-service-namecache.c     2016-04-30 08:16:14 UTC 
(rev 37101)
+++ gnunet/src/namecache/gnunet-service-namecache.c     2016-04-30 08:17:37 UTC 
(rev 37102)
@@ -404,8 +404,8 @@
   GNUNET_SERVER_disconnect_notify (server,
                                    &client_disconnect_notification,
                                    NULL);
-  GNUNET_SCHEDULER_add_delayed (GNUNET_TIME_UNIT_FOREVER_REL, &cleanup_task,
-                                NULL);
+  GNUNET_SCHEDULER_add_shutdown (&cleanup_task,
+                                NULL);
 }
 
 

Modified: gnunet/src/namecache/test_namecache_api_cache_block.c
===================================================================
--- gnunet/src/namecache/test_namecache_api_cache_block.c       2016-04-30 
08:16:14 UTC (rev 37101)
+++ gnunet/src/namecache/test_namecache_api_cache_block.c       2016-04-30 
08:17:37 UTC (rev 37102)
@@ -108,10 +108,11 @@
 
   GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
              "Block was decrypted successfully \n");
-
-       GNUNET_SCHEDULER_add_now (&end, NULL);
+  
+  GNUNET_SCHEDULER_add_now (&end, NULL);
 }
 
+
 static void
 name_lookup_proc (void *cls,
                   const struct GNUNET_GNSRECORD_Block *block)
@@ -131,7 +132,7 @@
   {
     GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
              _("Namecache returned no block\n"));
-    if (endbadly_task != NULL)
+    if (NULL != endbadly_task)
       GNUNET_SCHEDULER_cancel (endbadly_task);
     endbadly_task =  GNUNET_SCHEDULER_add_now (&endbadly, NULL);
     return;

Modified: gnunet/src/namestore/gnunet-namestore-fcfsd.c
===================================================================
--- gnunet/src/namestore/gnunet-namestore-fcfsd.c       2016-04-30 08:16:14 UTC 
(rev 37101)
+++ gnunet/src/namestore/gnunet-namestore-fcfsd.c       2016-04-30 08:17:37 UTC 
(rev 37102)
@@ -988,8 +988,7 @@
   }
   id_op = GNUNET_IDENTITY_get (identity, "fcfsd",
                               &identity_cb, NULL);
-  GNUNET_SCHEDULER_add_delayed (GNUNET_TIME_UNIT_FOREVER_REL,
-                               &do_shutdown, NULL);
+  GNUNET_SCHEDULER_add_shutdown (&do_shutdown, NULL);
 }
 
 

Modified: gnunet/src/namestore/gnunet-namestore.c
===================================================================
--- gnunet/src/namestore/gnunet-namestore.c     2016-04-30 08:16:14 UTC (rev 
37101)
+++ gnunet/src/namestore/gnunet-namestore.c     2016-04-30 08:17:37 UTC (rev 
37102)
@@ -1006,8 +1006,7 @@
     ret = -1;
     return;
   }
-  GNUNET_SCHEDULER_add_delayed (GNUNET_TIME_UNIT_FOREVER_REL,
-                                &do_shutdown, (void *) cfg);
+  GNUNET_SCHEDULER_add_shutdown (&do_shutdown, (void *) cfg);
 
   if (NULL == ego_name)
   {

Modified: gnunet/src/namestore/gnunet-service-namestore.c
===================================================================
--- gnunet/src/namestore/gnunet-service-namestore.c     2016-04-30 08:16:14 UTC 
(rev 37101)
+++ gnunet/src/namestore/gnunet-service-namestore.c     2016-04-30 08:17:37 UTC 
(rev 37102)
@@ -1689,8 +1689,8 @@
   GNUNET_SERVER_disconnect_notify (server,
                                    &client_disconnect_notification,
                                    NULL);
-  GNUNET_SCHEDULER_add_delayed (GNUNET_TIME_UNIT_FOREVER_REL, &cleanup_task,
-                                NULL);
+  GNUNET_SCHEDULER_add_shutdown (&cleanup_task,
+                                NULL);
 }
 
 

Modified: gnunet/src/namestore/plugin_rest_namestore.c
===================================================================
--- gnunet/src/namestore/plugin_rest_namestore.c        2016-04-30 08:16:14 UTC 
(rev 37101)
+++ gnunet/src/namestore/plugin_rest_namestore.c        2016-04-30 08:17:37 UTC 
(rev 37102)
@@ -242,6 +242,7 @@
 
 /**
  * Cleanup lookup handle
+ *
  * @param handle Handle to clean up
  */
 static void
@@ -250,6 +251,7 @@
   struct RecordEntry *record_entry;
   struct RecordEntry *record_tmp;
   int i;
+
   GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
               "Cleaning up\n");
   if (NULL != handle->resp_object)
@@ -295,6 +297,7 @@
   GNUNET_free (handle);
 }
 
+
 /**
  * Create json representation of a GNSRECORD
  *
@@ -350,9 +353,9 @@
 
 
 /**
- * Task run on shutdown.  Cleans up everything.
+ * Task run on error.  Generates error response and cleans up.
  *
- * @param cls unused
+ * @param cls the request to generate an error response for
  */
 static void
 do_error (void *cls)
@@ -365,7 +368,22 @@
 }
 
 
+/**
+ * Task run on timeout.
+ *
+ * @param cls the request to time out
+ */
 static void
+do_timeout (void *cls)
+{
+  struct RequestHandle *handle = cls;
+
+  handle->timeout_task = NULL;
+  do_error (handle);
+}
+
+
+static void
 cleanup_handle_delayed (void *cls)
 {
   cleanup_handle (cls);
@@ -1138,10 +1156,8 @@
                               &testservice_id_task,
                               handle);
   handle->timeout_task = GNUNET_SCHEDULER_add_delayed (handle->timeout,
-                                                       &do_error,
+                                                       &do_timeout,
                                                        handle);
-
-
 }
 
 /**

Modified: gnunet/src/nat/gnunet-nat-server.c
===================================================================
--- gnunet/src/nat/gnunet-nat-server.c  2016-04-30 08:16:14 UTC (rev 37101)
+++ gnunet/src/nat/gnunet-nat-server.c  2016-04-30 08:17:37 UTC (rev 37102)
@@ -294,8 +294,8 @@
       GNUNET_SERVER_create (NULL, NULL, (struct sockaddr * const *) sa, slen,
                             GNUNET_TIME_UNIT_SECONDS, GNUNET_YES);
   GNUNET_SERVER_add_handlers (server, handlers);
-  GNUNET_SCHEDULER_add_delayed (GNUNET_TIME_UNIT_FOREVER_REL, &shutdown_task,
-                                NULL);
+  GNUNET_SCHEDULER_add_shutdown (&shutdown_task,
+                                NULL);
 }
 
 

Modified: gnunet/src/nat/nat.c
===================================================================
--- gnunet/src/nat/nat.c        2016-04-30 08:16:14 UTC (rev 37101)
+++ gnunet/src/nat/nat.c        2016-04-30 08:17:37 UTC (rev 37102)
@@ -603,7 +603,8 @@
  */
 static void
 add_ip_to_address_list (struct GNUNET_NAT_Handle *h,
-                        enum LocalAddressSource src, const void *addr,
+                        enum LocalAddressSource src,
+                       const void *addr,
                         socklen_t addrlen)
 {
   struct sockaddr_in s4;
@@ -913,10 +914,12 @@
     GNUNET_break (0);
     return GNUNET_OK;
   }
-  if ((h->internal_address == NULL) && (h->server_proc == NULL) &&
-      (h->server_read_task == NULL) &&
-      (GNUNET_YES == isDefault) && ((addr->sa_family == AF_INET) ||
-                                    (addr->sa_family == AF_INET6)))
+  if ( (h->internal_address == NULL) &&
+       (h->server_proc == NULL) &&
+       (h->server_read_task == NULL) &&
+       (GNUNET_YES == isDefault) &&
+       ( (addr->sa_family == AF_INET) ||
+        (addr->sa_family == AF_INET6) ) )
   {
     /* no internal address configured, but we found a "default"
      * interface, try using that as our 'internal' address */
@@ -938,12 +941,8 @@
 restart_nat_server (void *cls)
 {
   struct GNUNET_NAT_Handle *h = cls;
-  const struct GNUNET_SCHEDULER_TaskContext *tc;
 
   h->server_read_task = NULL;
-  tc = GNUNET_SCHEDULER_get_task_context ();
-  if (0 != (tc->reason & GNUNET_SCHEDULER_REASON_SHUTDOWN))
-    return;
   start_gnunet_nat_server (h);
 }
 
@@ -965,12 +964,8 @@
   int port;
   const char *port_start;
   struct sockaddr_in sin_addr;
-  const struct GNUNET_SCHEDULER_TaskContext *tc;
 
   h->server_read_task = NULL;
-  tc = GNUNET_SCHEDULER_get_task_context ();
-  if ((tc->reason & GNUNET_SCHEDULER_REASON_SHUTDOWN) != 0)
-    return;
   memset (mybuf, 0, sizeof (mybuf));
   bytes =
     GNUNET_DISK_file_read (h->server_stdout_handle, mybuf, sizeof (mybuf));
@@ -1036,7 +1031,8 @@
                         sizeof (sin_addr));
   h->server_read_task =
       GNUNET_SCHEDULER_add_read_file (GNUNET_TIME_UNIT_FOREVER_REL,
-                                      h->server_stdout_handle, 
&nat_server_read,
+                                      h->server_stdout_handle,
+                                     &nat_server_read,
                                       h);
 }
 

Modified: gnunet/src/nat/nat_auto.c
===================================================================
--- gnunet/src/nat/nat_auto.c   2016-04-30 08:16:14 UTC (rev 37101)
+++ gnunet/src/nat/nat_auto.c   2016-04-30 08:17:37 UTC (rev 37102)
@@ -273,7 +273,9 @@
       (GNUNET_NETWORK_fdset_isset (tc->read_ready,
                                    lsock4)))
   {
-    rlen = GNUNET_NETWORK_socket_recv (lsock4, reply_buf, sizeof (reply_buf));
+    rlen = GNUNET_NETWORK_socket_recv (lsock4,
+                                      reply_buf,
+                                      sizeof (reply_buf));
 
     //Lets handle the packet
     memset(&answer, 0, sizeof(struct sockaddr_in));
@@ -288,7 +290,8 @@
     }
     else
     {
-      if (GNUNET_OK == GNUNET_NAT_stun_handle_packet (reply_buf, rlen, 
&answer))
+      if (GNUNET_OK ==
+         GNUNET_NAT_stun_handle_packet (reply_buf, rlen, &answer))
       {
         //Process the answer
         process_stun_reply (&answer, ah);
@@ -310,9 +313,6 @@
 
     next_phase (ah);
   }
-
-
-
 }
 
 
@@ -352,10 +352,9 @@
 }
 
 
-
-
-static void request_callback (void *cls,
-                              enum GNUNET_NAT_StatusCode result)
+static void
+request_callback (void *cls,
+                 enum GNUNET_NAT_StatusCode result)
 {
   // struct GNUNET_NAT_AutoHandle *ah = cls;
 
@@ -363,12 +362,9 @@
   stop_stun ();
 
   // next_phase (ah); FIXME this always will be NULL, as called in test_stun()
-};
+}
 
 
-
-
-
 /**
  * Function called by NAT to report the outcome of the nat-test.
  * Clean up and update GUI.
@@ -518,8 +514,9 @@
   {
     //Lets call our function now when it accepts
     ltask4 = GNUNET_SCHEDULER_add_read_net (NAT_SERVER_TIMEOUT,
-                                            lsock4, &do_udp_read, ah);
-
+                                            lsock4,
+                                           &do_udp_read,
+                                           ah);
   }
 
 
@@ -526,9 +523,11 @@
   GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
               "STUN service listens on port %u\n",
               port);
-  if (GNUNET_NO == GNUNET_NAT_stun_make_request (stun_server, stun_port,
-                                                 lsock4, &request_callback,
-                                                 NULL))
+  if (GNUNET_NO ==
+      GNUNET_NAT_stun_make_request (stun_server, stun_port,
+                                   lsock4,
+                                   &request_callback,
+                                   NULL))
   {
     /*An error happened*/
     GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "STUN error, stopping\n");
@@ -538,7 +537,6 @@
 }
 
 
-
 /**
  * Process list of local IP addresses.  Find and set the
  * one of the default interface.
@@ -550,16 +548,16 @@
  * @param broadcast_addr the broadcast address (can be NULL for unknown or 
unassigned)
  * @param netmask the network mask (can be NULL for unknown or unassigned))
  * @param addrlen length of the @a addr and @a broadcast_addr
- * @return GNUNET_OK to continue iteration, #GNUNET_SYSERR to abort
+ * @return #GNUNET_OK to continue iteration, #GNUNET_SYSERR to abort
  */
 static int
 process_if (void *cls,
-      const char *name,
-      int isDefault,
-      const struct sockaddr *addr,
-      const struct sockaddr *broadcast_addr,
-      const struct sockaddr *netmask,
-      socklen_t addrlen)
+           const char *name,
+           int isDefault,
+           const struct sockaddr *addr,
+           const struct sockaddr *broadcast_addr,
+           const struct sockaddr *netmask,
+           socklen_t addrlen)
 {
   struct GNUNET_NAT_AutoHandle *ah = cls;
   const struct sockaddr_in *in;
@@ -640,11 +638,9 @@
 static void
 test_nat_punched (struct GNUNET_NAT_AutoHandle *ah)
 {
-
   struct GNUNET_CLIENT_Connection *client;
   struct GNUNET_NAT_TestMessage msg;
 
-
   if (ah->stun_ip)
   {
     LOG (GNUNET_ERROR_TYPE_INFO,
@@ -676,9 +672,10 @@
     {
       GNUNET_SCHEDULER_cancel (ltask4);
       ltask4 = GNUNET_SCHEDULER_add_read_net (NAT_SERVER_TIMEOUT,
-                                              lsock4, &do_udp_read, ah);
+                                              lsock4,
+                                             &do_udp_read,
+                                             ah);
     }
-
   }
   else
   {
@@ -686,13 +683,9 @@
          "We don't have a STUN IP");
     next_phase(ah);
   }
-
-
 }
 
 
-
-
 /**
  * Test if UPnPC works.
  *
@@ -772,7 +765,6 @@
     ah->task = GNUNET_SCHEDULER_add_now (&reversal_test, ah);
   else
     next_phase (ah);
-
 }
 
 
@@ -784,8 +776,6 @@
 static void
 test_icmp_client (struct GNUNET_NAT_AutoHandle *ah)
 {
-
-
   char *tmp;
   char *helper;
 
@@ -802,7 +792,8 @@
 
   if (GNUNET_YES !=
       GNUNET_CONFIGURATION_get_value_yesno (ah->cfg, "nat", "BEHIND_NAT")){
-    GNUNET_log (GNUNET_ERROR_TYPE_INFO, _("test_icmp_server not possible, as 
we are not behind NAT\n"));
+    GNUNET_log (GNUNET_ERROR_TYPE_INFO,
+               _("test_icmp_server not possible, as we are not behind NAT\n"));
   }
   else
     goto err;
@@ -810,7 +801,8 @@
   if (GNUNET_YES ==
       GNUNET_OS_check_helper_binary (helper, GNUNET_YES, "-d 127.0.0.1 
127.0.0.2 42")){
           // none of these parameters are actually used in privilege testing 
mode
-    GNUNET_log (GNUNET_ERROR_TYPE_INFO, _("No working gnunet-helper-nat-server 
found\n"));
+    GNUNET_log (GNUNET_ERROR_TYPE_INFO,
+               _("No working gnunet-helper-nat-server found\n"));
   }
 err:
   GNUNET_free_non_null (tmp);
@@ -817,7 +809,6 @@
   GNUNET_free (helper);
 
   next_phase (ah);
-
 }
 
 
@@ -940,11 +931,7 @@
     GNUNET_CONFIGURATION_destroy (diff);
     GNUNET_NAT_autoconfig_cancel (ah);
     return;
-
   }
-
-
-
 }
 
 

Modified: gnunet/src/nat/nat_mini.c
===================================================================
--- gnunet/src/nat/nat_mini.c   2016-04-30 08:16:14 UTC (rev 37101)
+++ gnunet/src/nat/nat_mini.c   2016-04-30 08:17:37 UTC (rev 37102)
@@ -121,11 +121,15 @@
 
   eh->task = NULL;
   tc = GNUNET_SCHEDULER_get_task_context ();
-  if (GNUNET_YES == GNUNET_NETWORK_fdset_handle_isset (tc->read_ready, eh->r))
+  if (GNUNET_YES ==
+      GNUNET_NETWORK_fdset_handle_isset (tc->read_ready, eh->r))
+  {
     ret =
         GNUNET_DISK_file_read (eh->r, &eh->buf[eh->off],
                                sizeof (eh->buf) - eh->off);
-  else {
+  }
+  else
+  {
     eh->ret = GNUNET_NAT_ERROR_IPC_FAILURE;
     ret = -1;                   /* error reading, timeout, etc. */
   }
@@ -541,7 +545,9 @@
                 GNUNET_NAT_ERROR_UPNPC_PORTMAP_FAILED);
     if (NULL == mini->refresh_task)
       mini->refresh_task =
-        GNUNET_SCHEDULER_add_delayed (MAP_REFRESH_FREQ, &do_refresh, mini);
+        GNUNET_SCHEDULER_add_delayed (MAP_REFRESH_FREQ,
+                                     &do_refresh,
+                                     mini);
     return;
   }
   /*
@@ -617,7 +623,9 @@
   ret->is_tcp = is_tcp;
   ret->port = port;
   ret->refresh_task =
-    GNUNET_SCHEDULER_add_delayed (MAP_REFRESH_FREQ, &do_refresh, ret);
+    GNUNET_SCHEDULER_add_delayed (MAP_REFRESH_FREQ,
+                                 &do_refresh,
+                                 ret);
   run_upnpc_r (ret);
   return ret;
 }

Modified: gnunet/src/nat/nat_test.c
===================================================================
--- gnunet/src/nat/nat_test.c   2016-04-30 08:16:14 UTC (rev 37101)
+++ gnunet/src/nat/nat_test.c   2016-04-30 08:17:37 UTC (rev 37102)
@@ -252,7 +252,9 @@
   tc = GNUNET_SCHEDULER_get_task_context ();
   na->rtask = NULL;
   tst = na->h;
-  GNUNET_CONTAINER_DLL_remove (tst->na_head, tst->na_tail, na);
+  GNUNET_CONTAINER_DLL_remove (tst->na_head,
+                              tst->na_tail,
+                              na);
   if ((NULL != tc->write_ready) &&
       (GNUNET_NETWORK_fdset_isset (tc->read_ready, na->sock)) &&
       (sizeof (data) ==
@@ -284,14 +286,10 @@
   struct GNUNET_NAT_Test *tst = cls;
   struct GNUNET_NETWORK_Handle *s;
   struct NatActivity *wl;
-  const struct GNUNET_SCHEDULER_TaskContext *tc;
 
-  tst->ltask = NULL;
-  tc = GNUNET_SCHEDULER_get_task_context ();
-  if (0 != (tc->reason & GNUNET_SCHEDULER_REASON_SHUTDOWN))
-    return;
   tst->ltask =
-      GNUNET_SCHEDULER_add_read_net (GNUNET_TIME_UNIT_FOREVER_REL, tst->lsock,
+      GNUNET_SCHEDULER_add_read_net (GNUNET_TIME_UNIT_FOREVER_REL,
+                                    tst->lsock,
                                      &do_accept, tst);
   s = GNUNET_NETWORK_socket_accept (tst->lsock, NULL, NULL);
   if (NULL == s)
@@ -308,7 +306,9 @@
     GNUNET_SCHEDULER_add_read_net (GNUNET_TIME_UNIT_FOREVER_REL,
                                    wl->sock,
                                    &do_read, wl);
-  GNUNET_CONTAINER_DLL_insert (tst->na_head, tst->na_tail, wl);
+  GNUNET_CONTAINER_DLL_insert (tst->na_head,
+                              tst->na_tail,
+                              wl);
 }
 
 
@@ -474,13 +474,15 @@
       GNUNET_break (GNUNET_OK == GNUNET_NETWORK_socket_listen (nh->lsock, 5));
       nh->ltask =
           GNUNET_SCHEDULER_add_read_net (GNUNET_TIME_UNIT_FOREVER_REL,
-                                         nh->lsock, &do_accept, nh);
+                                         nh->lsock,
+                                        &do_accept, nh);
     }
     else
     {
       nh->ltask =
           GNUNET_SCHEDULER_add_read_net (GNUNET_TIME_UNIT_FOREVER_REL,
-                                         nh->lsock, &do_udp_read, nh);
+                                         nh->lsock,
+                                        &do_udp_read, nh);
     }
     LOG (GNUNET_ERROR_TYPE_INFO,
         "NAT test listens on port %u (%s)\n",
@@ -508,7 +510,9 @@
       return nh;
     }
   }
-  nh->ttask = GNUNET_SCHEDULER_add_delayed (timeout, &do_timeout, nh);
+  nh->ttask = GNUNET_SCHEDULER_add_delayed (timeout,
+                                           &do_timeout,
+                                           nh);
   return nh;
 }
 
@@ -528,13 +532,17 @@
        "Stopping NAT test\n");
   while (NULL != (cpos = tst->ca_head))
   {
-    GNUNET_CONTAINER_DLL_remove (tst->ca_head, tst->ca_tail, cpos);
+    GNUNET_CONTAINER_DLL_remove (tst->ca_head,
+                                tst->ca_tail,
+                                cpos);
     GNUNET_CLIENT_disconnect (cpos->client);
     GNUNET_free (cpos);
   }
   while (NULL != (pos = tst->na_head))
   {
-    GNUNET_CONTAINER_DLL_remove (tst->na_head, tst->na_tail, pos);
+    GNUNET_CONTAINER_DLL_remove (tst->na_head,
+                                tst->na_tail,
+                                pos);
     GNUNET_SCHEDULER_cancel (pos->rtask);
     GNUNET_NETWORK_socket_close (pos->sock);
     GNUNET_free (pos);

Modified: gnunet/src/nat/test_nat.c
===================================================================
--- gnunet/src/nat/test_nat.c   2016-04-30 08:16:14 UTC (rev 37101)
+++ gnunet/src/nat/test_nat.c   2016-04-30 08:17:37 UTC (rev 37102)
@@ -69,7 +69,8 @@
 {
   struct GNUNET_NAT_Handle *nat = cls;
 
-  GNUNET_log (GNUNET_ERROR_TYPE_INFO, "Stopping NAT and quitting...\n");
+  GNUNET_log (GNUNET_ERROR_TYPE_INFO,
+             "Stopping NAT and quitting...\n");
   GNUNET_NAT_unregister (nat);
 }
 

Modified: gnunet/src/nse/gnunet-nse-profiler.c
===================================================================
--- gnunet/src/nse/gnunet-nse-profiler.c        2016-04-30 08:16:14 UTC (rev 
37101)
+++ gnunet/src/nse/gnunet-nse-profiler.c        2016-04-30 08:17:37 UTC (rev 
37102)
@@ -177,11 +177,6 @@
 static struct GNUNET_CONFIGURATION_Handle *testing_cfg;
 
 /**
- * The shutdown task
- */
-static struct GNUNET_SCHEDULER_Task * shutdown_task_id;
-
-/**
  * Maximum number of connections to NSE services.
  */
 static unsigned int connection_limit;
@@ -228,9 +223,9 @@
 static struct OpListEntry *oplist_tail;
 
 /**
- * Are we shutting down
+ * Task running each round of the experiment.
  */
-static int shutting_down;
+static struct GNUNET_SCHEDULER_Task *round_task;
 
 
 /**
@@ -269,12 +264,13 @@
 static void
 shutdown_task (void *cls)
 {
-  shutdown_task_id = NULL;
-  if (GNUNET_YES == shutting_down)
-    return;
-  shutting_down = GNUNET_YES;
   LOG_DEBUG ("Ending test.\n");
   close_monitor_connections ();
+  if (NULL != round_task)
+  {
+    GNUNET_SCHEDULER_cancel (round_task);
+    round_task = NULL;
+  }
   if (NULL != data_file)
   {
     GNUNET_DISK_file_close (data_file);
@@ -286,24 +282,14 @@
     output_file = NULL;
   }
   if (NULL != testing_cfg)
+  {
     GNUNET_CONFIGURATION_destroy (testing_cfg);
-  testing_cfg = NULL;
+    testing_cfg = NULL;
+  }
 }
 
 
 /**
- * Schedules shutdown task to be run now
- */
-static void
-shutdown_now ()
-{
-  if (NULL != shutdown_task_id)
-    GNUNET_SCHEDULER_cancel (shutdown_task_id);
-  shutdown_task_id = GNUNET_SCHEDULER_add_now (&shutdown_task, NULL);
-}
-
-
-/**
  * Callback to call when network size estimate is updated.
  *
  * @param cls closure with the 'struct NSEPeer' providing the update
@@ -556,14 +542,11 @@
 static void
 finish_round (void *cls)
 {
-  const struct GNUNET_SCHEDULER_TaskContext *tc;
-
-  tc = GNUNET_SCHEDULER_get_task_context ();
-  if (0 != (GNUNET_SCHEDULER_REASON_SHUTDOWN & tc->reason))
-    return;
-  LOG (GNUNET_ERROR_TYPE_INFO, "Have %u connections\n", total_connections);
+  LOG (GNUNET_ERROR_TYPE_INFO,
+       "Have %u connections\n",
+       total_connections);
   close_monitor_connections ();
-  GNUNET_SCHEDULER_add_now (&next_round, NULL);
+  round_task = GNUNET_SCHEDULER_add_now (&next_round, NULL);
 }
 
 
@@ -575,7 +558,8 @@
 static void
 run_round ()
 {
-  LOG_DEBUG ("Running round %u\n", current_round);
+  LOG_DEBUG ("Running round %u\n",
+            current_round);
   connect_nse_service ();
   GNUNET_SCHEDULER_add_delayed (wait_time,
                                &finish_round,
@@ -592,7 +576,9 @@
   struct OpListEntry *entry;
 
   entry = GNUNET_new (struct OpListEntry);
-  GNUNET_CONTAINER_DLL_insert_tail (oplist_head, oplist_tail, entry);
+  GNUNET_CONTAINER_DLL_insert_tail (oplist_head,
+                                   oplist_tail,
+                                   entry);
   return entry;
 }
 
@@ -605,7 +591,8 @@
  * @param emsg NULL on success; otherwise an error description
  */
 static void
-manage_service_cb (void *cls, struct GNUNET_TESTBED_Operation *op,
+manage_service_cb (void *cls,
+                  struct GNUNET_TESTBED_Operation *op,
                    const char *emsg)
 {
   struct OpListEntry *entry = cls;
@@ -619,7 +606,9 @@
   }
   GNUNET_assert (0 != entry->delta);
   peers_running += entry->delta;
-  GNUNET_CONTAINER_DLL_remove (oplist_head, oplist_tail, entry);
+  GNUNET_CONTAINER_DLL_remove (oplist_head,
+                              oplist_tail,
+                              entry);
   GNUNET_free (entry);
   if (num_peers_in_round[current_round] == peers_running)
     run_round ();
@@ -672,26 +661,22 @@
 static void
 next_round (void *cls)
 {
-  const struct GNUNET_SCHEDULER_TaskContext *tc;
-
-  tc = GNUNET_SCHEDULER_get_task_context ();
-  if (0 != (GNUNET_SCHEDULER_REASON_SHUTDOWN & tc->reason))
-    return;
+  round_task = NULL;
   LOG_DEBUG ("Disconnecting nse service of peers\n");
   current_round++;
   if (current_round == num_rounds)
-    {
-      /* this was the last round, terminate */
-      ok = 0;
-      GNUNET_SCHEDULER_shutdown ();
-      return;
-    }
+  {
+    /* this was the last round, terminate */
+    ok = 0;
+    GNUNET_SCHEDULER_shutdown ();
+    return;
+  }
   if (num_peers_in_round[current_round] == peers_running)
-    {
-      /* no need to churn, just run next round */
-      run_round ();
-      return;
-    }
+  {
+    /* no need to churn, just run next round */
+    run_round ();
+    return;
+  }
   adjust_running_peers ();
 }
 
@@ -744,7 +729,7 @@
 {
   if (NULL == peers)
   {
-    shutdown_now ();
+    GNUNET_SCHEDULER_shutdown ();
     return;
   }
   daemons = peers;
@@ -838,9 +823,7 @@
                       NULL,     /* master_controller_cb cls */
                       &test_master,
                       NULL);    /* test_master cls */
-  shutdown_task_id =
-      GNUNET_SCHEDULER_add_delayed (GNUNET_TIME_UNIT_FOREVER_REL,
-                                    &shutdown_task, NULL);
+  GNUNET_SCHEDULER_add_shutdown (&shutdown_task, NULL);
 }
 
 

Modified: gnunet/src/nse/gnunet-nse.c
===================================================================
--- gnunet/src/nse/gnunet-nse.c 2016-04-30 08:16:14 UTC (rev 37101)
+++ gnunet/src/nse/gnunet-nse.c 2016-04-30 08:17:37 UTC (rev 37102)
@@ -143,8 +143,8 @@
                                      GNUNET_TIME_UNIT_SECONDS,
                                      nse_test_result,
                                      NULL);
-  shutdown_task = GNUNET_SCHEDULER_add_delayed (GNUNET_TIME_UNIT_FOREVER_REL,
-                                                &do_shutdown, NULL);
+  shutdown_task = GNUNET_SCHEDULER_add_shutdown (&do_shutdown,
+                                                NULL);
 }
 
 

Modified: gnunet/src/nse/gnunet-service-nse.c
===================================================================
--- gnunet/src/nse/gnunet-service-nse.c 2016-04-30 08:16:14 UTC (rev 37101)
+++ gnunet/src/nse/gnunet-service-nse.c 2016-04-30 08:17:37 UTC (rev 37102)
@@ -784,7 +784,9 @@
   delay =
       get_transmit_delay ((peer_entry->previous_round == GNUNET_NO) ? -1 : 0);
   peer_entry->transmit_task =
-      GNUNET_SCHEDULER_add_delayed (delay, &transmit_task_cb, peer_entry);
+      GNUNET_SCHEDULER_add_delayed (delay, 
+                                   &transmit_task_cb,
+                                   peer_entry);
   return GNUNET_OK;
 }
 
@@ -799,18 +801,15 @@
 {
   struct GNUNET_TIME_Relative offset;
   unsigned int i;
-  const struct GNUNET_SCHEDULER_TaskContext *tc;
 
   flood_task = NULL;
-  tc = GNUNET_SCHEDULER_get_task_context ();
-  if (0 != (tc->reason & GNUNET_SCHEDULER_REASON_SHUTDOWN))
-    return;
   offset = GNUNET_TIME_absolute_get_remaining (next_timestamp);
   if (0 != offset.rel_value_us)
   {
     /* somehow run early, delay more */
     flood_task =
-        GNUNET_SCHEDULER_add_delayed (offset, &update_flood_message, NULL);
+        GNUNET_SCHEDULER_add_delayed (offset,
+                                     &update_flood_message, NULL);
     return;
   }
   estimate_index = (estimate_index + 1) % HISTORY_SIZE;
@@ -841,7 +840,8 @@
                                          NULL);
   flood_task =
       GNUNET_SCHEDULER_add_delayed (GNUNET_TIME_absolute_get_remaining
-                                    (next_timestamp), &update_flood_message,
+                                    (next_timestamp),
+                                   &update_flood_message,
                                     NULL);
 }
 
@@ -1043,7 +1043,8 @@
   }
   delay = get_transmit_delay (0);
   peer_entry->transmit_task =
-      GNUNET_SCHEDULER_add_delayed (delay, &transmit_task_cb, peer_entry);
+      GNUNET_SCHEDULER_add_delayed (delay,
+                                   &transmit_task_cb, peer_entry);
   return GNUNET_OK;
 }
 
@@ -1439,7 +1440,8 @@
   }
   flood_task =
       GNUNET_SCHEDULER_add_delayed (GNUNET_TIME_absolute_get_remaining
-                                    (next_timestamp), &update_flood_message,
+                                    (next_timestamp),
+                                   &update_flood_message,
                                     NULL);
 }
 
@@ -1560,8 +1562,8 @@
   }
 #endif
 
-  GNUNET_SCHEDULER_add_delayed (GNUNET_TIME_UNIT_FOREVER_REL, &shutdown_task,
-                                NULL);
+  GNUNET_SCHEDULER_add_shutdown (&shutdown_task,
+                                NULL);
   pk = GNUNET_CRYPTO_eddsa_key_create_from_configuration (cfg);
   GNUNET_assert (NULL != pk);
   my_private_key = pk;

Modified: gnunet/src/nse/nse_api.c
===================================================================
--- gnunet/src/nse/nse_api.c    2016-04-30 08:16:14 UTC (rev 37101)
+++ gnunet/src/nse/nse_api.c    2016-04-30 08:17:37 UTC (rev 37102)
@@ -94,7 +94,8 @@
  * @param msg message received, NULL on timeout or fatal error
  */
 static void
-message_handler (void *cls, const struct GNUNET_MessageHeader *msg)
+message_handler (void *cls,
+                const struct GNUNET_MessageHeader *msg)
 {
   struct GNUNET_NSE_Handle *h = cls;
   const struct GNUNET_NSE_ClientMessage *client_msg;
@@ -150,7 +151,8 @@
        GNUNET_STRINGS_relative_time_to_string (h->reconnect_delay,
                                               GNUNET_YES));
   h->reconnect_task =
-      GNUNET_SCHEDULER_add_delayed (h->reconnect_delay, &reconnect, h);
+      GNUNET_SCHEDULER_add_delayed (h->reconnect_delay,
+                                   &reconnect, h);
   h->reconnect_delay = GNUNET_TIME_STD_BACKOFF (h->reconnect_delay);
 }
 

Modified: gnunet/src/nse/test_nse_multipeer.c
===================================================================
--- gnunet/src/nse/test_nse_multipeer.c 2016-04-30 08:16:14 UTC (rev 37101)
+++ gnunet/src/nse/test_nse_multipeer.c 2016-04-30 08:17:37 UTC (rev 37102)
@@ -207,7 +207,8 @@
                                                      &nse_connect_adapter,
                                                      &nse_disconnect_adapter,
                                                      &nse_peers[i]);
-  GNUNET_SCHEDULER_add_delayed (TIMEOUT, &shutdown_task, NULL);
+  GNUNET_SCHEDULER_add_delayed (TIMEOUT,
+                               &shutdown_task, NULL);
 }
 
 

Modified: gnunet/src/peerinfo/gnunet-service-peerinfo.c
===================================================================
--- gnunet/src/peerinfo/gnunet-service-peerinfo.c       2016-04-30 08:16:14 UTC 
(rev 37101)
+++ gnunet/src/peerinfo/gnunet-service-peerinfo.c       2016-04-30 08:17:37 UTC 
(rev 37102)
@@ -161,8 +161,18 @@
  */
 static struct NotificationContext *nc_tail;
 
+/**
+ * Handle for task to run #cron_clean_data_hosts()
+ */
+static struct GNUNET_SCHEDULER_Task *cron_clean;
 
 /**
+ * Handle for task to run #cron_scan_directory_hosts()
+ */
+static struct GNUNET_SCHEDULER_Task *cron_scan;
+
+
+/**
  * Notify all clients in the notify list about the
  * given host entry changing.
  *
@@ -657,16 +667,14 @@
 {
   static unsigned int retries;
   struct DirScanContext dsc;
-  const struct GNUNET_SCHEDULER_TaskContext *tc;
 
-  tc = GNUNET_SCHEDULER_get_task_context ();
-  if (0 != (tc->reason & GNUNET_SCHEDULER_REASON_SHUTDOWN))
-    return;
-  if (GNUNET_SYSERR == GNUNET_DISK_directory_create (networkIdDirectory))
+  cron_scan = NULL;
+  if (GNUNET_SYSERR ==
+      GNUNET_DISK_directory_create (networkIdDirectory))
   {
-    GNUNET_SCHEDULER_add_delayed_with_priority (DATA_HOST_FREQ,
-                                               GNUNET_SCHEDULER_PRIORITY_IDLE,
-                                               
&cron_scan_directory_data_hosts, NULL);
+    cron_scan = GNUNET_SCHEDULER_add_delayed_with_priority (DATA_HOST_FREQ,
+                                                           
GNUNET_SCHEDULER_PRIORITY_IDLE,
+                                                           
&cron_scan_directory_data_hosts, NULL);
     return;
   }
   dsc.matched = 0;
@@ -680,10 +688,10 @@
     GNUNET_log (GNUNET_ERROR_TYPE_WARNING | GNUNET_ERROR_TYPE_BULK,
                 _("Still no peers found in `%s'!\n"),
                 networkIdDirectory);
-  GNUNET_SCHEDULER_add_delayed_with_priority (DATA_HOST_FREQ,
-                                             GNUNET_SCHEDULER_PRIORITY_IDLE,
-                                             &cron_scan_directory_data_hosts,
-                                             NULL);
+  cron_scan = GNUNET_SCHEDULER_add_delayed_with_priority (DATA_HOST_FREQ,
+                                                         
GNUNET_SCHEDULER_PRIORITY_IDLE,
+                                                         
&cron_scan_directory_data_hosts,
+                                                         NULL);
 }
 
 
@@ -1046,11 +1054,8 @@
 cron_clean_data_hosts (void *cls)
 {
   struct GNUNET_TIME_Absolute now;
-  const struct GNUNET_SCHEDULER_TaskContext *tc;
 
-  tc = GNUNET_SCHEDULER_get_task_context ();
-  if (0 != (tc->reason & GNUNET_SCHEDULER_REASON_SHUTDOWN))
-    return;
+  cron_clean = NULL;
   now = GNUNET_TIME_absolute_get ();
   GNUNET_log (GNUNET_ERROR_TYPE_INFO | GNUNET_ERROR_TYPE_BULK,
               _("Cleaning up directory `%s'\n"),
@@ -1058,9 +1063,9 @@
   GNUNET_DISK_directory_scan (networkIdDirectory,
                               &discard_hosts_helper,
                               &now);
-  GNUNET_SCHEDULER_add_delayed (DATA_HOST_CLEAN_FREQ,
-                                &cron_clean_data_hosts,
-                                NULL);
+  cron_clean = GNUNET_SCHEDULER_add_delayed (DATA_HOST_CLEAN_FREQ,
+                                            &cron_clean_data_hosts,
+                                            NULL);
 }
 
 
@@ -1302,6 +1307,16 @@
     GNUNET_STATISTICS_destroy (stats, GNUNET_NO);
     stats = NULL;
   }
+  if (NULL != cron_clean)
+  {
+    GNUNET_SCHEDULER_cancel (cron_clean);
+    cron_clean = NULL;
+  }
+  if (NULL != cron_scan)
+  {
+    GNUNET_SCHEDULER_cancel (cron_scan);
+    cron_scan = NULL;
+  }
 }
 
 
@@ -1342,9 +1357,8 @@
                                                        "USE_INCLUDED_HELLOS");
   if (GNUNET_SYSERR == use_included)
     use_included = GNUNET_NO;
-  GNUNET_SCHEDULER_add_delayed (GNUNET_TIME_UNIT_FOREVER_REL,
-                                &shutdown_task,
-                                NULL);
+  GNUNET_SCHEDULER_add_shutdown (&shutdown_task,
+                                NULL);
   if (GNUNET_YES != noio)
   {
     GNUNET_assert (GNUNET_OK ==
@@ -1358,11 +1372,13 @@
       return;
     }
 
-    GNUNET_SCHEDULER_add_with_priority (GNUNET_SCHEDULER_PRIORITY_IDLE,
-                                       &cron_scan_directory_data_hosts, NULL);
+    cron_scan = GNUNET_SCHEDULER_add_with_priority 
(GNUNET_SCHEDULER_PRIORITY_IDLE,
+                                                   
&cron_scan_directory_data_hosts,
+                                                   NULL);
 
-    GNUNET_SCHEDULER_add_with_priority (GNUNET_SCHEDULER_PRIORITY_IDLE,
-                                       &cron_clean_data_hosts, NULL);
+    cron_clean = GNUNET_SCHEDULER_add_with_priority 
(GNUNET_SCHEDULER_PRIORITY_IDLE,
+                                                    &cron_clean_data_hosts,
+                                                    NULL);
     if (GNUNET_YES == use_included)
     {
       ip = GNUNET_OS_installation_get_path (GNUNET_OS_IPK_DATADIR);

Modified: gnunet/src/peerinfo/peerinfo_api.c
===================================================================
--- gnunet/src/peerinfo/peerinfo_api.c  2016-04-30 08:16:14 UTC (rev 37101)
+++ gnunet/src/peerinfo/peerinfo_api.c  2016-04-30 08:17:37 UTC (rev 37102)
@@ -786,7 +786,9 @@
       GNUNET_SCHEDULER_add_delayed (timeout, &signal_timeout, ic);
   ac->cont = &iterator_start_receive;
   ac->cont_cls = ic;
-  GNUNET_CONTAINER_DLL_insert_tail (h->ac_head, h->ac_tail, ac);
+  GNUNET_CONTAINER_DLL_insert_tail (h->ac_head,
+                                   h->ac_tail,
+                                   ac);
   GNUNET_CONTAINER_DLL_insert_tail (h->ic_head,
                                    h->ic_tail,
                                    ic);

Modified: gnunet/src/peerinfo/peerinfo_api_notify.c
===================================================================
--- gnunet/src/peerinfo/peerinfo_api_notify.c   2016-04-30 08:16:14 UTC (rev 
37101)
+++ gnunet/src/peerinfo/peerinfo_api_notify.c   2016-04-30 08:17:37 UTC (rev 
37102)
@@ -66,7 +66,7 @@
   /**
    * Tasked used for delayed re-connection attempt.
    */
-  struct GNUNET_SCHEDULER_Task * task;
+  struct GNUNET_SCHEDULER_Task *task;
 
   /**
    * Include friend only HELLOs in callbacks
@@ -112,7 +112,8 @@
   {
     /* ugh */
     nc->task =
-        GNUNET_SCHEDULER_add_delayed (GNUNET_TIME_UNIT_SECONDS, &reconnect, 
nc);
+        GNUNET_SCHEDULER_add_delayed (GNUNET_TIME_UNIT_SECONDS,
+                                     &reconnect, nc);
     return;
   }
   request_notifications (nc);

Modified: gnunet/src/peerinfo/test_peerinfo_api_notify_friend_only.c
===================================================================
--- gnunet/src/peerinfo/test_peerinfo_api_notify_friend_only.c  2016-04-30 
08:16:14 UTC (rev 37101)
+++ gnunet/src/peerinfo/test_peerinfo_api_notify_friend_only.c  2016-04-30 
08:17:37 UTC (rev 37102)
@@ -127,15 +127,18 @@
   return ret;
 }
 
+
 static void
-process_w_fo (void *cls, const struct GNUNET_PeerIdentity *peer,
-    const struct GNUNET_HELLO_Message *hello, const char *err_msg)
+process_w_fo (void *cls,
+             const struct GNUNET_PeerIdentity *peer,
+             const struct GNUNET_HELLO_Message *hello,
+             const char *err_msg)
 {
-  if (err_msg != NULL )
+  if (err_msg != NULL)
   {
     GNUNET_log(GNUNET_ERROR_TYPE_ERROR,
         _("Error in communication with PEERINFO service\n"));
-    GNUNET_SCHEDULER_add_now (&done, NULL );
+    GNUNET_SCHEDULER_add_now (&done, NULL);
     return;
   }
 
@@ -160,7 +163,7 @@
     if (0 == memcmp (&pid, peer, sizeof(pid)))
     {
       res_cb_w_fo = GNUNET_YES;
-      GNUNET_SCHEDULER_add_now (&done, NULL );
+      GNUNET_SCHEDULER_add_now (&done, NULL);
     }
     return;
   }
@@ -170,11 +173,11 @@
 process_wo_fo (void *cls, const struct GNUNET_PeerIdentity *peer,
     const struct GNUNET_HELLO_Message *hello, const char *err_msg)
 {
-  if (err_msg != NULL )
+  if (err_msg != NULL)
   {
     GNUNET_log(GNUNET_ERROR_TYPE_ERROR,
         _("Error in communication with PEERINFO service\n"));
-    GNUNET_SCHEDULER_add_now (&done, NULL );
+    GNUNET_SCHEDULER_add_now (&done, NULL);
     return;
   }
 
@@ -204,6 +207,7 @@
   }
 }
 
+
 static void
 add_peer_done (void *cls, const char *emsg)
 {
@@ -215,10 +219,11 @@
   {
     GNUNET_break(0);
     GNUNET_SCHEDULER_cancel (timeout_task);
-    timeout_task = GNUNET_SCHEDULER_add_now (&end_badly, NULL );
+    timeout_task = GNUNET_SCHEDULER_add_now (&end_badly, NULL);
   }
 }
 
+
 static void
 add_peer ()
 {
@@ -229,24 +234,27 @@
   memset (&pid, 32, sizeof(pid));
   h2 = GNUNET_HELLO_create (&pid.public_key, &address_generator, &agc,
       GNUNET_YES);
-  GNUNET_PEERINFO_add_peer (h, h2, &add_peer_done, NULL );
+  GNUNET_PEERINFO_add_peer (h, h2, &add_peer_done, NULL);
   GNUNET_free(h2);
 
 }
 
+
 static void
-run (void *cls, const struct GNUNET_CONFIGURATION_Handle *cfg,
-    struct GNUNET_TESTING_Peer *peer)
+run (void *cls,
+     const struct GNUNET_CONFIGURATION_Handle *cfg,
+     struct GNUNET_TESTING_Peer *peer)
 {
-  timeout_task = GNUNET_SCHEDULER_add_delayed (TIMEOUT, &end_badly, NULL );
+  timeout_task = GNUNET_SCHEDULER_add_delayed (TIMEOUT, &end_badly, NULL);
   mycfg = cfg;
-  pnc_w_fo = GNUNET_PEERINFO_notify (mycfg, GNUNET_YES, &process_w_fo, NULL );
-  pnc_wo_fo = GNUNET_PEERINFO_notify (mycfg, GNUNET_NO, &process_wo_fo, NULL );
+  pnc_w_fo = GNUNET_PEERINFO_notify (mycfg, GNUNET_YES, &process_w_fo, NULL);
+  pnc_wo_fo = GNUNET_PEERINFO_notify (mycfg, GNUNET_NO, &process_wo_fo, NULL);
   h = GNUNET_PEERINFO_connect (cfg);
   GNUNET_assert(NULL != h);
   add_peer ();
 }
 
+
 int
 main (int argc, char *argv[])
 {
@@ -253,9 +261,10 @@
   res_cb_w_fo = GNUNET_NO;
   res_cb_wo_fo = GNUNET_NO;
   global_ret = 3;
-  if (0
-      != GNUNET_TESTING_service_run ("test-peerinfo-api-friend-only",
-          "peerinfo", "test_peerinfo_api_data.conf", &run, NULL ))
+  if (0 != GNUNET_TESTING_service_run ("test-peerinfo-api-friend-only",
+                                      "peerinfo",
+                                      "test_peerinfo_api_data.conf",
+                                      &run, NULL))
     return 1;
   return global_ret;
 }

Modified: gnunet/src/peerinfo-tool/gnunet-peerinfo.c
===================================================================
--- gnunet/src/peerinfo-tool/gnunet-peerinfo.c  2016-04-30 08:16:14 UTC (rev 
37101)
+++ gnunet/src/peerinfo-tool/gnunet-peerinfo.c  2016-04-30 08:17:37 UTC (rev 
37102)
@@ -757,9 +757,8 @@
   {
     tt = GNUNET_SCHEDULER_add_now (&state_machine, NULL);
   }
-  GNUNET_SCHEDULER_add_delayed (GNUNET_TIME_UNIT_FOREVER_REL,
-                                &shutdown_task,
-                                NULL);
+  GNUNET_SCHEDULER_add_shutdown (&shutdown_task,
+                                NULL);
 }
 
 

Modified: gnunet/src/peerstore/gnunet-peerstore.c
===================================================================
--- gnunet/src/peerstore/gnunet-peerstore.c     2016-04-30 08:16:14 UTC (rev 
37101)
+++ gnunet/src/peerstore/gnunet-peerstore.c     2016-04-30 08:17:37 UTC (rev 
37102)
@@ -60,16 +60,15 @@
  * @param cfg configuration
  */
 static void
-run (void *cls, char *const *args, const char *cfgfile,
+run (void *cls,
+     char *const *args,
+     const char *cfgfile,
      const struct GNUNET_CONFIGURATION_Handle *cfg)
 {
-
-  peerstore_handle = NULL;
-  GNUNET_SCHEDULER_add_delayed (GNUNET_TIME_UNIT_FOREVER_REL, &shutdown_task,
-                                NULL);
+  GNUNET_SCHEDULER_add_shutdown (&shutdown_task,
+                                NULL);
   peerstore_handle = GNUNET_PEERSTORE_connect (cfg);
   GNUNET_assert (NULL != peerstore_handle);
-
   ret = 0;
 }
 

Modified: gnunet/src/peerstore/gnunet-service-peerstore.c
===================================================================
--- gnunet/src/peerstore/gnunet-service-peerstore.c     2016-04-30 08:16:14 UTC 
(rev 37101)
+++ gnunet/src/peerstore/gnunet-service-peerstore.c     2016-04-30 08:17:37 UTC 
(rev 37102)
@@ -91,6 +91,11 @@
 static struct ClientEntry *client_tail;
 
 /**
+ * Task run to clean up expired records.
+ */
+static struct GNUNET_SCHEDULER_Task *expire_task;
+
+/**
  * Are we in the process of shutting down the service? #GNUNET_YES / #GNUNET_NO
  */
 static int in_shutdown;
@@ -117,6 +122,11 @@
     GNUNET_CONTAINER_multihashmap_destroy (watchers);
     watchers = NULL;
   }
+  if (NULL != expire_task)
+  {
+    GNUNET_SCHEDULER_cancel (expire_task);
+    expire_task = NULL;
+  }
   GNUNET_SCHEDULER_shutdown ();
 }
 
@@ -147,21 +157,18 @@
 cleanup_expired_records (void *cls)
 {
   int ret;
-  const struct GNUNET_SCHEDULER_TaskContext *tc;
 
-  tc = GNUNET_SCHEDULER_get_task_context ();
-  if (0 != (tc->reason & GNUNET_SCHEDULER_REASON_SHUTDOWN))
-    return;
+  expire_task = NULL;
   GNUNET_assert (NULL != db);
-  ret =
-      db->expire_records (db->cls, GNUNET_TIME_absolute_get (),
-                          expire_records_continuation, NULL);
+  ret = db->expire_records (db->cls, GNUNET_TIME_absolute_get (),
+                           &expire_records_continuation, NULL);
   if (GNUNET_OK != ret)
   {
-    GNUNET_SCHEDULER_add_delayed (GNUNET_TIME_relative_multiply
-                                  (GNUNET_TIME_UNIT_SECONDS,
-                                   EXPIRED_RECORDS_CLEANUP_INTERVAL),
-                                  &cleanup_expired_records, NULL);
+    GNUNET_assert (NULL == expire_task);
+    expire_task = GNUNET_SCHEDULER_add_delayed (GNUNET_TIME_relative_multiply
+                                               (GNUNET_TIME_UNIT_SECONDS,
+                                                
EXPIRED_RECORDS_CLEANUP_INTERVAL),
+                                               &cleanup_expired_records, NULL);
   }
 }
 
@@ -173,14 +180,18 @@
  * @param success count of records deleted or #GNUNET_SYSERR
  */
 static void
-expire_records_continuation (void *cls, int success)
+expire_records_continuation (void *cls,
+                            int success)
 {
   if (success > 0)
-    GNUNET_log (GNUNET_ERROR_TYPE_INFO, "%d records expired.\n", success);
-  GNUNET_SCHEDULER_add_delayed (GNUNET_TIME_relative_multiply
-                                (GNUNET_TIME_UNIT_SECONDS,
-                                 EXPIRED_RECORDS_CLEANUP_INTERVAL),
-                                &cleanup_expired_records, NULL);
+    GNUNET_log (GNUNET_ERROR_TYPE_INFO,
+               "%d records expired.\n",
+               success);
+  GNUNET_assert (NULL == expire_task);
+  expire_task = GNUNET_SCHEDULER_add_delayed (GNUNET_TIME_relative_multiply
+                                             (GNUNET_TIME_UNIT_SECONDS,
+                                              
EXPIRED_RECORDS_CLEANUP_INTERVAL),
+                                             &cleanup_expired_records, NULL);
 }
 
 
@@ -565,18 +576,20 @@
   if (NULL == db)
   {
     GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
-                _("Could not load database backend `%s'\n"), db_lib_name);
+                _("Could not load database backend `%s'\n"),
+               db_lib_name);
     GNUNET_SCHEDULER_add_now (&shutdown_task, NULL);
     return;
   }
   nc = GNUNET_SERVER_notification_context_create (server, 16);
   watchers = GNUNET_CONTAINER_multihashmap_create (10, GNUNET_NO);
-  GNUNET_SCHEDULER_add_now (&cleanup_expired_records, NULL);
+  expire_task = GNUNET_SCHEDULER_add_now (&cleanup_expired_records,
+                                         NULL);
   GNUNET_SERVER_add_handlers (server, handlers);
   GNUNET_SERVER_connect_notify (server, &handle_client_connect, NULL);
   GNUNET_SERVER_disconnect_notify (server, &handle_client_disconnect, NULL);
-  GNUNET_SCHEDULER_add_delayed (GNUNET_TIME_UNIT_FOREVER_REL, &shutdown_task,
-                                NULL);
+  GNUNET_SCHEDULER_add_shutdown (&shutdown_task,
+                                NULL);
 }
 
 

Modified: gnunet/src/peerstore/peerstore_api.c
===================================================================
--- gnunet/src/peerstore/peerstore_api.c        2016-04-30 08:16:14 UTC (rev 
37101)
+++ gnunet/src/peerstore/peerstore_api.c        2016-04-30 08:17:37 UTC (rev 
37102)
@@ -213,7 +213,7 @@
    * Task identifier for the function called
    * on iterate request timeout
    */
-  struct GNUNET_SCHEDULER_Task * timeout_task;
+  struct GNUNET_SCHEDULER_Task *timeout_task;
 
 };
 
@@ -340,7 +340,9 @@
  * @return #GNUNET_YES (continue to iterate)
  */
 static int
-rewatch_it (void *cls, const struct GNUNET_HashCode *key, void *value)
+rewatch_it (void *cls,
+           const struct GNUNET_HashCode *key,
+           void *value)
 {
   struct GNUNET_PEERSTORE_Handle *h = cls;
   struct GNUNET_PEERSTORE_WatchContext *wc = value;

Modified: gnunet/src/psyc/gnunet-service-psyc.c
===================================================================
--- gnunet/src/psyc/gnunet-service-psyc.c       2016-04-30 08:16:14 UTC (rev 
37101)
+++ gnunet/src/psyc/gnunet-service-psyc.c       2016-04-30 08:17:37 UTC (rev 
37102)
@@ -2007,7 +2007,7 @@
 
   if (NULL != chn->tmit_head)
   {
-    GNUNET_SCHEDULER_add_now (schedule_transmit_message, chn);
+    GNUNET_SCHEDULER_add_now (&schedule_transmit_message, chn);
   }
   else if (GNUNET_YES == chn->is_disconnected
            && tmit_msg->last_ptype < GNUNET_MESSAGE_TYPE_PSYC_MESSAGE_END)
@@ -2645,8 +2645,7 @@
   nc = GNUNET_SERVER_notification_context_create (server, 1);
   GNUNET_SERVER_add_handlers (server, server_handlers);
   GNUNET_SERVER_disconnect_notify (server, &client_disconnect, NULL);
-  GNUNET_SCHEDULER_add_delayed (GNUNET_TIME_UNIT_FOREVER_REL,
-                                &shutdown_task, NULL);
+  GNUNET_SCHEDULER_add_shutdown (&shutdown_task, NULL);
 }
 
 

Modified: gnunet/src/psyc/test_psyc.c
===================================================================
--- gnunet/src/psyc/test_psyc.c 2016-04-30 08:16:14 UTC (rev 37101)
+++ gnunet/src/psyc/test_psyc.c 2016-04-30 08:17:37 UTC (rev 37102)
@@ -41,28 +41,28 @@
 /**
  * Return value from 'main'.
  */
-int res;
+static int res;
 
-const struct GNUNET_CONFIGURATION_Handle *cfg;
+static const struct GNUNET_CONFIGURATION_Handle *cfg;
 
-struct GNUNET_CORE_Handle *core;
-struct GNUNET_PeerIdentity this_peer;
+static struct GNUNET_CORE_Handle *core;
+static struct GNUNET_PeerIdentity this_peer;
 
 /**
  * Handle for task for timeout termination.
  */
-struct GNUNET_SCHEDULER_Task * end_badly_task;
+static struct GNUNET_SCHEDULER_Task * end_badly_task;
 
-struct GNUNET_PSYC_Master *mst;
-struct GNUNET_PSYC_Slave *slv;
+static struct GNUNET_PSYC_Master *mst;
+static struct GNUNET_PSYC_Slave *slv;
 
-struct GNUNET_PSYC_Channel *mst_chn, *slv_chn;
+static struct GNUNET_PSYC_Channel *mst_chn, *slv_chn;
 
-struct GNUNET_CRYPTO_EddsaPrivateKey *channel_key;
-struct GNUNET_CRYPTO_EcdsaPrivateKey *slave_key;
+static struct GNUNET_CRYPTO_EddsaPrivateKey *channel_key;
+static struct GNUNET_CRYPTO_EcdsaPrivateKey *slave_key;
 
-struct GNUNET_CRYPTO_EddsaPublicKey channel_pub_key;
-struct GNUNET_CRYPTO_EcdsaPublicKey slave_pub_key;
+static struct GNUNET_CRYPTO_EddsaPublicKey channel_pub_key;
+static struct GNUNET_CRYPTO_EcdsaPublicKey slave_pub_key;
 
 struct TransmitClosure
 {
@@ -79,9 +79,9 @@
   uint8_t n;
 };
 
-struct TransmitClosure *tmit;
+static struct TransmitClosure *tmit;
 
-uint8_t join_req_count, end_count;
+static uint8_t join_req_count, end_count;
 
 enum
 {
@@ -104,14 +104,15 @@
 } test;
 
 
-void
+static void
 master_transmit ();
 
-void
+static void
 master_history_replay_latest ();
 
 
-void master_stopped (void *cls)
+static void
+master_stopped (void *cls)
 {
   if (NULL != tmit)
   {
@@ -122,7 +123,9 @@
   GNUNET_SCHEDULER_shutdown ();
 }
 
-void slave_parted (void *cls)
+
+static void
+slave_parted (void *cls)
 {
   if (NULL != mst)
   {
@@ -133,10 +136,11 @@
     master_stopped (NULL);
 }
 
+
 /**
  * Clean up all resources used.
  */
-void
+static void
 cleanup ()
 {
   if (NULL != core)
@@ -185,7 +189,7 @@
 /**
  * Finish the test case (successfully).
  */
-void
+static void
 end ()
 {
   GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Ending tests.\n");
@@ -200,7 +204,7 @@
 }
 
 
-void
+static void
 master_message_cb (void *cls, const struct GNUNET_PSYC_MessageHeader *msg)
 {
   GNUNET_assert (NULL != msg);
@@ -213,7 +217,7 @@
 }
 
 
-void
+static void
 master_message_part_cb (void *cls, const struct GNUNET_PSYC_MessageHeader *msg,
                         const struct GNUNET_MessageHeader *pmsg)
 {
@@ -270,7 +274,7 @@
 }
 
 
-void
+static void
 slave_message_cb (void *cls, const struct GNUNET_PSYC_MessageHeader *msg)
 {
   GNUNET_assert (NULL != msg);
@@ -283,7 +287,7 @@
 }
 
 
-void
+static void
 slave_message_part_cb (void *cls,
                        const struct GNUNET_PSYC_MessageHeader *msg,
                        const struct GNUNET_MessageHeader *pmsg)
@@ -326,7 +330,7 @@
 }
 
 
-void
+static void
 state_get_var (void *cls, const struct GNUNET_MessageHeader *mod,
                const char *name, const void *value,
                uint32_t value_size, uint32_t full_value_size)
@@ -338,7 +342,7 @@
 
 /*** Slave state_get_prefix() ***/
 
-void
+static void
 slave_state_get_prefix_result (void *cls, int64_t result,
                                const void *err_msg, uint16_t err_msg_size)
 {
@@ -350,7 +354,7 @@
 }
 
 
-void
+static void
 slave_state_get_prefix ()
 {
   test = TEST_SLAVE_STATE_GET_PREFIX;
@@ -362,7 +366,7 @@
 /*** Master state_get_prefix() ***/
 
 
-void
+static void
 master_state_get_prefix_result (void *cls, int64_t result,
                                 const void *err_msg, uint16_t err_msg_size)
 {
@@ -373,7 +377,7 @@
 }
 
 
-void
+static void
 master_state_get_prefix ()
 {
   test = TEST_MASTER_STATE_GET_PREFIX;
@@ -385,7 +389,7 @@
 /*** Slave state_get() ***/
 
 
-void
+static void
 slave_state_get_result (void *cls, int64_t result,
                         const void *err_msg, uint16_t err_msg_size)
 {
@@ -397,7 +401,7 @@
 }
 
 
-void
+static void
 slave_state_get ()
 {
   test = TEST_SLAVE_STATE_GET;
@@ -409,7 +413,7 @@
 /*** Master state_get() ***/
 
 
-void
+static void
 master_state_get_result (void *cls, int64_t result,
                          const void *err_msg, uint16_t err_msg_size)
 {
@@ -421,7 +425,7 @@
 }
 
 
-void
+static void
 master_state_get ()
 {
   test = TEST_MASTER_STATE_GET;
@@ -432,7 +436,7 @@
 
 /*** Slave history_replay() ***/
 
-void
+static void
 slave_history_replay_result (void *cls, int64_t result,
                              const void *err_msg, uint16_t err_msg_size)
 {
@@ -445,7 +449,7 @@
 }
 
 
-void
+static void
 slave_history_replay ()
 {
   test = TEST_SLAVE_HISTORY_REPLAY;
@@ -460,7 +464,7 @@
 /*** Master history_replay() ***/
 
 
-void
+static void
 master_history_replay_result (void *cls, int64_t result,
                               const void *err_msg, uint16_t err_msg_size)
 {
@@ -473,7 +477,7 @@
 }
 
 
-void
+static void
 master_history_replay ()
 {
   test = TEST_MASTER_HISTORY_REPLAY;
@@ -488,7 +492,7 @@
 /*** Slave history_replay_latest() ***/
 
 
-void
+static void
 slave_history_replay_latest_result (void *cls, int64_t result,
                                     const void *err_msg, uint16_t err_msg_size)
 {
@@ -501,7 +505,7 @@
 }
 
 
-void
+static void
 slave_history_replay_latest ()
 {
   test = TEST_SLAVE_HISTORY_REPLAY_LATEST;
@@ -517,7 +521,7 @@
 /*** Master history_replay_latest() ***/
 
 
-void
+static void
 master_history_replay_latest_result (void *cls, int64_t result,
                                      const void *err_msg, uint16_t 
err_msg_size)
 {
@@ -530,7 +534,7 @@
 }
 
 
-void
+static void
 master_history_replay_latest ()
 {
   test = TEST_MASTER_HISTORY_REPLAY_LATEST;
@@ -555,7 +559,7 @@
 }
 
 
-int
+static int
 tmit_notify_data (void *cls, uint16_t *data_size, void *data)
 {
   struct TransmitClosure *tmit = cls;
@@ -598,7 +602,7 @@
 }
 
 
-int
+static int
 tmit_notify_mod (void *cls, uint16_t *data_size, void *data, uint8_t *oper,
                  uint32_t *full_value_size)
 {
@@ -678,7 +682,7 @@
 slave_join ();
 
 
-void
+static void
 slave_transmit ()
 {
   test = TEST_SLAVE_TRANSMIT;
@@ -702,7 +706,7 @@
 }
 
 
-void
+static void
 slave_remove_cb (void *cls, int64_t result,
                  const void *err_msg, uint16_t err_msg_size)
 {
@@ -714,7 +718,7 @@
 }
 
 
-void
+static void
 slave_remove ()
 {
   test = TEST_SLAVE_REMOVE;
@@ -724,7 +728,7 @@
 }
 
 
-void
+static void
 slave_add_cb (void *cls, int64_t result,
               const void *err_msg, uint16_t err_msg_size)
 {
@@ -735,7 +739,7 @@
 }
 
 
-void
+static void
 slave_add ()
 {
   test = TEST_SLAVE_ADD;
@@ -744,7 +748,8 @@
 }
 
 
-void first_slave_parted (void *cls)
+static void
+first_slave_parted (void *cls)
 {
   GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "First slave parted.\n");
   slave_join (TEST_SLAVE_JOIN_ACCEPT);
@@ -754,7 +759,7 @@
 static void
 schedule_slave_part (void *cls)
 {
-  GNUNET_PSYC_slave_part (slv, GNUNET_NO, first_slave_parted, NULL);
+  GNUNET_PSYC_slave_part (slv, GNUNET_NO, &first_slave_parted, NULL);
 }
 
 
@@ -772,7 +777,7 @@
   case TEST_SLAVE_JOIN_REJECT:
     GNUNET_assert (0 == is_admitted);
     GNUNET_assert (1 == join_req_count);
-    GNUNET_SCHEDULER_add_now (schedule_slave_part, NULL);
+    GNUNET_SCHEDULER_add_now (&schedule_slave_part, NULL);
     break;
 
   case TEST_SLAVE_JOIN_ACCEPT:
@@ -844,7 +849,7 @@
 }
 
 
-void
+static void
 master_transmit ()
 {
   test = TEST_MASTER_TRANSMIT;
@@ -899,7 +904,7 @@
 }
 
 
-void
+static void
 master_start_cb (void *cls, int result, uint64_t max_message_id)
 {
   GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
@@ -911,7 +916,7 @@
 }
 
 
-void
+static void
 master_start ()
 {
   test = TEST_MASTER_START;
@@ -931,7 +936,7 @@
 }
 
 
-void
+static void
 core_connected (void *cls, const struct GNUNET_PeerIdentity *my_identity)
 {
   this_peer = *my_identity;
@@ -953,7 +958,7 @@
  * @param cfg configuration we use (also to connect to PSYC service)
  * @param peer handle to access more of the peer (not used)
  */
-void
+static void
 #if DEBUG_TEST_PSYC
 run (void *cls, char *const *args, const char *cfgfile,
      const struct GNUNET_CONFIGURATION_Handle *c)

Modified: gnunet/src/psycstore/gnunet-service-psycstore.c
===================================================================
--- gnunet/src/psycstore/gnunet-service-psycstore.c     2016-04-30 08:16:14 UTC 
(rev 37101)
+++ gnunet/src/psycstore/gnunet-service-psycstore.c     2016-04-30 08:17:37 UTC 
(rev 37102)
@@ -946,11 +946,15 @@
       GNUNET_CONFIGURATION_get_value_string (cfg, "psycstore", "database",
                                              &database))
   {
-    GNUNET_log (GNUNET_ERROR_TYPE_ERROR, "No database backend configured\n");
+    GNUNET_log_config_missing (GNUNET_ERROR_TYPE_ERROR,
+                              "psycstore",
+                              "database");
   }
   else
   {
-    GNUNET_asprintf (&db_lib_name, "libgnunet_plugin_psycstore_%s", database);
+    GNUNET_asprintf (&db_lib_name,
+                    "libgnunet_plugin_psycstore_%s",
+                    database);
     db = GNUNET_PLUGIN_load (db_lib_name, (void *) cfg);
     GNUNET_free (database);
   }
@@ -966,8 +970,8 @@
   stats = GNUNET_STATISTICS_create ("psycstore", cfg);
   GNUNET_SERVER_add_handlers (server, handlers);
   nc = GNUNET_SERVER_notification_context_create (server, 1);
-  GNUNET_SCHEDULER_add_delayed (GNUNET_TIME_UNIT_FOREVER_REL, &shutdown_task,
-                                NULL);
+  GNUNET_SCHEDULER_add_shutdown (&shutdown_task,
+                                NULL);
 }
 
 

Modified: gnunet/src/psycstore/psycstore_api.c
===================================================================
--- gnunet/src/psycstore/psycstore_api.c        2016-04-30 08:16:14 UTC (rev 
37101)
+++ gnunet/src/psycstore/psycstore_api.c        2016-04-30 08:17:37 UTC (rev 
37102)
@@ -131,7 +131,7 @@
   /**
    * Task doing exponential back-off trying to reconnect.
    */
-  struct GNUNET_SCHEDULER_Task * reconnect_task;
+  struct GNUNET_SCHEDULER_Task *reconnect_task;
 
   /**
    * Time for next connect retry.

Modified: gnunet/src/psycstore/test_psycstore.c
===================================================================
--- gnunet/src/psycstore/test_psycstore.c       2016-04-30 08:16:14 UTC (rev 
37101)
+++ gnunet/src/psycstore/test_psycstore.c       2016-04-30 08:17:37 UTC (rev 
37102)
@@ -54,7 +54,7 @@
 /**
  * Handle for task for timeout termination.
  */
-static struct GNUNET_SCHEDULER_Task * end_badly_task;
+static struct GNUNET_SCHEDULER_Task *end_badly_task;
 
 static struct GNUNET_CRYPTO_EddsaPrivateKey *channel_key;
 static struct GNUNET_CRYPTO_EcdsaPrivateKey *slave_key;
@@ -141,7 +141,7 @@
 static void
 end ()
 {
-  if (end_badly_task != NULL)
+  if (NULL != end_badly_task)
   {
     GNUNET_SCHEDULER_cancel (end_badly_task);
     end_badly_task = NULL;

Modified: gnunet/src/pt/gnunet-daemon-pt.c
===================================================================
--- gnunet/src/pt/gnunet-daemon-pt.c    2016-04-30 08:16:14 UTC (rev 37101)
+++ gnunet/src/pt/gnunet-daemon-pt.c    2016-04-30 08:17:37 UTC (rev 37102)
@@ -228,7 +228,7 @@
   /**
    * Task used to abort this operation with timeout.
    */
-  struct GNUNET_SCHEDULER_Task * timeout_task;
+  struct GNUNET_SCHEDULER_Task *timeout_task;
 
   /**
    * Length of the request message that follows this struct.
@@ -1244,7 +1244,7 @@
     GNUNET_SCHEDULER_shutdown ();
     return;
   }
-  GNUNET_SCHEDULER_add_delayed (GNUNET_TIME_UNIT_FOREVER_REL, &cleanup, cls);
+  GNUNET_SCHEDULER_add_shutdown (&cleanup, cls);
   if (ipv4_pt || ipv6_pt)
   {
     dns_post_handle

Modified: gnunet/src/pt/test_gnunet_vpn.c
===================================================================
--- gnunet/src/pt/test_gnunet_vpn.c     2016-04-30 08:16:14 UTC (rev 37101)
+++ gnunet/src/pt/test_gnunet_vpn.c     2016-04-30 08:17:37 UTC (rev 37102)
@@ -354,7 +354,8 @@
 
 
 static void
-run (void *cls, const struct GNUNET_CONFIGURATION_Handle *cfg,
+run (void *cls,
+     const struct GNUNET_CONFIGURATION_Handle *cfg,
      struct GNUNET_TESTING_Peer *peer)
 {
   struct in_addr v4;

Modified: gnunet/src/regex/gnunet-daemon-regexprofiler.c
===================================================================
--- gnunet/src/regex/gnunet-daemon-regexprofiler.c      2016-04-30 08:16:14 UTC 
(rev 37101)
+++ gnunet/src/regex/gnunet-daemon-regexprofiler.c      2016-04-30 08:17:37 UTC 
(rev 37102)
@@ -117,7 +117,11 @@
     REGEX_INTERNAL_announce_cancel (announce_handle);
     announce_handle = NULL;
   }
-
+  if (NULL != reannounce_task)
+  {
+    GNUNET_free (GNUNET_SCHEDULER_cancel (reannounce_task));
+    reannounce_task = NULL;
+  }
   if (NULL != dht_handle)
   {
     GNUNET_DHT_disconnect (dht_handle);
@@ -142,16 +146,8 @@
 {
   char *regex = cls;
   struct GNUNET_TIME_Relative random_delay;
-  const struct GNUNET_SCHEDULER_TaskContext *tc;
 
   reannounce_task = NULL;
-  tc = GNUNET_SCHEDULER_get_task_context ();
-  if (0 != (tc->reason & GNUNET_SCHEDULER_REASON_SHUTDOWN))
-  {
-    GNUNET_free (regex);
-    return;
-  }
-
   if (0 == rounds--)
   {
     global_ret = 0;
@@ -195,7 +191,7 @@
  * @param regex regular expression to announce on this peer's cadet.
  */
 static void
-announce_regex (const char * regex)
+announce_regex (const char *regex)
 {
   char *copy;
 
@@ -210,7 +206,8 @@
               policy_filename);
   GNUNET_assert (NULL == reannounce_task);
   copy = GNUNET_strdup (regex);
-  reannounce_task = GNUNET_SCHEDULER_add_now (reannounce_regex, (void *) copy);
+  reannounce_task = GNUNET_SCHEDULER_add_now (&reannounce_regex,
+                                             (void *) copy);
 }
 
 
@@ -347,14 +344,17 @@
   REGEX_TEST_free_from_file (components);
 
   /* Announcing regexes from policy_filename */
-  GNUNET_asprintf (&rx_with_pfx, "%s(%s)(0|1|2|3|4|5|6|7|8|9|a|b|c|d|e|f)*", 
regex_prefix, regex);
+  GNUNET_asprintf (&rx_with_pfx,
+                  "%s(%s)(0|1|2|3|4|5|6|7|8|9|a|b|c|d|e|f)*",
+                  regex_prefix,
+                  regex);
   announce_regex (rx_with_pfx);
   GNUNET_free (regex);
   GNUNET_free (rx_with_pfx);
 
   /* Scheduled the task to clean up when shutdown is called */
-  GNUNET_SCHEDULER_add_delayed (GNUNET_TIME_UNIT_FOREVER_REL, &shutdown_task,
-                                NULL);
+  GNUNET_SCHEDULER_add_shutdown (&shutdown_task,
+                                NULL);
 }
 
 

Modified: gnunet/src/regex/gnunet-regex-profiler.c
===================================================================
--- gnunet/src/regex/gnunet-regex-profiler.c    2016-04-30 08:16:14 UTC (rev 
37101)
+++ gnunet/src/regex/gnunet-regex-profiler.c    2016-04-30 08:17:37 UTC (rev 
37102)
@@ -214,11 +214,6 @@
 static struct GNUNET_SCHEDULER_Task * abort_task;
 
 /**
- * Shutdown task identifier
- */
-static struct GNUNET_SCHEDULER_Task * shutdown_task;
-
-/**
  * Host registration task identifier
  */
 static struct GNUNET_SCHEDULER_Task * register_hosts_task;
@@ -408,12 +403,16 @@
   char output_buffer[512];
   size_t size;
 
-  shutdown_task = NULL;
   if (NULL != abort_task)
+  {
     GNUNET_SCHEDULER_cancel (abort_task);
+    abort_task = NULL;
+  }
   if (NULL != register_hosts_task)
+  {
     GNUNET_SCHEDULER_cancel (register_hosts_task);
-
+    register_hosts_task = NULL;
+  }
   for (peer_cnt = 0; peer_cnt < num_peers; peer_cnt++)
   {
     peer = &peers[peer_cnt];
@@ -441,8 +440,10 @@
   }
 
   if (NULL != data_file)
+  {
     GNUNET_DISK_file_close (data_file);
-
+    data_file = NULL;
+  }
   for (search_str_cnt = 0;
        search_str_cnt < num_peers && NULL != search_strings;
        search_str_cnt++)
@@ -450,18 +451,28 @@
     GNUNET_free_non_null (search_strings[search_str_cnt]);
   }
   GNUNET_free_non_null (search_strings);
+  search_strings = NULL;
 
   if (NULL != reg_handle)
+  {
     GNUNET_TESTBED_cancel_registration (reg_handle);
-
+    reg_handle = NULL;
+  }
   if (NULL != mc)
+  {
     GNUNET_TESTBED_controller_disconnect (mc);
+    mc = NULL;
+  }
   if (NULL != mc_proc)
+  {
     GNUNET_TESTBED_controller_stop (mc_proc);
+    mc_proc = NULL;
+  }
   if (NULL != cfg)
+  {
     GNUNET_CONFIGURATION_destroy (cfg);
-
-  GNUNET_SCHEDULER_shutdown (); /* Stop scheduler to shutdown testbed run */
+    cfg = NULL;
+  }
 }
 
 
@@ -475,12 +486,11 @@
 {
   unsigned long i = (unsigned long) cls;
 
-  GNUNET_log (GNUNET_ERROR_TYPE_WARNING, "Aborting from line %lu...\n", i);
+  GNUNET_log (GNUNET_ERROR_TYPE_WARNING,
+             "Aborting from line %lu...\n", i);
   abort_task = NULL;
   result = GNUNET_SYSERR;
-  if (NULL != shutdown_task)
-    GNUNET_SCHEDULER_cancel (shutdown_task);
-  shutdown_task = GNUNET_SCHEDULER_add_now (&do_shutdown, NULL);
+  GNUNET_SCHEDULER_add_now (&do_shutdown, NULL);
 }
 
 
@@ -499,7 +509,8 @@
  * @return service handle to return in 'op_result', NULL on error
  */
 static void *
-stats_ca (void *cls, const struct GNUNET_CONFIGURATION_Handle *cfg)
+stats_ca (void *cls,
+         const struct GNUNET_CONFIGURATION_Handle *cfg)
 {
   return GNUNET_STATISTICS_create ("<driver>", cfg);
 }
@@ -532,10 +543,12 @@
  * @param name the name of the datum
  * @param value the current value
  * @param is_persistent GNUNET_YES if the value is persistent, GNUNET_NO if not
- * @return GNUNET_OK to continue, GNUNET_SYSERR to abort iteration
+ * @return #GNUNET_OK to continue, #GNUNET_SYSERR to abort iteration
  */
 static int
-stats_iterator (void *cls, const char *subsystem, const char *name,
+stats_iterator (void *cls,
+               const char *subsystem,
+               const char *name,
                 uint64_t value, int is_persistent)
 {
   struct RegexPeer *peer = cls;
@@ -596,9 +609,9 @@
   fprintf (stderr, "s");
   if (peer_cnt == num_peers)
   {
-    struct GNUNET_TIME_Relative delay = { 100 };
-    GNUNET_log (GNUNET_ERROR_TYPE_INFO, "\nCollecting stats finished. Shutting 
down.\n");
-    shutdown_task = GNUNET_SCHEDULER_add_delayed (delay, &do_shutdown, NULL);
+    GNUNET_log (GNUNET_ERROR_TYPE_INFO,
+               "\nCollecting stats finished. Shutting down.\n");
+    GNUNET_SCHEDULER_shutdown ();
     result = GNUNET_OK;
   }
   else
@@ -845,12 +858,8 @@
 find_timed_out (void *cls)
 {
   struct RegexPeer *p = cls;
-  const struct GNUNET_SCHEDULER_TaskContext *tc;
 
   p->timeout = NULL;
-  tc = GNUNET_SCHEDULER_get_task_context ();
-  if ((tc->reason & GNUNET_SCHEDULER_REASON_SHUTDOWN) != 0)
-    return;
   GNUNET_log (GNUNET_ERROR_TYPE_WARNING,
               "Searching for string \"%s\" on peer %d timed out.\n",
               p->search_str,
@@ -869,12 +878,9 @@
 find_string (void *cls)
 {
   unsigned int search_peer = (unsigned int) (long) cls;
-  const struct GNUNET_SCHEDULER_TaskContext *tc;
 
-  tc = GNUNET_SCHEDULER_get_task_context ();
-  if (0 != (tc->reason & GNUNET_SCHEDULER_REASON_SHUTDOWN) ||
-      search_peer >= num_peers ||
-      GNUNET_YES == in_shutdown)
+  if ( (search_peer >= num_peers) ||
+       (GNUNET_YES == in_shutdown) )
     return;
 
   GNUNET_log (GNUNET_ERROR_TYPE_INFO,
@@ -893,14 +899,13 @@
                                     &dht_da,
                                     &peers[search_peer]);
   GNUNET_assert (NULL != peers[search_peer].op_handle);
-  peers[search_peer].timeout = GNUNET_SCHEDULER_add_delayed (FIND_TIMEOUT,
-                                                          &find_timed_out,
-                                                          &peers[search_peer]);
+  peers[search_peer].timeout
+    = GNUNET_SCHEDULER_add_delayed (FIND_TIMEOUT,
+                                   &find_timed_out,
+                                   &peers[search_peer]);
 }
 
 
-
-
 /**
  * Callback called when testbed has started the daemon we asked for.
  *
@@ -909,7 +914,8 @@
  * @param emsg NULL on success; otherwise an error description
  */
 static void
-daemon_started (void *cls, struct GNUNET_TESTBED_Operation *op,
+daemon_started (void *cls,
+               struct GNUNET_TESTBED_Operation *op,
                 const char *emsg)
 {
   struct RegexPeer *peer = (struct RegexPeer *) cls;
@@ -961,8 +967,10 @@
 {
   unsigned int i;
 
-  GNUNET_log (GNUNET_ERROR_TYPE_INFO, "Starting announce.\n");
-
+  if (GNUNET_YES == in_shutdown)
+    return;
+  GNUNET_log (GNUNET_ERROR_TYPE_INFO,
+             "Starting announce.\n");
   for (i = 0; i < init_parallel_searches; i++)
   {
     GNUNET_log (GNUNET_ERROR_TYPE_INFO,
@@ -982,10 +990,8 @@
 announce_next_regex (void *cls)
 {
   struct RegexPeer *peer;
-  const struct GNUNET_SCHEDULER_TaskContext *tc;
 
-  tc = GNUNET_SCHEDULER_get_task_context ();
-  if (0 != (tc->reason & GNUNET_SCHEDULER_REASON_SHUTDOWN))
+  if (GNUNET_YES == in_shutdown)
     return;
   if (next_search >= num_peers)
   {
@@ -1015,6 +1021,7 @@
   parallel_searches++;
 }
 
+
 /**
  * DHT connect callback. Called when we are connected to the dht service for
  * the peer in 'cls'. If successfull we connect to the stats service of this
@@ -1026,8 +1033,10 @@
  * @param emsg error message.
  */
 static void
-dht_connect_cb (void *cls, struct GNUNET_TESTBED_Operation *op,
-                void *ca_result, const char *emsg)
+dht_connect_cb (void *cls,
+               struct GNUNET_TESTBED_Operation *op,
+                void *ca_result,
+               const char *emsg)
 {
   struct RegexPeer *peer = (struct RegexPeer *) cls;
 
@@ -1194,10 +1203,12 @@
  * @param strings set of strings loaded from file. Caller needs to free this
  *                if number returned is greater than zero.
  * @param limit upper limit on the number of strings read from the file
- * @return number of strings found in the file. GNUNET_SYSERR on error.
+ * @return number of strings found in the file. #GNUNET_SYSERR on error.
  */
 static int
-load_search_strings (const char *filename, char ***strings, unsigned int limit)
+load_search_strings (const char *filename,
+                    char ***strings,
+                    unsigned int limit)
 {
   char *data;
   char *buf;
@@ -1268,7 +1279,9 @@
  * @param config configuration
  */
 static void
-run (void *cls, char *const *args, const char *cfgfile,
+run (void *cls,
+     char *const *args,
+     const char *cfgfile,
      const struct GNUNET_CONFIGURATION_Handle *config)
 {
   unsigned int nsearchstrs;
@@ -1282,7 +1295,7 @@
   {
     GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
                 _("No configuration file given. Exiting\n"));
-    shutdown_task = GNUNET_SCHEDULER_add_now (&do_shutdown, NULL);
+    GNUNET_SCHEDULER_add_now (&do_shutdown, NULL);
     return;
   }
   cfg = GNUNET_CONFIGURATION_dup (config);
@@ -1291,9 +1304,10 @@
                                              "REGEX_PREFIX",
                                              &regex_prefix))
   {
-    GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
-                _("Configuration option \"regex_prefix\" missing. Exiting\n"));
-    shutdown_task = GNUNET_SCHEDULER_add_now (&do_shutdown, NULL);
+    GNUNET_log_config_missing (GNUNET_ERROR_TYPE_ERROR,
+                              "regexprofiler",
+                              "regex_prefix");
+    GNUNET_SCHEDULER_add_now (&do_shutdown, NULL);
     return;
   }
   if (GNUNET_OK !=
@@ -1328,7 +1342,7 @@
   {
     GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
                 _("Specified policies directory does not exist. Exiting.\n"));
-    shutdown_task = GNUNET_SCHEDULER_add_now (&do_shutdown, NULL);
+    GNUNET_SCHEDULER_add_now (&do_shutdown, NULL);
     return;
   }
   if (0 >= (int) (num_peers = GNUNET_DISK_directory_scan (policy_dir, NULL, 
NULL)))
@@ -1344,7 +1358,7 @@
   {
     GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
                 _("No search strings file given. Exiting.\n"));
-    shutdown_task = GNUNET_SCHEDULER_add_now (&do_shutdown, NULL);
+    GNUNET_SCHEDULER_add_now (&do_shutdown, NULL);
     return;
   }
   nsearchstrs = load_search_strings (strings_file,
@@ -1357,7 +1371,7 @@
     GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
                 "File (%s) does not contain enough strings (%u/%u).\n",
                 strings_file, nsearchstrs, num_peers);
-    shutdown_task = GNUNET_SCHEDULER_add_now (&do_shutdown, NULL);
+    GNUNET_SCHEDULER_add_now (&do_shutdown, NULL);
     return;
   }
   if ( (0 == num_peers) || (NULL == search_strings))
@@ -1364,7 +1378,7 @@
   {
     GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
                 _("Error loading search strings. Exiting.\n"));
-    shutdown_task = GNUNET_SCHEDULER_add_now (&do_shutdown, NULL);
+    GNUNET_SCHEDULER_add_now (&do_shutdown, NULL);
     return;
   }
   for (i = 0; i < num_peers; i++)

Modified: gnunet/src/regex/gnunet-regex-simulation-profiler.c
===================================================================
--- gnunet/src/regex/gnunet-regex-simulation-profiler.c 2016-04-30 08:16:14 UTC 
(rev 37101)
+++ gnunet/src/regex/gnunet-regex-simulation-profiler.c 2016-04-30 08:17:37 UTC 
(rev 37102)
@@ -89,19 +89,9 @@
 static struct ProgressMeter *meter;
 
 /**
- * Abort task identifier.
- */
-static struct GNUNET_SCHEDULER_Task * abort_task;
-
-/**
- * Shutdown task identifier.
- */
-static struct GNUNET_SCHEDULER_Task * shutdown_task;
-
-/**
  * Scan task identifier;
  */
-static struct GNUNET_SCHEDULER_Task * scan_task;
+static struct GNUNET_SCHEDULER_Task *scan_task;
 
 /**
  * Global testing status.
@@ -240,8 +230,8 @@
  *
  * @param meter the meter to reset
  *
- * @return GNUNET_YES if meter reset,
- *         GNUNET_SYSERR on error
+ * @return #GNUNET_YES if meter reset,
+ *         #GNUNET_SYSERR on error
  */
 static int
 reset_meter (struct ProgressMeter *meter)
@@ -274,22 +264,29 @@
  */
 static void
 do_shutdown (void *cls)
-{
-  shutdown_task = NULL;
-  if (NULL != abort_task)
-    GNUNET_SCHEDULER_cancel (abort_task);
+{ 
   if (NULL != mysql_ctx)
+  {
     GNUNET_MYSQL_context_destroy (mysql_ctx);
+    mysql_ctx = NULL;
+  }
   if (NULL != meter)
+  {
     free_meter (meter);
-
-  GNUNET_SCHEDULER_shutdown (); /* Stop scheduler to shutdown testbed run */
+    meter = NULL;
+  }
 }
 
 
 /**
- * abort task to run on test timed out
+ * Abort task to run on test timed out.
  *
+ * FIXME: this doesn't actually work, it used to cancel
+ * the already running 'scan_task', but now that should
+ * always be NULL and do nothing. We instead need to set
+ * a global variable and abort scan_task internally, not
+ * via scheduler.
+ *
  * @param cls NULL
  */
 static void
@@ -296,25 +293,29 @@
 do_abort (void *cls)
 {
   GNUNET_log (GNUNET_ERROR_TYPE_WARNING, "Aborting\n");
-  abort_task = NULL;
-  GNUNET_SCHEDULER_cancel (scan_task);
-  scan_task = NULL;
+  if (NULL != scan_task)
+  {
+    GNUNET_SCHEDULER_cancel (scan_task);
+    scan_task = NULL;
+  }
   result = GNUNET_SYSERR;
-  GNUNET_SCHEDULER_add_now (&do_shutdown, NULL);
+  GNUNET_SCHEDULER_shutdown ();
 }
 
 
 /**
- * Dummy function for prepared select. Always return GNUNET_OK.
+ * Dummy function for prepared select. Always returns #GNUNET_OK.
  *
  * @param cls closure
  * @param num_values number of values.
  * @param values returned values from select stmt.
  *
- * @return GNUNET_OK
+ * @return #GNUNET_OK
  */
 static int
-return_ok (void *cls, unsigned int num_values, MYSQL_BIND * values)
+return_ok (void *cls,
+          unsigned int num_values,
+          MYSQL_BIND * values)
 {
   return GNUNET_OK;
 }
@@ -326,13 +327,16 @@
  * @param cls closure.
  * @param key hash for current state.
  * @param proof proof for current state.
- * @param accepting GNUNET_YES if this is an accepting state, GNUNET_NO if not.
+ * @param accepting #GNUNET_YES if this is an accepting state, #GNUNET_NO if 
not.
  * @param num_edges number of edges leaving current state.
  * @param edges edges leaving current state.
  */
 static void
-regex_iterator (void *cls, const struct GNUNET_HashCode *key, const char 
*proof,
-                int accepting, unsigned int num_edges,
+regex_iterator (void *cls,
+               const struct GNUNET_HashCode *key,
+               const char *proof,
+                int accepting,
+               unsigned int num_edges,
                 const struct REGEX_BLOCK_Edge *edges)
 {
   unsigned int i;
@@ -453,7 +457,7 @@
  * each state into a MySQL database.
  *
  * @param regex regular expression.
- * @return GNUNET_OK on success, GNUNET_SYSERR on failure.
+ * @return #GNUNET_OK on success, #GNUNET_SYSERR on failure.
  */
 static int
 announce_regex (const char *regex)
@@ -461,18 +465,20 @@
   struct REGEX_INTERNAL_Automaton *dfa;
 
   dfa =
-      REGEX_INTERNAL_construct_dfa (regex, strlen (regex), 
max_path_compression);
+      REGEX_INTERNAL_construct_dfa (regex,
+                                   strlen (regex),
+                                   max_path_compression);
 
   if (NULL == dfa)
   {
-    GNUNET_log (GNUNET_ERROR_TYPE_ERROR, "Failed to create DFA for regex %s\n",
+    GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
+               "Failed to create DFA for regex %s\n",
                 regex);
-    abort_task = GNUNET_SCHEDULER_add_now (&do_abort, NULL);
+    GNUNET_SCHEDULER_add_now (&do_abort, NULL);
     return GNUNET_SYSERR;
   }
-
-  REGEX_INTERNAL_iterate_all_edges (dfa, &regex_iterator, NULL);
-
+  REGEX_INTERNAL_iterate_all_edges (dfa,
+                                   &regex_iterator, NULL);
   REGEX_INTERNAL_automaton_destroy (dfa);
 
   return GNUNET_OK;
@@ -484,8 +490,8 @@
  *
  * @param cls closure
  * @param filename complete filename (absolute path)
- * @return GNUNET_OK to continue to iterate,
- *  GNUNET_SYSERR to abort iteration with error!
+ * @return #GNUNET_OK to continue to iterate,
+ *  #GNUNET_SYSERR to abort iteration with error!
  */
 static int
 policy_filename_cb (void *cls, const char *filename)
@@ -498,17 +504,20 @@
 
   GNUNET_assert (NULL != filename);
 
-  GNUNET_log (GNUNET_ERROR_TYPE_INFO, "Announcing regexes from file %s\n",
+  GNUNET_log (GNUNET_ERROR_TYPE_INFO,
+             "Announcing regexes from file %s\n",
               filename);
 
   if (GNUNET_YES != GNUNET_DISK_file_test (filename))
   {
-    GNUNET_log (GNUNET_ERROR_TYPE_WARNING, "Could not find policy file %s\n",
+    GNUNET_log (GNUNET_ERROR_TYPE_WARNING,
+               "Could not find policy file %s\n",
                 filename);
     return GNUNET_OK;
   }
   if (GNUNET_OK !=
-      GNUNET_DISK_file_size (filename, &filesize, GNUNET_YES, GNUNET_YES))
+      GNUNET_DISK_file_size (filename, &filesize,
+                            GNUNET_YES, GNUNET_YES))
     filesize = 0;
   if (0 == filesize)
   {
@@ -520,7 +529,8 @@
   if (filesize != GNUNET_DISK_fn_read (filename, data, filesize))
   {
     GNUNET_free (data);
-    GNUNET_log (GNUNET_ERROR_TYPE_WARNING, "Could not read policy file %s.\n",
+    GNUNET_log (GNUNET_ERROR_TYPE_WARNING,
+               "Could not read policy file %s.\n",
                 filename);
     return GNUNET_OK;
   }
@@ -545,11 +555,13 @@
   data[offset] = '\0';
   GNUNET_asprintf (&regex, "%s(%s)", regex_prefix, data);
   GNUNET_assert (NULL != regex);
-  GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Announcing regex: %s\n", regex);
+  GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
+             "Announcing regex: %s\n", regex);
 
   if (GNUNET_OK != announce_regex (regex))
   {
-    GNUNET_log (GNUNET_ERROR_TYPE_ERROR, "Could not announce regex %s\n",
+    GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
+               "Could not announce regex %s\n",
                 regex);
   }
   GNUNET_free (regex);
@@ -571,6 +583,7 @@
   char *stmt;
 
   /* Create an MySQL prepared statement for the inserts */
+  scan_task = NULL;
   GNUNET_asprintf (&stmt, INSERT_EDGE_STMT, table_name);
   stmt_handle = GNUNET_MYSQL_statement_prepare (mysql_ctx, stmt);
   GNUNET_free (stmt);
@@ -581,10 +594,13 @@
 
   GNUNET_assert (NULL != stmt_handle);
 
-  meter =
-      create_meter (num_policy_files, "Announcing policy files\n", GNUNET_YES);
+  meter = create_meter (num_policy_files,
+                       "Announcing policy files\n",
+                       GNUNET_YES);
   start_time = GNUNET_TIME_absolute_get ();
-  GNUNET_DISK_directory_scan (policy_dir, &policy_filename_cb, stmt_handle);
+  GNUNET_DISK_directory_scan (policy_dir,
+                             &policy_filename_cb,
+                             stmt_handle);
   duration = GNUNET_TIME_absolute_get_duration (start_time);
   reset_meter (meter);
   free_meter (meter);
@@ -592,12 +608,13 @@
 
   printf ("Announced %u files containing %u policies in %s\n"
           "Duplicate transitions: %llu\nMerged states: %llu\n",
-          num_policy_files, num_policies,
+          num_policy_files,
+         num_policies,
           GNUNET_STRINGS_relative_time_to_string (duration, GNUNET_NO),
-          num_merged_transitions, num_merged_states);
-
+          num_merged_transitions,
+         num_merged_states);
   result = GNUNET_OK;
-  shutdown_task = GNUNET_SCHEDULER_add_now (&do_shutdown, NULL);
+  GNUNET_SCHEDULER_shutdown ();
 }
 
 
@@ -610,7 +627,9 @@
  * @param config configuration
  */
 static void
-run (void *cls, char *const *args, const char *cfgfile,
+run (void *cls,
+     char *const *args,
+     const char *cfgfile,
      const struct GNUNET_CONFIGURATION_Handle *config)
 {
   if (NULL == args[0])
@@ -620,7 +639,8 @@
     result = GNUNET_SYSERR;
     return;
   }
-  if (GNUNET_YES != GNUNET_DISK_directory_test (args[0], GNUNET_YES))
+  if (GNUNET_YES !=
+      GNUNET_DISK_directory_test (args[0], GNUNET_YES))
   {
     fprintf (stderr,
              _("Specified policies directory does not exist. Exiting.\n"));
@@ -629,7 +649,8 @@
   }
   policy_dir = args[0];
 
-  num_policy_files = GNUNET_DISK_directory_scan (policy_dir, NULL, NULL);
+  num_policy_files = GNUNET_DISK_directory_scan (policy_dir,
+                                                NULL, NULL);
   meter = NULL;
 
   if (NULL == table_name)
@@ -642,32 +663,29 @@
   mysql_ctx = GNUNET_MYSQL_context_create (config, "regex-mysql");
   if (NULL == mysql_ctx)
   {
-    GNUNET_log (GNUNET_ERROR_TYPE_ERROR, "Failed to create mysql context\n");
+    GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
+               "Failed to create mysql context\n");
     result = GNUNET_SYSERR;
     return;
   }
 
   if (GNUNET_OK !=
-      GNUNET_CONFIGURATION_get_value_string (config, "regex-mysql",
-                                             "REGEX_PREFIX", &regex_prefix))
+      GNUNET_CONFIGURATION_get_value_string (config,
+                                            "regex-mysql",
+                                             "REGEX_PREFIX",
+                                            &regex_prefix))
   {
-    GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
-                _
-                ("%s service is lacking key configuration settings (%s).  
Exiting.\n"),
-                "regexprofiler", "regex_prefix");
+    GNUNET_log_config_missing (GNUNET_ERROR_TYPE_ERROR,
+                              "regex-mysql",
+                              "REGEX_PREFIX");
     result = GNUNET_SYSERR;
     return;
   }
 
-
   result = GNUNET_OK;
-
+  GNUNET_SCHEDULER_add_shutdown (&do_shutdown,
+                                NULL);
   scan_task = GNUNET_SCHEDULER_add_now (&do_directory_scan, NULL);
-
-  /* Scheduled the task to clean up when shutdown is called */
-  shutdown_task =
-      GNUNET_SCHEDULER_add_delayed (GNUNET_TIME_UNIT_FOREVER_REL, &do_shutdown,
-                                    NULL);
 }
 
 

Modified: gnunet/src/regex/gnunet-service-regex.c
===================================================================
--- gnunet/src/regex/gnunet-service-regex.c     2016-04-30 08:16:14 UTC (rev 
37101)
+++ gnunet/src/regex/gnunet-service-regex.c     2016-04-30 08:17:37 UTC (rev 
37102)
@@ -384,9 +384,8 @@
     GNUNET_SCHEDULER_shutdown ();
     return;
   }
-  GNUNET_SCHEDULER_add_delayed (GNUNET_TIME_UNIT_FOREVER_REL,
-                                &cleanup_task,
-                                NULL);
+  GNUNET_SCHEDULER_add_shutdown (&cleanup_task,
+                                NULL);
   nc = GNUNET_SERVER_notification_context_create (server, 1);
   stats = GNUNET_STATISTICS_create ("regex", cfg);
   GNUNET_SERVER_add_handlers (server, handlers);

Modified: gnunet/src/rest/gnunet-rest-server.c
===================================================================
--- gnunet/src/rest/gnunet-rest-server.c        2016-04-30 08:16:14 UTC (rev 
37101)
+++ gnunet/src/rest/gnunet-rest-server.c        2016-04-30 08:17:37 UTC (rev 
37102)
@@ -61,7 +61,7 @@
 /**
  * The task ID
  */
-static struct GNUNET_SCHEDULER_Task * httpd_task;
+static struct GNUNET_SCHEDULER_Task *httpd_task;
 
 /**
  * The port the service is running on (default 7776)
@@ -396,6 +396,16 @@
     GNUNET_SCHEDULER_cancel (httpd_task);
     httpd_task = NULL;
   }
+  if (NULL != ltask4)
+  {
+    GNUNET_SCHEDULER_cancel (ltask4);
+    ltask4 = NULL;
+  }
+  if (NULL != ltask6)
+  {
+    GNUNET_SCHEDULER_cancel (ltask6);
+    ltask6 = NULL;
+  }
 }
 
 
@@ -498,7 +508,6 @@
 do_accept (void *cls)
 {
   struct GNUNET_NETWORK_Handle *lsock = cls;
-  const struct GNUNET_SCHEDULER_TaskContext *tc;
   struct GNUNET_NETWORK_Handle *s;
   int fd;
   const struct sockaddr *addr;
@@ -508,9 +517,6 @@
     ltask4 = NULL;
   else
     ltask6 = NULL;
-  tc = GNUNET_SCHEDULER_get_task_context ();
-  if (0 != (tc->reason & GNUNET_SCHEDULER_REASON_SHUTDOWN))
-    return;
   if (lsock == lsock4)
     ltask4 = GNUNET_SCHEDULER_add_read_net (GNUNET_TIME_UNIT_FOREVER_REL,
                                             lsock,
@@ -770,8 +776,7 @@
                           (void *) cfg,
                           &load_plugin,
                           NULL);
-  GNUNET_SCHEDULER_add_delayed (GNUNET_TIME_UNIT_FOREVER_REL,
-                                &do_shutdown, NULL);
+  GNUNET_SCHEDULER_add_shutdown (&do_shutdown, NULL);
 }
 
 

Modified: gnunet/src/revocation/gnunet-revocation.c
===================================================================
--- gnunet/src/revocation/gnunet-revocation.c   2016-04-30 08:16:14 UTC (rev 
37101)
+++ gnunet/src/revocation/gnunet-revocation.c   2016-04-30 08:17:37 UTC (rev 
37102)
@@ -79,7 +79,12 @@
  */
 static unsigned long long matching_bits;
 
+/**
+ * Task used for proof-of-work calculation.
+ */
+static struct GNUNET_SCHEDULER_Task *pow_task;
 
+
 /**
  * Function run if the user aborts with CTRL-C.
  *
@@ -226,32 +231,60 @@
 
 
 /**
+ * Write the current state of the revocation data
+ * to disk.
+ *
+ * @param rd data to sync
+ */
+static void
+sync_rd (const struct RevocationData *rd)
+{ 
+  if ( (NULL != filename) &&
+       (sizeof (struct RevocationData) ==
+       GNUNET_DISK_fn_write (filename,
+                             &rd,
+                             sizeof (rd),
+                             GNUNET_DISK_PERM_USER_READ |
+                             GNUNET_DISK_PERM_USER_WRITE)) )
+    GNUNET_log_strerror_file (GNUNET_ERROR_TYPE_ERROR,
+                             "write",
+                             filename);
+}
+
+
+/**
  * Perform the proof-of-work calculation.
  *
  * @param cls the `struct RevocationData`
  */
 static void
+calculate_pow_shutdown (void *cls)
+{
+  struct RevocationData *rd = cls;
+
+  if (NULL != pow_task)
+  {
+    GNUNET_SCHEDULER_cancel (pow_task);
+    pow_task = NULL;
+  }
+  sync_rd (rd);
+  GNUNET_free (rd);
+}
+
+
+/**
+ * Perform the proof-of-work calculation.
+ *
+ * @param cls the `struct RevocationData`
+ */
+static void
 calculate_pow (void *cls)
 {
   struct RevocationData *rd = cls;
-  const struct GNUNET_SCHEDULER_TaskContext *tc;
 
   /* store temporary results */
-  tc = GNUNET_SCHEDULER_get_task_context ();
-  if ( (0 != (GNUNET_SCHEDULER_REASON_SHUTDOWN & tc->reason)) ||
-       (0 == (rd->pow % 128) ) )
-  {
-    if ( (NULL != filename) &&
-         (sizeof (struct RevocationData) ==
-          GNUNET_DISK_fn_write (filename,
-                                &rd,
-                                sizeof (rd),
-                                GNUNET_DISK_PERM_USER_READ |
-                                GNUNET_DISK_PERM_USER_WRITE)) )
-      GNUNET_log_strerror_file (GNUNET_ERROR_TYPE_ERROR,
-                                "write",
-                                filename);
-  }
+  if (0 == (rd->pow % 128))
+    sync_rd (rd);
   /* display progress estimate */
   if ( (0 == ((1 << matching_bits) / 100 / 50)) ||
        (0 == (rd->pow % ((1 << matching_bits) / 100 / 50))) )
@@ -261,11 +294,6 @@
          (0 == (rd->pow % ((1 << matching_bits) / 100))) ) )
     FPRINTF (stderr, " - @ %3u%% (estimate)\n",
              (unsigned int) (rd->pow * 100) / (1 << matching_bits));
-  if (0 != (GNUNET_SCHEDULER_REASON_SHUTDOWN & tc->reason))
-  {
-    GNUNET_free (rd);
-    return;
-  }
   /* actually do POW calculation */
   rd->pow++;
   if (GNUNET_OK ==
@@ -297,8 +325,8 @@
     GNUNET_free (rd);
     return;
   }
-  GNUNET_SCHEDULER_add_now (&calculate_pow,
-                            rd);
+  pow_task = GNUNET_SCHEDULER_add_now (&calculate_pow,
+                                      rd);
 }
 
 
@@ -371,8 +399,10 @@
   FPRINTF (stderr,
            "%s",
            _("Revocation certificate not ready, calculating proof of work\n"));
-  GNUNET_SCHEDULER_add_now (&calculate_pow,
-                            rd);
+  pow_task = GNUNET_SCHEDULER_add_now (&calculate_pow,
+                                      rd);
+  GNUNET_SCHEDULER_add_shutdown (&calculate_pow_shutdown,
+                                rd);
 }
 
 
@@ -406,9 +436,8 @@
                test_ego);
       return;
     }
-    GNUNET_SCHEDULER_add_delayed (GNUNET_TIME_UNIT_FOREVER_REL,
-                                  &do_shutdown,
-                                  NULL);
+    GNUNET_SCHEDULER_add_shutdown (&do_shutdown,
+                                  NULL);
     q = GNUNET_REVOCATION_query (cfg,
                                  &pk,
                                  &print_query_result,
@@ -444,9 +473,8 @@
                                      revoke_ego,
                                      &ego_callback,
                                      NULL);
-    GNUNET_SCHEDULER_add_delayed (GNUNET_TIME_UNIT_FOREVER_REL,
-                                  &do_shutdown,
-                                  NULL);
+    GNUNET_SCHEDULER_add_shutdown (&do_shutdown,
+                                  NULL);
     return;
   }
   if ( (NULL != filename) &&
@@ -462,9 +490,8 @@
                filename);
       return;
     }
-    GNUNET_SCHEDULER_add_delayed (GNUNET_TIME_UNIT_FOREVER_REL,
-                                  &do_shutdown,
-                                  NULL);
+    GNUNET_SCHEDULER_add_shutdown (&do_shutdown,
+                                  NULL);
     if (GNUNET_YES !=
         GNUNET_REVOCATION_check_pow (&rd.key,
                                      rd.pow,
@@ -473,10 +500,11 @@
       struct RevocationData *cp = GNUNET_new (struct RevocationData);
 
       *cp = rd;
-      GNUNET_SCHEDULER_add_now (&calculate_pow,
-                                cp);
+      pow_task = GNUNET_SCHEDULER_add_now (&calculate_pow,
+                                          cp);
+      GNUNET_SCHEDULER_add_shutdown (&calculate_pow_shutdown,
+                                    cp);
       return;
-
     }
     perform_revocation (&rd);
     return;

Modified: gnunet/src/revocation/gnunet-service-revocation.c
===================================================================
--- gnunet/src/revocation/gnunet-service-revocation.c   2016-04-30 08:16:14 UTC 
(rev 37101)
+++ gnunet/src/revocation/gnunet-service-revocation.c   2016-04-30 08:17:37 UTC 
(rev 37102)
@@ -901,9 +901,8 @@
   }
   GNUNET_free (fn);
 
-  GNUNET_SCHEDULER_add_delayed (GNUNET_TIME_UNIT_FOREVER_REL,
-                                &shutdown_task,
-                                NULL);
+  GNUNET_SCHEDULER_add_shutdown (&shutdown_task,
+                                NULL);
   peers = GNUNET_CONTAINER_multipeermap_create (128,
                                                 GNUNET_YES);
   GNUNET_SERVER_add_handlers (srv, handlers);

Modified: gnunet/src/rps/gnunet-rps.c
===================================================================
--- gnunet/src/rps/gnunet-rps.c 2016-04-30 08:16:14 UTC (rev 37101)
+++ gnunet/src/rps/gnunet-rps.c 2016-04-30 08:17:37 UTC (rev 37102)
@@ -46,12 +46,6 @@
 
 
 /**
- * Shutdown task
- */
-static struct GNUNET_SCHEDULER_Task *shutdown_task;
-
-
-/**
  * Set an option of type 'struct GNUNET_PeerIdentity *' from the command line.
  * A pointer to this function should be passed as part of the
  * 'struct GNUNET_GETOPT_CommandLineOption' array to initialize options
@@ -96,7 +90,6 @@
 static void
 do_shutdown (void *cls)
 {
-  shutdown_task = NULL;
   if (NULL != req_handle)
     GNUNET_RPS_request_cancel (req_handle);
   GNUNET_RPS_disconnect (rps_handle);
@@ -126,8 +119,7 @@
   }
   ret = 0;
 
-  GNUNET_SCHEDULER_cancel (shutdown_task);
-  GNUNET_SCHEDULER_add_now (do_shutdown, NULL);
+  GNUNET_SCHEDULER_shutdown ();
 }
 
 
@@ -156,8 +148,7 @@
     GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
         "Requesting %u PeerIDs\n", num_peers);
     req_handle = GNUNET_RPS_request_peers (rps_handle, num_peers, 
reply_handle, NULL);
-    shutdown_task = GNUNET_SCHEDULER_add_delayed (GNUNET_TIME_UNIT_FOREVER_REL,
-        &do_shutdown, NULL);
+    GNUNET_SCHEDULER_add_shutdown (&do_shutdown, NULL);
   }
   else
   { /* Seed PeerID */
@@ -164,7 +155,7 @@
     GNUNET_RPS_seed_ids (rps_handle, 1, peer_id);
     FPRINTF (stdout, "Seeded PeerID %s\n", GNUNET_i2s_full (peer_id));
     ret = 0;
-    GNUNET_SCHEDULER_add_now (do_shutdown, NULL);
+    GNUNET_SCHEDULER_add_now (&do_shutdown, NULL);
   }
 }
 

Modified: gnunet/src/rps/gnunet-service-rps.c
===================================================================
--- gnunet/src/rps/gnunet-service-rps.c 2016-04-30 08:16:14 UTC (rev 37101)
+++ gnunet/src/rps/gnunet-service-rps.c 2016-04-30 08:17:37 UTC (rev 37102)
@@ -1,6 +1,6 @@
 /*
      This file is part of GNUnet.
-     Copyright (C)
+     Copyright (C) 2013-2015 GNUnet e.V.
 
      GNUnet is free software; you can redistribute it and/or modify
      it under the terms of the GNU General Public License as published
@@ -149,16 +149,14 @@
  */
 static struct RPS_Sampler *client_sampler;
 
-
 /**
  * Name to log view to
  */
 static char *file_name_view_log;
 
-
 /**
- * The size of sampler we need to be able to satisfy the client's need of
- * random peers.
+ * The size of sampler we need to be able to satisfy the client's need
+ * of random peers.
  */
 static unsigned int sampler_size_client_need;
 
@@ -170,7 +168,6 @@
  */
 static unsigned int sampler_size_est_need;
 
-
 /**
  * Percentage of total peer number in the view
  * to send random PUSHes to
@@ -184,12 +181,6 @@
 static float beta;
 
 /**
- * The percentage gamma of history updates.
- * Simply 1 - alpha - beta
- */
-
-
-/**
  * Identifier for the main task that runs periodically.
  */
 static struct GNUNET_SCHEDULER_Task *do_round_task;
@@ -199,8 +190,6 @@
  */
 static struct GNUNET_TIME_Relative round_interval;
 
-
-
 /**
  * List to store peers received through pushes temporary.
  */
@@ -211,7 +200,6 @@
  */
 static struct CustomPeerMap *pull_map;
 
-
 /**
  * Handler to NSE.
  */
@@ -230,9 +218,8 @@
 /**
  * Handle for cancellation of iteration over peers.
  */
-struct GNUNET_PEERINFO_NotifyContext *peerinfo_notify_handle;
+static struct GNUNET_PEERINFO_NotifyContext *peerinfo_notify_handle;
 
-
 /**
  * Request counter.
  *
@@ -263,13 +250,12 @@
 /**
  * The prediction of the rate of requests
  */
-static struct GNUNET_TIME_Relative  request_rate;
+static struct GNUNET_TIME_Relative request_rate;
 
-
 /**
  * Number of history update tasks.
  */
-uint32_t num_hist_update_tasks;
+static uint32_t num_hist_update_tasks;
 
 
 #ifdef ENABLE_MALICIOUS
@@ -281,18 +267,18 @@
  * 2 Try to partition the network
  * 3 Combined attack
  */
-uint32_t mal_type = 0;
+static uint32_t mal_type;
 
 /**
  * Other malicious peers
  */
-static struct GNUNET_PeerIdentity *mal_peers = NULL;
+static struct GNUNET_PeerIdentity *mal_peers;
 
 /**
  * Hashmap of malicious peers used as set.
  * Used to more efficiently check whether we know that peer.
  */
-static struct GNUNET_CONTAINER_MultiPeerMap *mal_peer_set = NULL;
+static struct GNUNET_CONTAINER_MultiPeerMap *mal_peer_set;
 
 /**
  * Number of other malicious peers
@@ -320,27 +306,26 @@
 /**
  * If type is 2 this is the DLL of attacked peers
  */
-static struct AttackedPeer *att_peers_head = NULL;
-static struct AttackedPeer *att_peers_tail = NULL;
+static struct AttackedPeer *att_peers_head;
+static struct AttackedPeer *att_peers_tail;
 
 /**
  * This index is used to point to an attacked peer to
  * implement the round-robin-ish way to select attacked peers.
  */
-static struct AttackedPeer *att_peer_index = NULL;
+static struct AttackedPeer *att_peer_index;
 
 /**
  * Hashmap of attacked peers used as set.
  * Used to more efficiently check whether we know that peer.
  */
-static struct GNUNET_CONTAINER_MultiPeerMap *att_peer_set = NULL;
+static struct GNUNET_CONTAINER_MultiPeerMap *att_peer_set;
 
 /**
  * Number of attacked peers
  */
-static uint32_t num_attacked_peers = 0;
+static uint32_t num_attacked_peers;
 
-
 /**
  * If type is 1 this is the attacked peer
  */
@@ -362,10 +347,6 @@
 ***********************************************************************/
 
 
-
-
-
-
 /***********************************************************************
  * Util functions
 ***********************************************************************/
@@ -374,8 +355,9 @@
 /**
  * Print peerlist to log.
  */
-void
-print_peer_list (struct GNUNET_PeerIdentity *list, unsigned int len)
+static void
+print_peer_list (struct GNUNET_PeerIdentity *list,
+                unsigned int len)
 {
   unsigned int i;
 
@@ -395,7 +377,7 @@
 /**
  * Remove peer from list.
  */
-  void
+static void
 rem_from_list (struct GNUNET_PeerIdentity **peer_list,
                unsigned int *list_size,
                const struct GNUNET_PeerIdentity *peer)
@@ -429,9 +411,10 @@
 
 /**
  * Sum all time relatives of an array.
-  */
-  struct GNUNET_TIME_Relative
-T_relative_sum (const struct GNUNET_TIME_Relative *rel_array, uint32_t 
arr_size)
+ */
+static struct GNUNET_TIME_Relative
+T_relative_sum (const struct GNUNET_TIME_Relative *rel_array,
+               uint32_t arr_size)
 {
   struct GNUNET_TIME_Relative sum;
   uint32_t i;
@@ -448,10 +431,13 @@
 /**
  * Compute the average of given time relatives.
  */
-  struct GNUNET_TIME_Relative
-T_relative_avg (const struct GNUNET_TIME_Relative *rel_array, uint32_t 
arr_size)
+static struct GNUNET_TIME_Relative
+T_relative_avg (const struct GNUNET_TIME_Relative *rel_array,
+               uint32_t arr_size)
 {
-  return GNUNET_TIME_relative_divide (T_relative_sum (rel_array, arr_size), 
arr_size);
+  return GNUNET_TIME_relative_divide (T_relative_sum (rel_array,
+                                                     arr_size),
+                                     arr_size);
 }
 
 
@@ -458,8 +444,10 @@
 /**
  * Put random peer from sampler into the view as history update.
  */
-  void
-hist_update (void *cls, struct GNUNET_PeerIdentity *ids, uint32_t num_peers)
+static void
+hist_update (void *cls,
+            struct GNUNET_PeerIdentity *ids,
+            uint32_t num_peers)
 {
   unsigned int i;
 
@@ -475,7 +463,6 @@
 }
 
 
-
 /**
  * Wrapper around #RPS_sampler_resize()
  *
@@ -526,7 +513,7 @@
  *
  * Called every time we receive a request from the client.
  */
-  void
+static void
 est_request_rate()
 {
   struct GNUNET_TIME_Relative max_round_duration;
@@ -647,28 +634,33 @@
  *
  * Called once we know a peer is live.
  */
-  void
-insert_in_pull_map (void *cls, const struct GNUNET_PeerIdentity *peer)
+static void
+insert_in_pull_map (void *cls,
+                   const struct GNUNET_PeerIdentity *peer)
 {
   CustomPeerMap_put (pull_map, peer);
 }
 
+
 /**
  * Insert PeerID in #view
  *
  * Called once we know a peer is live.
  */
-  void
-insert_in_view (void *cls, const struct GNUNET_PeerIdentity *peer)
+static void
+insert_in_view (void *cls,
+               const struct GNUNET_PeerIdentity *peer)
 {
   View_put (peer);
 }
 
+
 /**
  * Update sampler with given PeerID.
  */
-  void
-insert_in_sampler (void *cls, const struct GNUNET_PeerIdentity *peer)
+static void
+insert_in_sampler (void *cls,
+                  const struct GNUNET_PeerIdentity *peer)
 {
   LOG (GNUNET_ERROR_TYPE_DEBUG,
        "Updating samplers with peer %s from insert_in_sampler()\n",
@@ -875,6 +867,7 @@
   GNUNET_free (rep_cls);
 }
 
+
 static void
 destroy_cli_ctx (struct ClientContext *cli_ctx)
 {
@@ -899,8 +892,9 @@
  * Updates sizes of sampler list and view and adapt those lists
  * accordingly.
  */
-  void
-nse_callback (void *cls, struct GNUNET_TIME_Absolute timestamp,
+static void
+nse_callback (void *cls,
+             struct GNUNET_TIME_Absolute timestamp,
               double logestimate, double std_dev)
 {
   double estimate;
@@ -933,7 +927,7 @@
  *
  * Sends those to the requesting client.
  */
-void
+static void
 client_respond (void *cls,
                 struct GNUNET_PeerIdentity *peer_ids,
                 uint32_t num_peers)
@@ -1080,7 +1074,7 @@
  * @param client identification of the client
  * @param message the actual message
  */
-  static void
+static void
 handle_client_seed (void *cls,
                     struct GNUNET_SERVER_Client *client,
                     const struct GNUNET_MessageHeader *message)
@@ -1136,7 +1130,7 @@
   ////GNUNET_free (peers);
 
   GNUNET_SERVER_receive_done (client,
-                                               GNUNET_OK);
+                             GNUNET_OK);
 }
 
 
@@ -1153,9 +1147,9 @@
  */
 static int
 handle_peer_push (void *cls,
-    struct GNUNET_CADET_Channel *channel,
-    void **channel_ctx,
-    const struct GNUNET_MessageHeader *msg)
+                 struct GNUNET_CADET_Channel *channel,
+                 void **channel_ctx,
+                 const struct GNUNET_MessageHeader *msg)
 {
   const struct GNUNET_PeerIdentity *peer;
 
@@ -1165,9 +1159,11 @@
     GNUNET_CADET_channel_get_info (channel, GNUNET_CADET_OPTION_PEER);
   // FIXME wait for cadet to change this function
 
-  LOG (GNUNET_ERROR_TYPE_DEBUG, "Received PUSH (%s)\n", GNUNET_i2s (peer));
+  LOG (GNUNET_ERROR_TYPE_DEBUG,
+       "Received PUSH (%s)\n",
+       GNUNET_i2s (peer));
 
-  #ifdef ENABLE_MALICIOUS
+#ifdef ENABLE_MALICIOUS
   struct AttackedPeer *tmp_att_peer;
 
   tmp_att_peer = GNUNET_new (struct AttackedPeer);
@@ -1220,9 +1216,9 @@
  */
 static int
 handle_peer_pull_request (void *cls,
-    struct GNUNET_CADET_Channel *channel,
-    void **channel_ctx,
-    const struct GNUNET_MessageHeader *msg)
+                         struct GNUNET_CADET_Channel *channel,
+                         void **channel_ctx,
+                         const struct GNUNET_MessageHeader *msg)
 {
   struct GNUNET_PeerIdentity *peer;
   const struct GNUNET_PeerIdentity *view_array;
@@ -1272,7 +1268,7 @@
  * @param channel_ctx The context associated with this channel
  * @param msg The message header
  */
-  static int
+static int
 handle_peer_pull_reply (void *cls,
                         struct GNUNET_CADET_Channel *channel,
                         void **channel_ctx,
@@ -1404,7 +1400,8 @@
  * @param spread the inverse amount of deviation from the mean
  */
 static struct GNUNET_TIME_Relative
-compute_rand_delay (struct GNUNET_TIME_Relative mean, unsigned int spread)
+compute_rand_delay (struct GNUNET_TIME_Relative mean,
+                   unsigned int spread)
 {
   struct GNUNET_TIME_Relative half_interval;
   struct GNUNET_TIME_Relative ret;
@@ -1496,7 +1493,7 @@
  * @param client The client that sent the message
  * @param msg The message header
  */
-  static void
+static void
 handle_client_act_malicious (void *cls,
                              struct GNUNET_SERVER_Client *client,
                              const struct GNUNET_MessageHeader *msg)
@@ -1613,8 +1610,8 @@
   {
     GNUNET_break (0);
   }
-
-  GNUNET_SERVER_receive_done (client,  GNUNET_OK);
+  GNUNET_SERVER_receive_done (client,
+                             GNUNET_OK);
 }
 
 
@@ -1631,7 +1628,8 @@
   struct GNUNET_TIME_Relative time_next_round;
   struct AttackedPeer *tmp_att_peer;
 
-  LOG (GNUNET_ERROR_TYPE_DEBUG, "Going to execute next round maliciously type 
%" PRIu32 ".\n",
+  LOG (GNUNET_ERROR_TYPE_DEBUG,
+       "Going to execute next round maliciously type %" PRIu32 ".\n",
       mal_type);
   do_round_task = NULL;
   GNUNET_assert (mal_type <= 3);
@@ -1744,7 +1742,8 @@
   //do_round_task = GNUNET_SCHEDULER_add_delayed (round_interval, 
&do_mal_round,
   //NULL);
   GNUNET_assert (NULL == do_round_task);
-  do_round_task = GNUNET_SCHEDULER_add_delayed (time_next_round, 
&do_mal_round, NULL);
+  do_round_task = GNUNET_SCHEDULER_add_delayed (time_next_round,
+                                               &do_mal_round, NULL);
   LOG (GNUNET_ERROR_TYPE_DEBUG, "Finished round\n");
 }
 #endif /* ENABLE_MALICIOUS */
@@ -1758,8 +1757,6 @@
 static void
 do_round (void *cls)
 {
-  LOG (GNUNET_ERROR_TYPE_DEBUG, "Going to execute next round.\n");
-
   uint32_t i;
   const struct GNUNET_PeerIdentity *view_array;
   unsigned int *permut;
@@ -1770,6 +1767,8 @@
   struct GNUNET_PeerIdentity peer;
   struct GNUNET_PeerIdentity *update_peer;
 
+  LOG (GNUNET_ERROR_TYPE_DEBUG,
+       "Going to execute next round.\n");
   do_round_task = NULL;
   LOG (GNUNET_ERROR_TYPE_DEBUG,
        "Printing view:\n");
@@ -1967,7 +1966,8 @@
   time_next_round = compute_rand_delay (round_interval, 2);
 
   /* Schedule next round */
-  do_round_task = GNUNET_SCHEDULER_add_delayed (time_next_round, &do_round, 
NULL);
+  do_round_task = GNUNET_SCHEDULER_add_delayed (time_next_round,
+                                               &do_round, NULL);
   LOG (GNUNET_ERROR_TYPE_DEBUG, "Finished round\n");
 }
 
@@ -2036,9 +2036,8 @@
 static void
 shutdown_task (void *cls)
 {
-
-  LOG (GNUNET_ERROR_TYPE_DEBUG, "RPS is going down\n");
-
+  LOG (GNUNET_ERROR_TYPE_DEBUG,
+       "RPS is going down\n");
   GNUNET_PEERINFO_notify_cancel (peerinfo_notify_handle);
   GNUNET_PEERINFO_disconnect (peerinfo_handle);
 
@@ -2153,9 +2152,8 @@
   do_round_task = GNUNET_SCHEDULER_add_now (&do_round, NULL);
   LOG (GNUNET_ERROR_TYPE_DEBUG, "Scheduled first round\n");
 
-  GNUNET_SCHEDULER_add_delayed (GNUNET_TIME_UNIT_FOREVER_REL,
-                                                       &shutdown_task,
-                                                       NULL);
+  GNUNET_SCHEDULER_add_shutdown (&shutdown_task,
+                                NULL);
 }
 
 

Modified: gnunet/src/rps/gnunet-service-rps_sampler.c
===================================================================
--- gnunet/src/rps/gnunet-service-rps_sampler.c 2016-04-30 08:16:14 UTC (rev 
37101)
+++ gnunet/src/rps/gnunet-service-rps_sampler.c 2016-04-30 08:17:37 UTC (rev 
37102)
@@ -533,12 +533,8 @@
   struct GetPeerCls *gpc = cls;
   uint32_t r_index;
   struct RPS_Sampler *sampler;
-  const struct GNUNET_SCHEDULER_TaskContext *tc;
 
   gpc->get_peer_task = NULL;
-  tc = GNUNET_SCHEDULER_get_task_context ();
-  if (0 != (tc->reason & GNUNET_SCHEDULER_REASON_SHUTDOWN))
-    return;
   sampler = gpc->req_handle->sampler;
 
   /**;
@@ -588,12 +584,8 @@
   struct RPS_SamplerElement *s_elem;
   struct GNUNET_TIME_Relative last_request_diff;
   struct RPS_Sampler *sampler;
-  const struct GNUNET_SCHEDULER_TaskContext *tc;
 
   gpc->get_peer_task = NULL;
-  tc = GNUNET_SCHEDULER_get_task_context ();
-  if (0 != (tc->reason & GNUNET_SCHEDULER_REASON_SHUTDOWN))
-    return;
   sampler = gpc->req_handle->sampler;
 
   LOG (GNUNET_ERROR_TYPE_DEBUG, "Single peer was requested\n");
@@ -607,7 +599,8 @@
 
   if (EMPTY == s_elem->is_empty)
   {
-    LOG (GNUNET_ERROR_TYPE_DEBUG, "Sampler_mod element empty, 
rescheduling.\n");
+    LOG (GNUNET_ERROR_TYPE_DEBUG,
+        "Sampler_mod element empty, rescheduling.\n");
     GNUNET_assert (NULL == gpc->get_peer_task);
     gpc->get_peer_task =
       GNUNET_SCHEDULER_add_delayed (sampler->max_round_interval,
@@ -708,7 +701,8 @@
                                  req_handle->gpc_tail,
                                  gpc);
     // maybe add a little delay
-    gpc->get_peer_task = GNUNET_SCHEDULER_add_now (sampler->get_peers, gpc);
+    gpc->get_peer_task = GNUNET_SCHEDULER_add_now (sampler->get_peers,
+                                                  gpc);
   }
   return req_handle;
 }

Modified: gnunet/src/rps/test_rps.c
===================================================================
--- gnunet/src/rps/test_rps.c   2016-04-30 08:16:14 UTC (rev 37101)
+++ gnunet/src/rps/test_rps.c   2016-04-30 08:17:37 UTC (rev 37102)
@@ -38,7 +38,7 @@
 /**
  * How many peers do we start?
  */
-uint32_t num_peers;
+static uint32_t num_peers;
 
 /**
  * How long do we run the test?
@@ -256,7 +256,6 @@
  */
 static int ok;
 
-
 /**
  * Identifier for the churn task that runs periodically
  */
@@ -263,12 +262,6 @@
 static struct GNUNET_SCHEDULER_Task *churn_task;
 
 /**
- * Identifier for the churn task that runs periodically
- */
-static struct GNUNET_SCHEDULER_Task *shutdown_task;
-
-
-/**
  * Called to initialise the given RPSPeer
  */
 typedef void (*InitPeer) (struct RPSPeer *rps_peer);
@@ -362,7 +355,7 @@
  * Append arguments to file
  */
 static void
-tofile_ (const char *file_name, char *line)
+tofile_ (const char *file_name, const char *line)
 {
   struct GNUNET_DISK_FileHandle *f;
   /* char output_buffer[512]; */
@@ -754,8 +747,7 @@
 
   if (0 == evaluate ())
   {
-    GNUNET_SCHEDULER_cancel (shutdown_task);
-    shutdown_task = GNUNET_SCHEDULER_add_now (&shutdown_op, NULL);
+    GNUNET_SCHEDULER_shutdown ();
   }
 }
 
@@ -1388,7 +1380,7 @@
 
   if (NULL != churn_task)
     GNUNET_SCHEDULER_cancel (churn_task);
-  shutdown_task = GNUNET_SCHEDULER_add_delayed (timeout, &shutdown_op, NULL);
+  GNUNET_SCHEDULER_add_delayed (timeout, &shutdown_op, NULL);
 }
 
 

Modified: gnunet/src/scalarproduct/gnunet-scalarproduct.c
===================================================================
--- gnunet/src/scalarproduct/gnunet-scalarproduct.c     2016-04-30 08:16:14 UTC 
(rev 37101)
+++ gnunet/src/scalarproduct/gnunet-scalarproduct.c     2016-04-30 08:17:37 UTC 
(rev 37102)
@@ -327,9 +327,8 @@
     return;
   }
   GNUNET_free (elements);
-  GNUNET_SCHEDULER_add_delayed (GNUNET_TIME_UNIT_FOREVER_REL,
-                                &shutdown_task,
-                                NULL);
+  GNUNET_SCHEDULER_add_shutdown (&shutdown_task,
+                                NULL);
   ret = 0;
 }
 

Modified: gnunet/src/scalarproduct/gnunet-service-scalarproduct-ecc_alice.c
===================================================================
--- gnunet/src/scalarproduct/gnunet-service-scalarproduct-ecc_alice.c   
2016-04-30 08:16:14 UTC (rev 37101)
+++ gnunet/src/scalarproduct/gnunet-service-scalarproduct-ecc_alice.c   
2016-04-30 08:17:37 UTC (rev 37102)
@@ -1193,9 +1193,8 @@
     GNUNET_SCHEDULER_shutdown ();
     return;
   }
-  GNUNET_SCHEDULER_add_delayed (GNUNET_TIME_UNIT_FOREVER_REL,
-                                &shutdown_task,
-                                NULL);
+  GNUNET_SCHEDULER_add_shutdown (&shutdown_task,
+                                NULL);
 
 }
 

Modified: gnunet/src/scalarproduct/gnunet-service-scalarproduct-ecc_bob.c
===================================================================
--- gnunet/src/scalarproduct/gnunet-service-scalarproduct-ecc_bob.c     
2016-04-30 08:16:14 UTC (rev 37101)
+++ gnunet/src/scalarproduct/gnunet-service-scalarproduct-ecc_bob.c     
2016-04-30 08:17:37 UTC (rev 37102)
@@ -1251,9 +1251,8 @@
     GNUNET_SCHEDULER_shutdown ();
     return;
   }
-  GNUNET_SCHEDULER_add_delayed (GNUNET_TIME_UNIT_FOREVER_REL,
-                                &shutdown_task,
-                                NULL);
+  GNUNET_SCHEDULER_add_shutdown (&shutdown_task,
+                                NULL);
 }
 
 

Modified: gnunet/src/scalarproduct/gnunet-service-scalarproduct_alice.c
===================================================================
--- gnunet/src/scalarproduct/gnunet-service-scalarproduct_alice.c       
2016-04-30 08:16:14 UTC (rev 37101)
+++ gnunet/src/scalarproduct/gnunet-service-scalarproduct_alice.c       
2016-04-30 08:17:37 UTC (rev 37102)
@@ -1418,9 +1418,8 @@
     GNUNET_SCHEDULER_shutdown ();
     return;
   }
-  GNUNET_SCHEDULER_add_delayed (GNUNET_TIME_UNIT_FOREVER_REL,
-                                &shutdown_task,
-                                NULL);
+  GNUNET_SCHEDULER_add_shutdown (&shutdown_task,
+                                NULL);
 
 }
 

Modified: gnunet/src/scalarproduct/gnunet-service-scalarproduct_bob.c
===================================================================
--- gnunet/src/scalarproduct/gnunet-service-scalarproduct_bob.c 2016-04-30 
08:16:14 UTC (rev 37101)
+++ gnunet/src/scalarproduct/gnunet-service-scalarproduct_bob.c 2016-04-30 
08:17:37 UTC (rev 37102)
@@ -1548,9 +1548,8 @@
     GNUNET_SCHEDULER_shutdown ();
     return;
   }
-  GNUNET_SCHEDULER_add_delayed (GNUNET_TIME_UNIT_FOREVER_REL,
-                                &shutdown_task,
-                                NULL);
+  GNUNET_SCHEDULER_add_shutdown (&shutdown_task,
+                                NULL);
 }
 
 

Modified: gnunet/src/secretsharing/gnunet-secretsharing-profiler.c
===================================================================
--- gnunet/src/secretsharing/gnunet-secretsharing-profiler.c    2016-04-30 
08:16:14 UTC (rev 37101)
+++ gnunet/src/secretsharing/gnunet-secretsharing-profiler.c    2016-04-30 
08:17:37 UTC (rev 37102)
@@ -530,8 +530,7 @@
 
   GNUNET_log (GNUNET_ERROR_TYPE_INFO, "test master\n");
 
-  GNUNET_SCHEDULER_add_delayed (GNUNET_TIME_UNIT_FOREVER_REL,
-                                &handle_shutdown, NULL);
+  GNUNET_SCHEDULER_add_shutdown (&handle_shutdown, NULL);
 
   peers = started_peers;
 

Modified: gnunet/src/secretsharing/gnunet-service-secretsharing.c
===================================================================
--- gnunet/src/secretsharing/gnunet-service-secretsharing.c     2016-04-30 
08:16:14 UTC (rev 37101)
+++ gnunet/src/secretsharing/gnunet-service-secretsharing.c     2016-04-30 
08:17:37 UTC (rev 37102)
@@ -2255,8 +2255,8 @@
   }
   GNUNET_SERVER_add_handlers (server, handlers);
   GNUNET_SERVER_disconnect_notify (server, &handle_client_disconnect, NULL);
-  GNUNET_SCHEDULER_add_delayed (GNUNET_TIME_UNIT_FOREVER_REL, &cleanup_task,
-                                NULL);
+  GNUNET_SCHEDULER_add_shutdown (&cleanup_task,
+                                NULL);
 }
 
 

Modified: gnunet/src/secretsharing/test_secretsharing_api.c
===================================================================
--- gnunet/src/secretsharing/test_secretsharing_api.c   2016-04-30 08:16:14 UTC 
(rev 37101)
+++ gnunet/src/secretsharing/test_secretsharing_api.c   2016-04-30 08:17:37 UTC 
(rev 37102)
@@ -68,8 +68,7 @@
   struct GNUNET_TIME_Absolute start;
   struct GNUNET_TIME_Absolute deadline;
 
-  GNUNET_SCHEDULER_add_delayed (GNUNET_TIME_UNIT_FOREVER_REL,
-                                handle_shutdown, NULL);
+  GNUNET_SCHEDULER_add_shutdown (&handle_shutdown, NULL);
 
   GNUNET_log (GNUNET_ERROR_TYPE_INFO, "testing secretsharing api\n");
 

Modified: gnunet/src/set/gnunet-service-set.c
===================================================================
--- gnunet/src/set/gnunet-service-set.c 2016-04-30 08:16:14 UTC (rev 37101)
+++ gnunet/src/set/gnunet-service-set.c 2016-04-30 08:17:37 UTC (rev 37102)
@@ -1710,7 +1710,6 @@
  * Called to clean up, after a shutdown has been requested.
  *
  * @param cls closure
- * @param tc context information (why was this task triggered now)
  */
 static void
 shutdown_task (void *cls)
@@ -1740,7 +1739,6 @@
  *  - we suggested an operation to our listener,
  *    but did not receive a response in time
  *  - we got the channel from a peer but no 
#GNUNET_MESSAGE_TYPE_SET_P2P_OPERATION_REQUEST
- *  - shutdown (obviously)
  *
  * @param cls channel context
  * @param tc context information (why was this task triggered now)
@@ -1749,13 +1747,9 @@
 incoming_timeout_cb (void *cls)
 {
   struct Operation *incoming = cls;
-  const struct GNUNET_SCHEDULER_TaskContext *tc;
 
   incoming->timeout_task = NULL;
   GNUNET_assert (GNUNET_YES == incoming->is_incoming);
-  tc = GNUNET_SCHEDULER_get_task_context ();
-  if (0 != (tc->reason & GNUNET_SCHEDULER_REASON_SHUTDOWN))
-    return;
   GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
               "Remote peer's incoming request timed out\n");
   incoming_destroy (incoming);
@@ -1997,8 +1991,7 @@
   static const uint32_t cadet_ports[] = {GNUNET_APPLICATION_TYPE_SET, 0};
 
   configuration = cfg;
-  GNUNET_SCHEDULER_add_delayed (GNUNET_TIME_UNIT_FOREVER_REL,
-                                &shutdown_task, NULL);
+  GNUNET_SCHEDULER_add_shutdown (&shutdown_task, NULL);
   GNUNET_SERVER_disconnect_notify (server,
                                    &handle_client_disconnect, NULL);
   GNUNET_SERVER_add_handlers (server,

Modified: gnunet/src/set/gnunet-set-profiler.c
===================================================================
--- gnunet/src/set/gnunet-set-profiler.c        2016-04-30 08:16:14 UTC (rev 
37101)
+++ gnunet/src/set/gnunet-set-profiler.c        2016-04-30 08:17:37 UTC (rev 
37102)
@@ -299,7 +299,7 @@
 
   statistics = GNUNET_STATISTICS_create ("set-profiler", cfg);
 
-  GNUNET_SCHEDULER_add_delayed (GNUNET_TIME_UNIT_FOREVER_REL, handle_shutdown, 
NULL);
+  GNUNET_SCHEDULER_add_shutdown (&handle_shutdown, NULL);
 
   info1.id = "a";
   info2.id = "b";

Modified: gnunet/src/set/set_api.c
===================================================================
--- gnunet/src/set/set_api.c    2016-04-30 08:16:14 UTC (rev 37101)
+++ gnunet/src/set/set_api.c    2016-04-30 08:17:37 UTC (rev 37102)
@@ -230,7 +230,7 @@
   /**
    * Task for reconnecting when the listener fails.
    */
-  struct GNUNET_SCHEDULER_Task * reconnect_task;
+  struct GNUNET_SCHEDULER_Task *reconnect_task;
 
   /**
    * Operation we listen for.
@@ -891,15 +891,7 @@
   struct GNUNET_SET_ListenHandle *lh = cls;
   struct GNUNET_MQ_Envelope *mqm;
   struct GNUNET_SET_ListenMessage *msg;
-  const struct GNUNET_SCHEDULER_TaskContext *tc;
 
-  tc = GNUNET_SCHEDULER_get_task_context ();
-  if (0 != (tc->reason & GNUNET_SCHEDULER_REASON_SHUTDOWN))
-  {
-    LOG (GNUNET_ERROR_TYPE_DEBUG,
-         "Listener not reconnecting due to shutdown\n");
-    return;
-  }
   lh->reconnect_task = NULL;
   GNUNET_assert (NULL == lh->client);
   lh->client = GNUNET_CLIENT_connect ("set", lh->cfg);

Modified: gnunet/src/set/test_set_api.c
===================================================================
--- gnunet/src/set/test_set_api.c       2016-04-30 08:16:14 UTC (rev 37101)
+++ gnunet/src/set/test_set_api.c       2016-04-30 08:17:37 UTC (rev 37102)
@@ -44,7 +44,9 @@
 
 static int ret;
 
+static struct GNUNET_SCHEDULER_Task *tt;
 
+
 static void
 result_cb_set1 (void *cls,
                 const struct GNUNET_SET_Element *element,
@@ -61,6 +63,8 @@
     fprintf (stderr,
              "set 1: received failure status!\n");
     ret = 1;
+    GNUNET_SCHEDULER_cancel (tt);
+    tt = NULL;
     GNUNET_SCHEDULER_shutdown ();
     break;
   case GNUNET_SET_STATUS_DONE:
@@ -69,7 +73,11 @@
     GNUNET_SET_destroy (set1);
     set1 = NULL;
     if (NULL == set2)
+    {
+      GNUNET_SCHEDULER_cancel (tt);
+      tt = NULL;
       GNUNET_SCHEDULER_shutdown ();
+    }
     break;
   default:
     GNUNET_assert (0);
@@ -100,7 +108,11 @@
     GNUNET_SET_destroy (set2);
     set2 = NULL;
     if (NULL == set1)
+    {
+      GNUNET_SCHEDULER_cancel (tt);
+      tt = NULL;
       GNUNET_SCHEDULER_shutdown ();
+    }
     break;
   default:
     GNUNET_assert (0);
@@ -250,11 +262,7 @@
 static void
 timeout_fail (void *cls)
 {
-  const struct GNUNET_SCHEDULER_TaskContext *tc;
-
-  tc = GNUNET_SCHEDULER_get_task_context ();
-  if (0 != (tc->reason & GNUNET_SCHEDULER_REASON_SHUTDOWN))
-    return;
+  tt = NULL;
   GNUNET_SCHEDULER_shutdown ();
   ret = 1;
 }
@@ -276,8 +284,8 @@
 
   struct GNUNET_SET_OperationHandle *my_oh;
 
-  GNUNET_SCHEDULER_add_delayed (GNUNET_TIME_relative_multiply 
(GNUNET_TIME_UNIT_SECONDS, 5),
-                                &timeout_fail, NULL);
+  tt = GNUNET_SCHEDULER_add_delayed (GNUNET_TIME_relative_multiply 
(GNUNET_TIME_UNIT_SECONDS, 5),
+                                    &timeout_fail, NULL);
 
   config = cfg;
   GNUNET_CRYPTO_get_peer_identity (cfg, &local_id);

Modified: gnunet/src/set/test_set_union_copy.c
===================================================================
--- gnunet/src/set/test_set_union_copy.c        2016-04-30 08:16:14 UTC (rev 
37101)
+++ gnunet/src/set/test_set_union_copy.c        2016-04-30 08:17:37 UTC (rev 
37102)
@@ -42,7 +42,9 @@
 
 static const struct GNUNET_CONFIGURATION_Handle *config;
 
+static struct GNUNET_SCHEDULER_Task *tt;
 
+
 static void
 add_element_str (struct GNUNET_SET_Handle *set, char *str)
 {
@@ -77,11 +79,7 @@
 static void
 timeout_fail (void *cls)
 {
-  const struct GNUNET_SCHEDULER_TaskContext *tc;
-
-  tc = GNUNET_SCHEDULER_get_task_context ();
-  if (0 != (tc->reason & GNUNET_SCHEDULER_REASON_SHUTDOWN))
-    return;
+  tt = NULL;
   GNUNET_SCHEDULER_shutdown ();
   ret = 1;
 }
@@ -125,8 +123,7 @@
 }
 
 
-
-void
+static void
 check_count (struct GNUNET_SET_Handle *set,
              char *what,
              unsigned int expected_count,
@@ -145,24 +142,28 @@
 }
 
 
-void test_done (void *cls)
+static void
+test_done (void *cls)
 {
   if (NULL != set1)
     GNUNET_SET_destroy (set1);
   if (NULL != set2)
     GNUNET_SET_destroy (set2);
-
+  GNUNET_SCHEDULER_cancel (tt);
+  tt = NULL;
   GNUNET_SCHEDULER_shutdown ();
 }
 
 
-void check_new_set_count (void *cls)
+static void
+check_new_set_count (void *cls)
 {
   check_count (set2, "new set", 4, &test_done, NULL);
 }
 
 
-void copy_done (void *cls, struct GNUNET_SET_Handle *new_set)
+static void
+copy_done (void *cls, struct GNUNET_SET_Handle *new_set)
 {
   printf ("copy done\n");
   set2 = new_set;
@@ -177,7 +178,8 @@
 }
 
 
-void test_copy (void *cls)
+static void
+test_copy (void *cls)
 {
   printf ("about to copy\n");
   GNUNET_SET_copy_lazy (set1, copy_done, NULL);
@@ -198,9 +200,9 @@
      const struct GNUNET_CONFIGURATION_Handle *cfg,
      struct GNUNET_TESTING_Peer *peer)
 {
-  GNUNET_SCHEDULER_add_delayed (GNUNET_TIME_relative_multiply 
(GNUNET_TIME_UNIT_SECONDS, 5),
-                                &timeout_fail,
-                                NULL);
+  tt = GNUNET_SCHEDULER_add_delayed (GNUNET_TIME_relative_multiply 
(GNUNET_TIME_UNIT_SECONDS, 5),
+                                    &timeout_fail,
+                                    NULL);
 
   config = cfg;
   GNUNET_TESTING_peer_get_identity (peer,

Modified: gnunet/src/set/test_set_union_result_symmetric.c
===================================================================
--- gnunet/src/set/test_set_union_result_symmetric.c    2016-04-30 08:16:14 UTC 
(rev 37101)
+++ gnunet/src/set/test_set_union_result_symmetric.c    2016-04-30 08:17:37 UTC 
(rev 37102)
@@ -297,11 +297,6 @@
 static void
 timeout_fail (void *cls)
 {
-  const struct GNUNET_SCHEDULER_TaskContext *tc;
-
-  tc = GNUNET_SCHEDULER_get_task_context ();
-  if (0 != (tc->reason & GNUNET_SCHEDULER_REASON_SHUTDOWN))
-    return;
   GNUNET_SCHEDULER_shutdown ();
   ret = 1;
 }

Modified: gnunet/src/social/gnunet-service-social.c
===================================================================
--- gnunet/src/social/gnunet-service-social.c   2016-04-30 08:16:14 UTC (rev 
37101)
+++ gnunet/src/social/gnunet-service-social.c   2016-04-30 08:17:37 UTC (rev 
37102)
@@ -408,8 +408,13 @@
 psyc_transmit_message (struct Place *plc);
 
 
+/**
+ * Clean up place data structures after a client disconnected.
+ *
+ * @param cls the `struct Place` to clean up
+ */
 static void
-cleanup_place (struct Place *plc);
+cleanup_place (void *cls);
 
 
 static struct MessageTransmitQueue *
@@ -426,7 +431,9 @@
                      const struct GNUNET_HashCode *key,
                      void *value)
 {
-  cleanup_place (value);
+  struct Place *plc = value;
+  
+  cleanup_place (plc);
   return GNUNET_YES;
 }
 
@@ -524,10 +531,14 @@
 
 /**
  * Clean up place data structures after a client disconnected.
+ *
+ * @param cls the `struct Place` to clean up
  */
 static void
-cleanup_place (struct Place *plc)
+cleanup_place (void *cls)
 {
+  struct Place *plc = cls;
+  
   GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
               "%p Cleaning up place %s\n",
               plc, GNUNET_h2s (&plc->pub_key_hash));
@@ -541,13 +552,6 @@
 }
 
 
-static void
-schedule_cleanup_place (void *cls)
-{
-  cleanup_place (cls);
-}
-
-
 /**
  * Called whenever a client is disconnected.
  * Frees our resources associated with that client.
@@ -2329,7 +2333,7 @@
     tmit_msg = psyc_transmit_queue_next_msg (plc, tmit_msg);
     plc->is_disconnected = GNUNET_YES;
     GNUNET_SERVER_client_disconnect (tmit_frag->client);
-    GNUNET_SCHEDULER_add_now (&schedule_cleanup_place, plc);
+    GNUNET_SCHEDULER_add_now (&cleanup_place, plc);
     return ret;
   }
   else
@@ -2489,7 +2493,7 @@
     tmit_msg = psyc_transmit_queue_next_msg (plc, tmit_msg);
     plc->is_disconnected = GNUNET_YES;
     GNUNET_SERVER_client_disconnect (tmit_frag->client);
-    GNUNET_SCHEDULER_add_now (&schedule_cleanup_place, plc);
+    GNUNET_SCHEDULER_add_now (&cleanup_place, plc);
   }
   else
   {
@@ -3480,8 +3484,7 @@
   nc = GNUNET_SERVER_notification_context_create (server, 1);
   GNUNET_SERVER_add_handlers (server, handlers);
   GNUNET_SERVER_disconnect_notify (server, &client_disconnect, NULL);
-  GNUNET_SCHEDULER_add_delayed (GNUNET_TIME_UNIT_FOREVER_REL,
-                                &shutdown_task, NULL);
+  GNUNET_SCHEDULER_add_shutdown (&shutdown_task, NULL);
 }
 
 

Modified: gnunet/src/social/test_social.c
===================================================================
--- gnunet/src/social/test_social.c     2016-04-30 08:16:14 UTC (rev 37101)
+++ gnunet/src/social/test_social.c     2016-04-30 08:17:37 UTC (rev 37102)
@@ -267,8 +267,7 @@
     GNUNET_SCHEDULER_cancel (end_badly_task);
     end_badly_task = NULL;
   }
-  GNUNET_SCHEDULER_add_delayed (GNUNET_TIME_UNIT_MILLISECONDS,
-                               &end_normally, NULL);
+  GNUNET_SCHEDULER_add_now (&end_normally, NULL);
 }
 
 
@@ -275,8 +274,10 @@
 static void
 transmit_resume (void *cls)
 {
-  GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Transmission resumed.\n");
   struct TransmitClosure *tmit = cls;
+
+  GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
+             "Transmission resumed.\n");
   if (NULL != tmit->host_ann)
     GNUNET_SOCIAL_host_announce_resume (tmit->host_ann);
   else
@@ -357,14 +358,14 @@
 {
   GNUNET_log (GNUNET_ERROR_TYPE_WARNING,
               "Nym left the place again.\n");
-  GNUNET_SCHEDULER_add_now (schedule_host_leave, NULL);
+  GNUNET_SCHEDULER_add_now (&schedule_host_leave, NULL);
 }
 
 
 static void
 host_reconnected (void *cls, int result,
-              const struct GNUNET_CRYPTO_EddsaPublicKey *home_pub_key,
-              uint64_t max_message_id)
+                 const struct GNUNET_CRYPTO_EddsaPublicKey *home_pub_key,
+                 uint64_t max_message_id)
 {
   place_pub_key = *home_pub_key;
   GNUNET_CRYPTO_hash (&place_pub_key, sizeof (place_pub_key), &place_pub_hash);
@@ -375,7 +376,7 @@
   is_host_reconnected = GNUNET_YES;
   if (GNUNET_YES == is_guest_reconnected)
   {
-    GNUNET_SCHEDULER_add_now (schedule_guest_leave, NULL);
+    GNUNET_SCHEDULER_add_now (&schedule_guest_leave, NULL);
   }
 }
 
@@ -393,7 +394,7 @@
   is_guest_reconnected = GNUNET_YES;
   if (GNUNET_YES == is_host_reconnected)
   {
-    GNUNET_SCHEDULER_add_now (schedule_guest_leave, NULL);
+    GNUNET_SCHEDULER_add_now (&schedule_guest_leave, NULL);
   }
 }
 
@@ -583,8 +584,10 @@
 
 
 static void
-guest_look_for_result (void *cls, int64_t result_code,
-                      const void *data, uint16_t data_size)
+guest_look_for_result (void *cls,
+                      int64_t result_code,
+                      const void *data,
+                      uint16_t data_size)
 {
   struct ResultClosure *rcls = cls;
   GNUNET_log (GNUNET_ERROR_TYPE_WARNING,
@@ -1047,7 +1050,7 @@
     break;
 
   case TEST_GUEST_ENTER_BY_NAME:
-    GNUNET_SCHEDULER_add_now (schedule_reconnect, NULL);
+    GNUNET_SCHEDULER_add_now (&schedule_reconnect, NULL);
     break;
 
   default:
@@ -1313,7 +1316,8 @@
 #endif
 {
   cfg = c;
-  end_badly_task = GNUNET_SCHEDULER_add_delayed (TIMEOUT, &end_badly, NULL);
+  end_badly_task = GNUNET_SCHEDULER_add_delayed (TIMEOUT,
+                                                &end_badly, NULL);
 
   core = GNUNET_CORE_connect (cfg, NULL, &core_connected, NULL, NULL,
                               NULL, GNUNET_NO, NULL, GNUNET_NO, NULL);

Modified: gnunet/src/statistics/gnunet-service-statistics.c
===================================================================
--- gnunet/src/statistics/gnunet-service-statistics.c   2016-04-30 08:16:14 UTC 
(rev 37101)
+++ gnunet/src/statistics/gnunet-service-statistics.c   2016-04-30 08:17:37 UTC 
(rev 37102)
@@ -1053,9 +1053,8 @@
                                    &handle_client_disconnect,
                                    NULL);
   load (server);
-  GNUNET_SCHEDULER_add_delayed (GNUNET_TIME_UNIT_FOREVER_REL,
-                                &shutdown_task,
-                                NULL);
+  GNUNET_SCHEDULER_add_shutdown (&shutdown_task,
+                                NULL);
 }
 
 

Modified: gnunet/src/statistics/gnunet-statistics.c
===================================================================
--- gnunet/src/statistics/gnunet-statistics.c   2016-04-30 08:16:14 UTC (rev 
37101)
+++ gnunet/src/statistics/gnunet-statistics.c   2016-04-30 08:17:37 UTC (rev 
37102)
@@ -180,7 +180,6 @@
  * Main task that does the actual work.
  *
  * @param cls closure with our configuration
- * @param tc schedueler context
  */
 static void
 main_task (void *cls)
@@ -221,7 +220,8 @@
   if (GNUNET_NO == watch)
   {
     if (NULL ==
-      GNUNET_STATISTICS_get (h, subsystem, name, GET_TIMEOUT, &cleanup,
+      GNUNET_STATISTICS_get (h, subsystem, name, GET_TIMEOUT,
+                            &cleanup,
                              &printer, h))
     cleanup (h, GNUNET_SYSERR);
   }
@@ -235,7 +235,8 @@
       ret = 1;
       return;
     }
-    if (GNUNET_OK != GNUNET_STATISTICS_watch (h, subsystem, name, &printer, h))
+    if (GNUNET_OK != GNUNET_STATISTICS_watch (h, subsystem, name,
+                                             &printer, h))
     {
       fprintf (stderr, _("Failed to initialize watch routine\n"));
       GNUNET_SCHEDULER_add_now (&shutdown_task, h);
@@ -242,8 +243,7 @@
       return;
     }
   }
-  GNUNET_SCHEDULER_add_delayed (GNUNET_TIME_UNIT_FOREVER_REL,
-                                &shutdown_task, h);
+  GNUNET_SCHEDULER_add_shutdown (&shutdown_task, h);
 }
 
 

Modified: gnunet/src/statistics/statistics_api.c
===================================================================
--- gnunet/src/statistics/statistics_api.c      2016-04-30 08:16:14 UTC (rev 
37101)
+++ gnunet/src/statistics/statistics_api.c      2016-04-30 08:17:37 UTC (rev 
37102)
@@ -1217,7 +1217,8 @@
   ai->timeout_task = GNUNET_SCHEDULER_add_delayed (timeout,
                                                    &run_get_timeout,
                                                    ai);
-  GNUNET_CONTAINER_DLL_insert_tail (handle->action_head, handle->action_tail,
+  GNUNET_CONTAINER_DLL_insert_tail (handle->action_head,
+                                   handle->action_tail,
                                    ai);
   schedule_action (handle);
   return ai;

Modified: gnunet/src/statistics/test_statistics_api_watch.c
===================================================================
--- gnunet/src/statistics/test_statistics_api_watch.c   2016-04-30 08:16:14 UTC 
(rev 37101)
+++ gnunet/src/statistics/test_statistics_api_watch.c   2016-04-30 08:17:37 UTC 
(rev 37102)
@@ -55,7 +55,10 @@
 
 
 static int
-watch_1 (void *cls, const char *subsystem, const char *name, uint64_t value,
+watch_1 (void *cls,
+        const char *subsystem,
+        const char *name,
+        uint64_t value,
          int is_persistent)
 {
   GNUNET_assert (value == 42);
@@ -71,7 +74,10 @@
 
 
 static int
-watch_2 (void *cls, const char *subsystem, const char *name, uint64_t value,
+watch_2 (void *cls,
+        const char *subsystem,
+        const char *name,
+        uint64_t value,
          int is_persistent)
 {
   GNUNET_assert (value == 43);
@@ -87,7 +93,9 @@
 
 
 static void
-run (void *cls, char *const *args, const char *cfgfile,
+run (void *cls,
+     char *const *args,
+     const char *cfgfile,
      const struct GNUNET_CONFIGURATION_Handle *cfg)
 {
   h = GNUNET_STATISTICS_create ("dummy", cfg);
@@ -101,7 +109,8 @@
   GNUNET_STATISTICS_set (h2, "test-1", 42, GNUNET_NO);
   GNUNET_STATISTICS_set (h2, "test-2", 43, GNUNET_NO);
   shutdown_task =
-      GNUNET_SCHEDULER_add_delayed (GNUNET_TIME_UNIT_MINUTES, &force_shutdown,
+      GNUNET_SCHEDULER_add_delayed (GNUNET_TIME_UNIT_MINUTES,
+                                   &force_shutdown,
                                     NULL);
 }
 

Modified: gnunet/src/template/gnunet-service-template.c
===================================================================
--- gnunet/src/template/gnunet-service-template.c       2016-04-30 08:16:14 UTC 
(rev 37101)
+++ gnunet/src/template/gnunet-service-template.c       2016-04-30 08:17:37 UTC 
(rev 37102)
@@ -47,7 +47,8 @@
  * @param cfg configuration to use
  */
 static void
-run (void *cls, struct GNUNET_SERVER_Handle *server,
+run (void *cls,
+     struct GNUNET_SERVER_Handle *server,
      const struct GNUNET_CONFIGURATION_Handle *cfg)
 {
   static const struct GNUNET_SERVER_MessageHandler handlers[] = {
@@ -56,8 +57,8 @@
   };
   /* FIXME: do setup here */
   GNUNET_SERVER_add_handlers (server, handlers);
-  GNUNET_SCHEDULER_add_delayed (GNUNET_TIME_UNIT_FOREVER_REL, &cleanup_task,
-                                NULL);
+  GNUNET_SCHEDULER_add_shutdown (&cleanup_task,
+                                NULL);
 }
 
 

Modified: gnunet/src/testbed/gnunet-daemon-latency-logger.c
===================================================================
--- gnunet/src/testbed/gnunet-daemon-latency-logger.c   2016-04-30 08:16:14 UTC 
(rev 37101)
+++ gnunet/src/testbed/gnunet-daemon-latency-logger.c   2016-04-30 08:17:37 UTC 
(rev 37102)
@@ -89,19 +89,14 @@
 /**
  * Handle to the ATS performance subsystem
  */
-struct GNUNET_ATS_PerformanceHandle *ats;
+static struct GNUNET_ATS_PerformanceHandle *ats;
 
 /**
  * Prepared statement for inserting values into the database table
  */
-struct sqlite3_stmt *stmt_insert;
+static struct sqlite3_stmt *stmt_insert;
 
-/**
- * Shutdown task identifier
- */
-struct GNUNET_SCHEDULER_Task * shutdown_task;
 
-
 /**
  * @ingroup hashmap
  * Iterator over hash map entries.
@@ -136,7 +131,6 @@
 static void
 do_shutdown (void *cls)
 {
-  shutdown_task = NULL;
   GNUNET_ATS_performance_done (ats);
   ats = NULL;
   if (NULL != stmt_insert)
@@ -298,8 +292,7 @@
   dbfile = NULL;
   ats = GNUNET_ATS_performance_init (c, &addr_info_cb, NULL);
   map = GNUNET_CONTAINER_multipeermap_create (30, GNUNET_YES);
-  shutdown_task = GNUNET_SCHEDULER_add_delayed (GNUNET_TIME_UNIT_FOREVER_REL,
-                                                &do_shutdown, NULL);
+  GNUNET_SCHEDULER_add_shutdown (&do_shutdown, NULL);
 }
 
 

Modified: gnunet/src/testbed/gnunet-daemon-testbed-blacklist.c
===================================================================
--- gnunet/src/testbed/gnunet-daemon-testbed-blacklist.c        2016-04-30 
08:16:14 UTC (rev 37101)
+++ gnunet/src/testbed/gnunet-daemon-testbed-blacklist.c        2016-04-30 
08:17:37 UTC (rev 37102)
@@ -67,14 +67,9 @@
  * The blacklist handle we obtain from transport when we register ourselves for
  * access control
  */
-struct GNUNET_TRANSPORT_Blacklist *bh;
+static struct GNUNET_TRANSPORT_Blacklist *bh;
 
 /**
- * Task for shutdown
- */
-static struct GNUNET_SCHEDULER_Task * shutdown_task;
-
-/**
  * Are we allowing or denying access from peers
  */
 static int mode;
@@ -81,26 +76,6 @@
 
 
 /**
- * @ingroup hashmap
- * Iterator over hash map entries.
- *
- * @param cls closure
- * @param key current key code
- * @param value value in the hash map
- * @return #GNUNET_YES if we should continue to
- *         iterate,
- *         #GNUNET_NO if not.
- */
-static int
-iterator (void *cls, const struct GNUNET_PeerIdentity *key, void *value)
-{
-  GNUNET_assert (GNUNET_YES == GNUNET_CONTAINER_multipeermap_remove (map, key,
-                                                                     value));
-  return GNUNET_YES;
-}
-
-
-/**
  * Cleaup and destroy the map
  */
 static void
@@ -108,9 +83,6 @@
 {
   if (NULL != map)
   {
-    GNUNET_assert (GNUNET_SYSERR != GNUNET_CONTAINER_multipeermap_iterate (map,
-                                                                           
&iterator,
-                                                                           
NULL));
     GNUNET_CONTAINER_multipeermap_destroy (map);
     map = NULL;
   }
@@ -161,14 +133,16 @@
  * @param cfg the configuration for connecting to the peer's transport service
  */
 static void
-setup_ac (const char *fname, const struct GNUNET_CONFIGURATION_Handle *cfg)
+setup_ac (const char *fname,
+         const struct GNUNET_CONFIGURATION_Handle *cfg)
 {
   uint64_t fsize;
   unsigned int npeers;
   unsigned int cnt;
 
-  GNUNET_assert (GNUNET_OK != GNUNET_DISK_file_size (fname, &fsize, GNUNET_NO,
-                                                     GNUNET_YES));
+  GNUNET_assert (GNUNET_OK !=
+                GNUNET_DISK_file_size (fname, &fsize, GNUNET_NO,
+                                       GNUNET_YES));
   if (0 != (fsize % sizeof (struct GNUNET_PeerIdentity)))
   {
     GNUNET_break (0);
@@ -183,9 +157,10 @@
   }
   for (cnt = 0; cnt < npeers; cnt++)
   {
-    if (GNUNET_SYSERR == GNUNET_CONTAINER_multipeermap_put (map, &ilist[cnt],
-                                                            &ilist[cnt],
-                                                            
GNUNET_CONTAINER_MULTIHASHMAPOPTION_UNIQUE_ONLY))
+    if (GNUNET_SYSERR ==
+       GNUNET_CONTAINER_multipeermap_put (map, &ilist[cnt],
+                                          &ilist[cnt],
+                                          
GNUNET_CONTAINER_MULTIHASHMAPOPTION_UNIQUE_ONLY))
     {
       cleanup_map ();
       GNUNET_free (ilist);
@@ -192,8 +167,7 @@
       return;
     }
   }
-  shutdown_task = GNUNET_SCHEDULER_add_delayed (GNUNET_TIME_UNIT_FOREVER_REL,
-                                                &do_shutdown, NULL);
+  GNUNET_SCHEDULER_add_shutdown (&do_shutdown, NULL);
   bh = GNUNET_TRANSPORT_blacklist (cfg, &check_access, NULL);
 }
 
@@ -207,15 +181,18 @@
  * @param c configuration
  */
 static void
-run (void *cls, char *const *args, const char *cfgfile,
+run (void *cls,
+     char *const *args,
+     const char *cfgfile,
      const struct GNUNET_CONFIGURATION_Handle *c)
 {
   char *shome;
   char *fname;
 
-  if (GNUNET_OK != GNUNET_CONFIGURATION_get_value_filename (c, "PATHS",
-                                                            "GNUNET_HOME",
-                                                            &shome))
+  if (GNUNET_OK !=
+      GNUNET_CONFIGURATION_get_value_filename (c, "PATHS",
+                                              "GNUNET_HOME",
+                                              &shome))
   {
     GNUNET_break (0);
     return;
@@ -260,13 +237,15 @@
   };
   int ret;
 
-  if (GNUNET_OK != GNUNET_STRINGS_get_utf8_args (argc, argv, &argc, &argv))
+  if (GNUNET_OK !=
+      GNUNET_STRINGS_get_utf8_args (argc, argv,
+                                   &argc, &argv))
     return 2;
   ret =
       (GNUNET_OK ==
-       GNUNET_PROGRAM_run (argc, argv, "gnunet-daemon-testbed-blacklist",
-                           _
-                           ("Daemon to restrict incoming transport layer 
connections during testbed deployments"),
+       GNUNET_PROGRAM_run (argc, argv,
+                          "gnunet-daemon-testbed-blacklist",
+                           _("Daemon to restrict incoming transport layer 
connections during testbed deployments"),
                            options, &run, NULL)) ? 0 : 1;
   GNUNET_free ((void*) argv);
   return ret;

Modified: gnunet/src/testbed/gnunet-daemon-testbed-underlay.c
===================================================================
--- gnunet/src/testbed/gnunet-daemon-testbed-underlay.c 2016-04-30 08:16:14 UTC 
(rev 37101)
+++ gnunet/src/testbed/gnunet-daemon-testbed-underlay.c 2016-04-30 08:17:37 UTC 
(rev 37102)
@@ -101,12 +101,7 @@
  */
 static unsigned int num_hostkeys;
 
-/**
- * Task for shutdown
- */
-static struct GNUNET_SCHEDULER_Task * shutdown_task;
 
-
 /**
  * @ingroup hashmap
  * Iterator over hash map entries.
@@ -439,12 +434,10 @@
     GNUNET_free (wl_entry);
   }
   bh = GNUNET_TRANSPORT_blacklist (c, &check_access, NULL);
-  shutdown_task = GNUNET_SCHEDULER_add_delayed (GNUNET_TIME_UNIT_FOREVER_REL,
-                                                &do_shutdown, NULL);
+  GNUNET_SCHEDULER_add_shutdown (&do_shutdown, NULL);
 
  close_db:
   GNUNET_break (SQLITE_OK == sqlite3_close (db));
-  return;
 }
 
 

Modified: gnunet/src/testbed/gnunet-helper-testbed.c
===================================================================
--- gnunet/src/testbed/gnunet-helper-testbed.c  2016-04-30 08:16:14 UTC (rev 
37101)
+++ gnunet/src/testbed/gnunet-helper-testbed.c  2016-04-30 08:17:37 UTC (rev 
37102)
@@ -124,12 +124,12 @@
 /**
  * Task identifier for the read task
  */
-static struct GNUNET_SCHEDULER_Task * read_task_id;
+static struct GNUNET_SCHEDULER_Task *read_task_id;
 
 /**
  * Task identifier for the write task
  */
-static struct GNUNET_SCHEDULER_Task * write_task_id;
+static struct GNUNET_SCHEDULER_Task *write_task_id;
 
 /**
  * Task to kill the child
@@ -137,11 +137,6 @@
 static struct GNUNET_SCHEDULER_Task * child_death_task_id;
 
 /**
- * shutdown task id
- */
-static struct GNUNET_SCHEDULER_Task * shutdown_task_id;
-
-/**
  * Are we done reading messages from stdin?
  */
 static int done_reading;
@@ -161,7 +156,6 @@
 shutdown_task (void *cls)
 {
   LOG_DEBUG ("Shutting down\n");
-  shutdown_task_id = NULL;
   if (NULL != testbed)
   {
     LOG_DEBUG ("Killing testbed\n");
@@ -174,8 +168,12 @@
   }
   if (NULL != write_task_id)
   {
-    GNUNET_SCHEDULER_cancel (write_task_id);
+    struct WriteContext *wc;
+
+    wc = GNUNET_SCHEDULER_cancel (write_task_id);
     write_task_id = NULL;
+    GNUNET_free (wc->data);
+    GNUNET_free (wc);
   }
   if (NULL != child_death_task_id)
   {
@@ -203,18 +201,6 @@
 
 
 /**
- * Scheduler shutdown task to be run now.
- */
-static void
-shutdown_now (void)
-{
-  if (NULL != shutdown_task_id)
-    GNUNET_SCHEDULER_cancel (shutdown_task_id);
-  shutdown_task_id = GNUNET_SCHEDULER_add_now (&shutdown_task, NULL);
-}
-
-
-/**
  * Task to write to the standard out
  *
  * @param cls the WriteContext
@@ -224,23 +210,16 @@
 {
   struct WriteContext *wc = cls;
   ssize_t bytes_wrote;
-  const struct GNUNET_SCHEDULER_TaskContext *tc;
 
   GNUNET_assert (NULL != wc);
   write_task_id = NULL;
-  tc = GNUNET_SCHEDULER_get_task_context ();
-  if (0 != (GNUNET_SCHEDULER_REASON_SHUTDOWN & tc->reason))
-  {
-    GNUNET_free (wc->data);
-    GNUNET_free (wc);
-    return;
-  }
   bytes_wrote =
       GNUNET_DISK_file_write (stdout_fd, wc->data + wc->pos,
                               wc->length - wc->pos);
   if (GNUNET_SYSERR == bytes_wrote)
   {
-    LOG (GNUNET_ERROR_TYPE_WARNING, "Cannot reply back configuration\n");
+    LOG (GNUNET_ERROR_TYPE_WARNING,
+         "Cannot reply back configuration\n");
     GNUNET_free (wc->data);
     GNUNET_free (wc);
     return;
@@ -253,7 +232,8 @@
     return;
   }
   write_task_id =
-      GNUNET_SCHEDULER_add_write_file (GNUNET_TIME_UNIT_FOREVER_REL, stdout_fd,
+      GNUNET_SCHEDULER_add_write_file (GNUNET_TIME_UNIT_FOREVER_REL,
+                                      stdout_fd,
                                        &write_task, wc);
 }
 
@@ -272,18 +252,9 @@
   enum GNUNET_OS_ProcessStatusType type;
   unsigned long code;
   int ret;
-  const struct GNUNET_SCHEDULER_TaskContext *tc;
 
   pr = GNUNET_DISK_pipe_handle (sigpipe, GNUNET_DISK_PIPE_END_READ);
   child_death_task_id = NULL;
-  tc = GNUNET_SCHEDULER_get_task_context ();
-  if (0 == (tc->reason & GNUNET_SCHEDULER_REASON_READ_READY))
-  {
-    child_death_task_id =
-       GNUNET_SCHEDULER_add_read_file (GNUNET_TIME_UNIT_FOREVER_REL,
-                                       pr, &child_death_task, NULL);
-    return;
-  }
   /* consume the signal */
   GNUNET_break (0 < GNUNET_DISK_file_read (pr, &c, sizeof (c)));
   LOG_DEBUG ("Got SIGCHLD\n");
@@ -302,7 +273,7 @@
     if (0 != PLIBC_KILL (0, GNUNET_TERM_SIG))
     {
       GNUNET_log_strerror (GNUNET_ERROR_TYPE_ERROR, "signal");
-      shutdown_now ();          /* Couldn't send the signal, we shutdown 
frowning */
+      GNUNET_SCHEDULER_shutdown ();   /* Couldn't send the signal, we shutdown 
frowning */
     }
     return;
   }
@@ -499,7 +470,8 @@
   reply->config_size = htons ((uint16_t) config_size);
   wc->data = reply;
   write_task_id =
-      GNUNET_SCHEDULER_add_write_file (GNUNET_TIME_UNIT_FOREVER_REL, stdout_fd,
+      GNUNET_SCHEDULER_add_write_file (GNUNET_TIME_UNIT_FOREVER_REL,
+                                      stdout_fd,
                                        &write_task, wc);
   child_death_task_id =
       GNUNET_SCHEDULER_add_read_file (GNUNET_TIME_UNIT_FOREVER_REL,
@@ -510,7 +482,7 @@
 
 error:
   status = GNUNET_SYSERR;
-  shutdown_now ();
+  GNUNET_SCHEDULER_shutdown ();
   return GNUNET_SYSERR;
 }
 
@@ -525,17 +497,13 @@
 {
   char buf[GNUNET_SERVER_MAX_MESSAGE_SIZE];
   ssize_t sread;
-  const struct GNUNET_SCHEDULER_TaskContext *tc;
 
   read_task_id = NULL;
-  tc = GNUNET_SCHEDULER_get_task_context ();
-  if (0 != (GNUNET_SCHEDULER_REASON_SHUTDOWN & tc->reason))
-    return;
   sread = GNUNET_DISK_file_read (stdin_fd, buf, sizeof (buf));
   if ((GNUNET_SYSERR == sread) || (0 == sread))
   {
     LOG_DEBUG ("STDIN closed\n");
-    shutdown_now ();
+    GNUNET_SCHEDULER_shutdown ();
     return;
   }
   if (GNUNET_YES == done_reading)
@@ -542,7 +510,7 @@
   {
     /* didn't expect any more data! */
     GNUNET_break_op (0);
-    shutdown_now ();
+    GNUNET_SCHEDULER_shutdown ();
     return;
   }
   LOG_DEBUG ("Read %u bytes\n", sread);
@@ -551,11 +519,12 @@
                                  GNUNET_NO))
   {
     GNUNET_break (0);
-    shutdown_now ();
+    GNUNET_SCHEDULER_shutdown ();
     return;
   }
   read_task_id =                /* No timeout while reading */
-      GNUNET_SCHEDULER_add_read_file (GNUNET_TIME_UNIT_FOREVER_REL, stdin_fd,
+      GNUNET_SCHEDULER_add_read_file (GNUNET_TIME_UNIT_FOREVER_REL,
+                                     stdin_fd,
                                       &read_task, NULL);
 }
 
@@ -569,7 +538,9 @@
  * @param cfg configuration
  */
 static void
-run (void *cls, char *const *args, const char *cfgfile,
+run (void *cls,
+     char *const *args,
+     const char *cfgfile,
      const struct GNUNET_CONFIGURATION_Handle *cfg)
 {
   LOG_DEBUG ("Starting testbed helper...\n");
@@ -577,11 +548,11 @@
   stdin_fd = GNUNET_DISK_get_handle_from_native (stdin);
   stdout_fd = GNUNET_DISK_get_handle_from_native (stdout);
   read_task_id =
-      GNUNET_SCHEDULER_add_read_file (GNUNET_TIME_UNIT_FOREVER_REL, stdin_fd,
+      GNUNET_SCHEDULER_add_read_file (GNUNET_TIME_UNIT_FOREVER_REL,
+                                     stdin_fd,
                                       &read_task, NULL);
-  shutdown_task_id =
-      GNUNET_SCHEDULER_add_delayed (GNUNET_TIME_UNIT_FOREVER_REL, 
&shutdown_task,
-                                    NULL);
+  GNUNET_SCHEDULER_add_shutdown (&shutdown_task,
+                                NULL);
 }
 
 

Modified: gnunet/src/testbed/gnunet-service-test-barriers.c
===================================================================
--- gnunet/src/testbed/gnunet-service-test-barriers.c   2016-04-30 08:16:14 UTC 
(rev 37101)
+++ gnunet/src/testbed/gnunet-service-test-barriers.c   2016-04-30 08:17:37 UTC 
(rev 37102)
@@ -39,9 +39,11 @@
 /**
  * Our barrier wait handle
  */
-struct GNUNET_TESTBED_BarrierWaitHandle *wh;
+static struct GNUNET_TESTBED_BarrierWaitHandle *wh;
 
+static struct GNUNET_SCHEDULER_Task *tt;
 
+
 /**
  * Dummy task callback to keep us running forever
  *
@@ -51,8 +53,15 @@
 do_shutdown (void *cls)
 {
   if (NULL != wh)
+  {
     GNUNET_TESTBED_barrier_wait_cancel (wh);
-  wh = NULL;
+    wh = NULL;
+  }
+  if (NULL != tt)
+  {
+    GNUNET_SCHEDULER_cancel (tt);
+    tt = NULL;
+  }
 }
 
 
@@ -63,8 +72,8 @@
  *
  * @param cls NULL
  * @param name the barrier name
- * @param status GNUNET_SYSERR in case of error while waiting for the barrier;
- *   GNUNET_OK if the barrier is crossed
+ * @param status #GNUNET_SYSERR in case of error while waiting for the barrier;
+ *   #GNUNET_OK if the barrier is crossed
  */
 static void
 barrier_wait_cb (void *cls, const char *name, int status)
@@ -84,12 +93,10 @@
 static void
 do_wait (void *cls)
 {
-  const struct GNUNET_SCHEDULER_TaskContext *tc;
-
-  tc = GNUNET_SCHEDULER_get_task_context ();
-  if (0 != (GNUNET_SCHEDULER_REASON_SHUTDOWN & tc->reason))
-    return;
-  wh = GNUNET_TESTBED_barrier_wait (TEST_BARRIER_NAME, &barrier_wait_cb, NULL);
+  tt = NULL;
+  wh = GNUNET_TESTBED_barrier_wait (TEST_BARRIER_NAME,
+                                   &barrier_wait_cb,
+                                   NULL);
   GNUNET_break (NULL != wh);
 }
 
@@ -103,17 +110,18 @@
  * @param config the configuration file handle
  */
 static void
-run (void *cls, char *const *args, const char *cfgfile,
+run (void *cls,
+     char *const *args,
+     const char *cfgfile,
      const struct GNUNET_CONFIGURATION_Handle *config)
 {
   unsigned int rsec;
 
   rsec = GNUNET_CRYPTO_random_u32 (GNUNET_CRYPTO_QUALITY_NONCE, 10);
-  GNUNET_SCHEDULER_add_delayed (GNUNET_TIME_relative_multiply
-                                (GNUNET_TIME_UNIT_SECONDS, rsec),
-                                &do_wait, NULL);
-  GNUNET_SCHEDULER_add_delayed (GNUNET_TIME_UNIT_FOREVER_REL,
-                                &do_shutdown, NULL);
+  tt = GNUNET_SCHEDULER_add_delayed (GNUNET_TIME_relative_multiply
+                                    (GNUNET_TIME_UNIT_SECONDS, rsec),
+                                    &do_wait, NULL);
+  GNUNET_SCHEDULER_add_shutdown (&do_shutdown, NULL);
 }
 
 
@@ -121,7 +129,8 @@
 /**
  * Main
  */
-int main (int argc, char **argv)
+int
+main (int argc, char **argv)
 {
   struct GNUNET_GETOPT_CommandLineOption options[] = {
     GNUNET_GETOPT_OPTION_END

Modified: gnunet/src/testbed/gnunet-service-testbed-logger.c
===================================================================
--- gnunet/src/testbed/gnunet-service-testbed-logger.c  2016-04-30 08:16:14 UTC 
(rev 37101)
+++ gnunet/src/testbed/gnunet-service-testbed-logger.c  2016-04-30 08:17:37 UTC 
(rev 37102)
@@ -81,11 +81,6 @@
 struct GNUNET_BIO_WriteHandle *bio;
 
 /**
- * The shutdown task handle
- */
-static struct GNUNET_SCHEDULER_Task * shutdown_task_id;
-
-/**
  * The number of connections we have
  */
 static unsigned int nconn;
@@ -95,8 +90,9 @@
  */
 static int in_shutdown;
 
+
 /**
- * Message handler for GNUNET_MESSAGE_TYPE_TESTBED_ADDHOST messages
+ * Message handler for #GNUNET_MESSAGE_TYPE_TESTBED_ADDHOST messages
  *
  * @param cls NULL
  * @param client identification of the client
@@ -103,7 +99,8 @@
  * @param msg the actual message
  */
 static void
-handle_log_msg (void *cls, struct GNUNET_SERVER_Client *client,
+handle_log_msg (void *cls,
+               struct GNUNET_SERVER_Client *client,
                 const struct GNUNET_MessageHeader *msg)
 {
   uint16_t ms;
@@ -125,14 +122,11 @@
 {
   struct MessageQueue *mq_entry;
 
-  shutdown_task_id = NULL;
   in_shutdown = GNUNET_YES;
   if (0 != nconn)
   {
     /* Delay shutdown if there are active connections */
-    shutdown_task_id = GNUNET_SCHEDULER_add_delayed
-        (GNUNET_TIME_UNIT_FOREVER_REL,
-         &shutdown_task, NULL);
+    GNUNET_SCHEDULER_add_shutdown (&shutdown_task, NULL);
     return;
   }
   while (NULL != (mq_entry = mq_head))
@@ -139,7 +133,9 @@
   {
     GNUNET_free (mq_entry->msg);
     GNUNET_SERVER_client_drop (mq_entry->client);
-    GNUNET_CONTAINER_DLL_remove (mq_head, mq_tail, mq_entry);
+    GNUNET_CONTAINER_DLL_remove (mq_head,
+                                mq_tail,
+                                mq_entry);
     GNUNET_free (mq_entry);
   }
   GNUNET_break (GNUNET_OK == GNUNET_BIO_write_close (bio));
@@ -147,7 +143,7 @@
 
 
 /**
- * Functions with this signature are called whenever a client
+x * Functions with this signature are called whenever a client
  * is disconnected on the network level.
  *
  * @param cls closure
@@ -155,7 +151,8 @@
  *        for the last call when the server is destroyed
  */
 static void
-client_disconnected (void *cls, struct GNUNET_SERVER_Client *client)
+client_disconnected (void *cls,
+                    struct GNUNET_SERVER_Client *client)
 {
   if (NULL == client)
   {
@@ -163,11 +160,8 @@
     return;
   }
   nconn--;
-  if (GNUNET_YES != in_shutdown)
-    return;
-  GNUNET_assert (NULL != shutdown_task_id);
-  GNUNET_SCHEDULER_cancel (shutdown_task_id);
-  shutdown_task_id = GNUNET_SCHEDULER_add_now (&shutdown_task, NULL);
+  if (GNUNET_YES == in_shutdown)
+    GNUNET_SCHEDULER_shutdown ();
 }
 
 
@@ -179,7 +173,8 @@
  * @param client identification of the client
  */
 static void
-client_connected (void *cls, struct GNUNET_SERVER_Client *client)
+client_connected (void *cls,
+                 struct GNUNET_SERVER_Client *client)
 {
   if (NULL == client)
   {
@@ -199,8 +194,9 @@
  * @param cfg configuration to use
  */
 static void
-logger_run (void *cls, struct GNUNET_SERVER_Handle *server,
-             const struct GNUNET_CONFIGURATION_Handle *cfg)
+logger_run (void *cls,
+           struct GNUNET_SERVER_Handle *server,
+           const struct GNUNET_CONFIGURATION_Handle *cfg)
 {
   static const struct GNUNET_SERVER_MessageHandler message_handlers[] = {
     {&handle_log_msg, NULL, GNUNET_MESSAGE_TYPE_TESTBED_LOGGER_MSG, 0},
@@ -213,10 +209,14 @@
   pid_t pid;
 
   if (GNUNET_OK !=
-      GNUNET_CONFIGURATION_get_value_filename (cfg, "TESTBED-LOGGER", "DIR",
+      GNUNET_CONFIGURATION_get_value_filename (cfg,
+                                              "TESTBED-LOGGER",
+                                              "DIR",
                                                &dir))
   {
-    LOG (GNUNET_ERROR_TYPE_ERROR, "Not logging directory definied.  
Exiting\n");
+    GNUNET_log_config_missing (GNUNET_ERROR_TYPE_ERROR,
+                              "TESTBED-LOGGER",
+                              "DIR");
     GNUNET_SCHEDULER_shutdown ();
     return;
   }
@@ -225,14 +225,19 @@
   hname = GNUNET_malloc (hname_len);
   if (0 != gethostname (hname, hname_len))
   {
-    LOG (GNUNET_ERROR_TYPE_ERROR, "Cannot get hostname.  Exiting\n");
+    LOG (GNUNET_ERROR_TYPE_ERROR,
+        "Cannot get hostname.  Exiting\n");
     GNUNET_free (hname);
     GNUNET_free (dir);
     GNUNET_SCHEDULER_shutdown ();
     return;
   }
-  (void) GNUNET_asprintf (&fn, "%s/%.*s_%jd.dat", dir, hname_len, hname,
-                          (intmax_t) pid);
+  GNUNET_asprintf (&fn,
+                  "%s/%.*s_%jd.dat",
+                  dir,
+                  hname_len,
+                  hname,
+                  (intmax_t) pid);
   GNUNET_free (hname);
   GNUNET_free (dir);
   if (NULL == (bio = GNUNET_BIO_write_open (fn)))
@@ -245,9 +250,7 @@
   GNUNET_SERVER_add_handlers (server, message_handlers);
   GNUNET_SERVER_connect_notify (server, &client_connected, NULL);
   GNUNET_SERVER_disconnect_notify (server, &client_disconnected, NULL);
-  shutdown_task_id =
-      GNUNET_SCHEDULER_add_delayed (GNUNET_TIME_UNIT_FOREVER_REL,
-                                    &shutdown_task, NULL);
+  GNUNET_SCHEDULER_add_shutdown (&shutdown_task, NULL);
   LOG_DEBUG ("TESTBED-LOGGER startup complete\n");
 }
 
@@ -258,7 +261,6 @@
 int
 main (int argc, char *const *argv)
 {
-  //sleep (15);                 /* Debugging */
   return (GNUNET_OK ==
           GNUNET_SERVICE_run (argc, argv, "testbed-logger",
                               GNUNET_SERVICE_OPTION_NONE,
@@ -265,4 +267,4 @@
                               &logger_run, NULL)) ? 0 : 1;
 }
 
-/* end of gnunet-service-testbed.c */
+/* end of gnunet-service-testbed-logger.c */

Modified: gnunet/src/testbed/gnunet-service-testbed.c
===================================================================
--- gnunet/src/testbed/gnunet-service-testbed.c 2016-04-30 08:16:14 UTC (rev 
37101)
+++ gnunet/src/testbed/gnunet-service-testbed.c 2016-04-30 08:17:37 UTC (rev 
37102)
@@ -130,12 +130,6 @@
 
 
 /**
- * The shutdown task handle
- */
-static struct GNUNET_SCHEDULER_Task * shutdown_task_id;
-
-
-/**
  * Function called to notify a client about the connection begin ready to queue
  * more data.  "buf" will be NULL and "size" zero if the connection was closed
  * for writing in the meantime.
@@ -480,7 +474,8 @@
  * @param message the actual message
  */
 static void
-handle_init (void *cls, struct GNUNET_SERVER_Client *client,
+handle_init (void *cls,
+            struct GNUNET_SERVER_Client *client,
              const struct GNUNET_MessageHeader *message)
 {
   const struct GNUNET_TESTBED_InitMessage *msg;
@@ -553,7 +548,7 @@
 
 
 /**
- * Message handler for GNUNET_MESSAGE_TYPE_TESTBED_ADDHOST messages
+ * Message handler for #GNUNET_MESSAGE_TYPE_TESTBED_ADDHOST messages
  *
  * @param cls NULL
  * @param client identification of the client
@@ -560,7 +555,8 @@
  * @param message the actual message
  */
 static void
-handle_add_host (void *cls, struct GNUNET_SERVER_Client *client,
+handle_add_host (void *cls,
+                struct GNUNET_SERVER_Client *client,
                  const struct GNUNET_MessageHeader *message)
 {
   struct GNUNET_TESTBED_Host *host;
@@ -669,7 +665,7 @@
 
 
 /**
- * Handler for GNUNET_MESSAGE_TYPE_TESTBED_GETSLAVECONFIG messages
+ * Handler for #GNUNET_MESSAGE_TYPE_TESTBED_GETSLAVECONFIG messages
  *
  * @param cls NULL
  * @param client identification of the client
@@ -676,7 +672,8 @@
  * @param message the actual message
  */
 static void
-handle_slave_get_config (void *cls, struct GNUNET_SERVER_Client *client,
+handle_slave_get_config (void *cls,
+                        struct GNUNET_SERVER_Client *client,
                          const struct GNUNET_MessageHeader *message)
 {
   struct GNUNET_TESTBED_SlaveGetConfigurationMessage *msg;
@@ -781,7 +778,6 @@
   struct MessageQueue *mq_entry;
   uint32_t id;
 
-  shutdown_task_id = NULL;
   LOG_DEBUG ("Shutting down testbed service\n");
   /* cleanup any remaining forwarded operations */
   GST_clear_fopcq ();
@@ -939,10 +935,7 @@
   GST_config = GNUNET_CONFIGURATION_dup (cfg);
   GNUNET_SERVER_add_handlers (server, message_handlers);
   GNUNET_SERVER_disconnect_notify (server, &client_disconnect_cb, NULL);
-  shutdown_task_id =
-      GNUNET_SCHEDULER_add_delayed_with_priority (GNUNET_TIME_UNIT_FOREVER_REL,
-                                                  
GNUNET_SCHEDULER_PRIORITY_IDLE,
-                                                  &shutdown_task, NULL);
+  GNUNET_SCHEDULER_add_shutdown (&shutdown_task, NULL);
   LOG_DEBUG ("Testbed startup complete\n");
   GST_stats_init (GST_config);
   GST_barriers_init (GST_config);
@@ -955,9 +948,10 @@
 int
 main (int argc, char *const *argv)
 {
-  //sleep (15);                 /* Debugging */
   return (GNUNET_OK ==
-          GNUNET_SERVICE_run (argc, argv, "testbed", 
GNUNET_SERVICE_OPTION_NONE,
+          GNUNET_SERVICE_run (argc, argv,
+                             "testbed",
+                             GNUNET_SERVICE_OPTION_NONE,
                               &testbed_run, NULL)) ? 0 : 1;
 }
 

Modified: gnunet/src/testbed/gnunet-service-testbed_cpustatus.c
===================================================================
--- gnunet/src/testbed/gnunet-service-testbed_cpustatus.c       2016-04-30 
08:16:14 UTC (rev 37101)
+++ gnunet/src/testbed/gnunet-service-testbed_cpustatus.c       2016-04-30 
08:17:37 UTC (rev 37102)
@@ -655,12 +655,8 @@
   int ld_disk;
   unsigned int mem_usage;
   unsigned int nproc;
-  const struct GNUNET_SCHEDULER_TaskContext *tc;
 
   sample_load_task_id = NULL;
-  tc = GNUNET_SCHEDULER_get_task_context ();
-  if (0 != (GNUNET_SCHEDULER_REASON_SHUTDOWN & tc->reason))
-    return;
   ld_cpu = cpu_get_load ();
   ld_disk = disk_get_load ();
   if ( (-1 == ld_cpu) || (-1 == ld_disk) )

Modified: gnunet/src/testbed/gnunet-service-testbed_oc.c
===================================================================
--- gnunet/src/testbed/gnunet-service-testbed_oc.c      2016-04-30 08:16:14 UTC 
(rev 37101)
+++ gnunet/src/testbed/gnunet-service-testbed_oc.c      2016-04-30 08:17:37 UTC 
(rev 37102)
@@ -879,13 +879,9 @@
   struct OverlayConnectContext *occ = cls;
   struct LocalPeer2Context *lp2c;
   char *other_peer_str;
-  const struct GNUNET_SCHEDULER_TaskContext *tc;
 
   occ->send_hello_task = NULL;
   GNUNET_assert (NULL != occ->timeout_task);
-  tc = GNUNET_SCHEDULER_get_task_context ();
-  if (0 != (tc->reason & GNUNET_SCHEDULER_REASON_SHUTDOWN))
-    return;
   GNUNET_assert (NULL != occ->hello);
   if (OCC_TYPE_LOCAL != occ->type)
   {

Modified: gnunet/src/testbed/gnunet-testbed-profiler.c
===================================================================
--- gnunet/src/testbed/gnunet-testbed-profiler.c        2016-04-30 08:16:14 UTC 
(rev 37101)
+++ gnunet/src/testbed/gnunet-testbed-profiler.c        2016-04-30 08:17:37 UTC 
(rev 37102)
@@ -55,14 +55,9 @@
 /**
  * Abort task identifier
  */
-static struct GNUNET_SCHEDULER_Task * abort_task;
+static struct GNUNET_SCHEDULER_Task *abort_task;
 
 /**
- * Shutdown task identifier
- */
-static struct GNUNET_SCHEDULER_Task * shutdown_task;
-
-/**
  * Global event mask for all testbed events
  */
 uint64_t event_mask;
@@ -111,7 +106,6 @@
 static void
 do_shutdown (void *cls)
 {
-  shutdown_task = NULL;
   if (NULL != abort_task)
   {
     GNUNET_SCHEDULER_cancel (abort_task);
@@ -122,7 +116,6 @@
     GNUNET_CONFIGURATION_destroy (cfg);
     cfg = NULL;
   }
-  GNUNET_SCHEDULER_shutdown (); /* Stop scheduler to shutdown testbed run */
 }
 
 
@@ -134,12 +127,11 @@
 static void
 do_abort (void *cls)
 {
-  LOG (GNUNET_ERROR_TYPE_WARNING, "Aborting\n");
   abort_task = NULL;
+  LOG (GNUNET_ERROR_TYPE_WARNING,
+       "Aborting\n");
   result = GNUNET_SYSERR;
-  if (NULL != shutdown_task)
-    GNUNET_SCHEDULER_cancel (shutdown_task);
-  shutdown_task = GNUNET_SCHEDULER_add_now (&do_shutdown, NULL);
+  GNUNET_SCHEDULER_shutdown ();
 }
 
 
@@ -228,12 +220,11 @@
   result = GNUNET_OK;
   fprintf (stdout, "\n");
   print_overlay_links_summary ();
+  GNUNET_SCHEDULER_add_shutdown (&do_shutdown, NULL);
   if (noninteractive)
   {
     GNUNET_SCHEDULER_cancel (abort_task);
     abort_task = NULL;
-    shutdown_task = GNUNET_SCHEDULER_add_delayed (GNUNET_TIME_UNIT_FOREVER_REL,
-                                                  &do_shutdown, NULL);
     return;
   }
 #if (!ENABLE_SUPERMUC)
@@ -243,8 +234,7 @@
 #endif
   fprintf (stdout, "Shutting down. Please wait\n");
   fflush (stdout);
-  shutdown_task = GNUNET_SCHEDULER_add_now (&do_shutdown, NULL);
-  return;
+  GNUNET_SCHEDULER_shutdown ();
 }
 
 

Modified: gnunet/src/testbed/gnunet_testbed_mpi_spawn.c
===================================================================
--- gnunet/src/testbed/gnunet_testbed_mpi_spawn.c       2016-04-30 08:16:14 UTC 
(rev 37101)
+++ gnunet/src/testbed/gnunet_testbed_mpi_spawn.c       2016-04-30 08:17:37 UTC 
(rev 37102)
@@ -56,11 +56,6 @@
 static enum GNUNET_OS_ProcessStatusType child_status;
 
 /**
- * The shutdown task
- */
-static struct GNUNET_SCHEDULER_Task * shutdown_task_id;
-
-/**
  * Task to kill the child
  */
 static struct GNUNET_SCHEDULER_Task * terminate_task_id;
@@ -76,7 +71,6 @@
 static void
 shutdown_task (void *cls)
 {
-  shutdown_task_id = NULL;
   if (0 != child_exit_code)
   {
     LOG (GNUNET_ERROR_TYPE_WARNING, "Child exited with error code: %lu\n",
@@ -102,8 +96,7 @@
 
   GNUNET_assert (NULL != child);
   terminate_task_id =
-      GNUNET_SCHEDULER_add_delayed (GNUNET_TIME_UNIT_FOREVER_REL,
-                                    &terminate_task, NULL);
+    GNUNET_SCHEDULER_add_shutdown (&terminate_task, NULL);
   if (0 != hard_kill)
   {
     switch (hard_kill)
@@ -159,7 +152,7 @@
                                                         &child_exit_code));
   GNUNET_OS_process_destroy (child);
   child = NULL;
-  shutdown_task_id = GNUNET_SCHEDULER_add_now (&shutdown_task, NULL);
+  GNUNET_SCHEDULER_add_now (&shutdown_task, NULL);
 }
 
 
@@ -253,13 +246,12 @@
   {
     GNUNET_break (0);
     ret = GNUNET_SYSERR;
-    shutdown_task_id = GNUNET_SCHEDULER_add_now (&shutdown_task, NULL);
+    GNUNET_SCHEDULER_add_now (&shutdown_task, NULL);
     return;
   }
   ret = GNUNET_OK;
   terminate_task_id =
-      GNUNET_SCHEDULER_add_delayed (GNUNET_TIME_UNIT_FOREVER_REL,
-                                    &terminate_task, NULL);
+      GNUNET_SCHEDULER_add_shutdown (&terminate_task, NULL);
   child_death_task_id =
     GNUNET_SCHEDULER_add_read_file (GNUNET_TIME_UNIT_FOREVER_REL,
                                    GNUNET_DISK_pipe_handle (sigpipe,

Modified: gnunet/src/testbed/test_testbed_api_3peers_3controllers.c
===================================================================
--- gnunet/src/testbed/test_testbed_api_3peers_3controllers.c   2016-04-30 
08:16:14 UTC (rev 37101)
+++ gnunet/src/testbed/test_testbed_api_3peers_3controllers.c   2016-04-30 
08:17:37 UTC (rev 37102)
@@ -301,6 +301,7 @@
   do_shutdown (cls);
 }
 
+
 static void
 abort_test ()
 {
@@ -842,10 +843,11 @@
  * @param cls NULL
  * @param host the host whose status is being reported; will be NULL if the 
host
  *          given to GNUNET_TESTBED_is_host_habitable() is NULL
- * @param status GNUNET_YES if it is habitable; GNUNET_NO if not
+ * @param status #GNUNET_YES if it is habitable; #GNUNET_NO if not
  */
 static void
-host_habitable_cb (void *cls, const struct GNUNET_TESTBED_Host *_host,
+host_habitable_cb (void *cls,
+                  const struct GNUNET_TESTBED_Host *_host,
                    int status)
 {
   hc_handle = NULL;
@@ -857,7 +859,7 @@
                    "Skipping test\n");
     GNUNET_SCHEDULER_cancel (abort_task);
     abort_task = NULL;
-    (void) GNUNET_SCHEDULER_add_now (&do_shutdown, NULL);
+    GNUNET_SCHEDULER_add_now (&do_shutdown, NULL);
     result = SKIP;
     return;
   }

Modified: gnunet/src/testbed/test_testbed_api_hosts.c
===================================================================
--- gnunet/src/testbed/test_testbed_api_hosts.c 2016-04-30 08:16:14 UTC (rev 
37101)
+++ gnunet/src/testbed/test_testbed_api_hosts.c 2016-04-30 08:17:37 UTC (rev 
37102)
@@ -58,10 +58,6 @@
  */
 static int status;
 
-/**
- * Shutdown task identifier
- */
-struct GNUNET_SCHEDULER_Task * shutdown_id;
 
 /**
  * The shutdown task
@@ -159,8 +155,7 @@
     }
   }
   status = GNUNET_YES;
-  shutdown_id =
-      GNUNET_SCHEDULER_add_delayed (TIME_REL_SECS (0), &do_shutdown, NULL);
+  GNUNET_SCHEDULER_add_now (&do_shutdown, NULL);
 }
 
 

Modified: gnunet/src/testbed/test_testbed_api_testbed_run.c
===================================================================
--- gnunet/src/testbed/test_testbed_api_testbed_run.c   2016-04-30 08:16:14 UTC 
(rev 37101)
+++ gnunet/src/testbed/test_testbed_api_testbed_run.c   2016-04-30 08:17:37 UTC 
(rev 37102)
@@ -86,9 +86,10 @@
 static void
 do_abort (void *cls)
 {
-  GNUNET_log (GNUNET_ERROR_TYPE_WARNING, "Test timedout -- Aborting\n");
   abort_task = NULL;
-  (void) GNUNET_SCHEDULER_add_now (&do_shutdown, NULL);
+  GNUNET_log (GNUNET_ERROR_TYPE_WARNING,
+             "Test timed out -- Aborting\n");
+  GNUNET_SCHEDULER_add_now (&do_shutdown, NULL);
 }
 
 
@@ -119,8 +120,7 @@
       return;                   /* abort already scheduled */
     GNUNET_SCHEDULER_cancel (abort_task);
     abort_task = NULL;
-    (void) GNUNET_SCHEDULER_add_delayed (GNUNET_TIME_UNIT_FOREVER_REL,
-                                         &do_shutdown, NULL);
+    GNUNET_SCHEDULER_add_shutdown (&do_shutdown, NULL);
     return;
   }
   GNUNET_assert (NULL != peers[0]);
@@ -168,7 +168,9 @@
  * @param cfg the configuration file handle
  */
 static void
-run (void *cls, char *const *args, const char *cfgfile,
+run (void *cls,
+     char *const *args,
+     const char *cfgfile,
      const struct GNUNET_CONFIGURATION_Handle *config)
 {
   uint64_t event_mask;
@@ -176,11 +178,13 @@
   event_mask = 0;
   event_mask |= (1LL << GNUNET_TESTBED_ET_PEER_START);
   event_mask |= (1LL << GNUNET_TESTBED_ET_PEER_STOP);
-  GNUNET_TESTBED_run (NULL, config, NUM_PEERS, event_mask, 
&controller_event_cb,
-                      NULL, &test_master, NULL);
+  GNUNET_TESTBED_run (NULL, config, NUM_PEERS, event_mask,
+                     &controller_event_cb, NULL,
+                     &test_master, NULL);
   abort_task =
       GNUNET_SCHEDULER_add_delayed (GNUNET_TIME_relative_multiply
-                                    (GNUNET_TIME_UNIT_SECONDS, 300), &do_abort,
+                                    (GNUNET_TIME_UNIT_SECONDS, 300),
+                                   &do_abort,
                                     NULL);
 }
 

Modified: gnunet/src/testbed/test_testbed_logger_api.c
===================================================================
--- gnunet/src/testbed/test_testbed_logger_api.c        2016-04-30 08:16:14 UTC 
(rev 37101)
+++ gnunet/src/testbed/test_testbed_logger_api.c        2016-04-30 08:17:37 UTC 
(rev 37102)
@@ -113,8 +113,11 @@
  *
  * @param cls closure
  * @param filename complete filename (absolute path)
+ * @return #GNUNET_OK to continue to iterate,
+ *  #GNUNET_NO to stop iteration with no error,
+ *  #GNUNET_SYSERR to abort iteration with error!
  */
-static void
+static int
 iterator_cb (void *cls,
              const char *filename)
 {
@@ -121,31 +124,28 @@
   const char *fn;
   size_t len;
   uint64_t fs;
-  int cancel;
 
-  cancel = GNUNET_NO;
-  if (NULL == filename)
-    return;
   len = strlen (filename);
   if (len < 5)                  /* log file: `pid'.dat */
-    return;
+    return GNUNET_OK;
+
   fn = filename + len;
   if (0 != strcasecmp (".dat", fn - 4))
-    return;
-  if (GNUNET_OK != GNUNET_DISK_file_size (filename, &fs,
-                                          GNUNET_NO, GNUNET_YES))
-    return;
+    return GNUNET_OK;
+  if (GNUNET_OK !=
+      GNUNET_DISK_file_size (filename, &fs,
+                            GNUNET_NO, GNUNET_YES))
+    return GNUNET_SYSERR;
   if ((BSIZE * 2) != fs)        /* The file size should be equal to what we
                                    have written */
-    return;
-  cancel = GNUNET_YES;
-  result = GNUNET_OK;
+    return GNUNET_SYSERR;
+  return GNUNET_OK;
 }
 
 
 /**
- * Functions of this type are called to notify a successful transmission of the
- * message to the logger service
+ * Functions of this type are called to notify a successful
+ * transmission of the message to the logger service
  *
  * @param cls the closure given to GNUNET_TESTBED_LOGGER_send()
  * @param size the amount of data sent

Modified: gnunet/src/testbed/testbed_api_testbed.c
===================================================================
--- gnunet/src/testbed/testbed_api_testbed.c    2016-04-30 08:16:14 UTC (rev 
37101)
+++ gnunet/src/testbed/testbed_api_testbed.c    2016-04-30 08:17:37 UTC (rev 
37102)
@@ -263,7 +263,7 @@
   /**
    * Task run upon shutdown interrupts
    */
-  struct GNUNET_SCHEDULER_Task * interrupt_task;
+  struct GNUNET_SCHEDULER_Task *interrupt_task;
 
   /**
    * The event mask for the controller
@@ -620,8 +620,7 @@
   unsigned int size;
 
   /* reschedule */
-  rc->interrupt_task = GNUNET_SCHEDULER_add_delayed
-      (GNUNET_TIME_UNIT_FOREVER_REL, &interrupt, rc);
+  rc->interrupt_task = GNUNET_SCHEDULER_add_shutdown (&interrupt, rc);
   rc_cleanup_operations (rc);
   if ( (GNUNET_NO == rc->shutdown) &&
        (NULL != c) &&
@@ -988,7 +987,8 @@
     GNUNET_SCHEDULER_shutdown ();
     return;
   }
-  rc->register_hosts_task = GNUNET_SCHEDULER_add_now (&register_hosts, rc);
+  rc->register_hosts_task = GNUNET_SCHEDULER_add_now (&register_hosts,
+                                                     rc);
 }
 
 
@@ -1415,10 +1415,11 @@
   }
   rc->rcop_map = GNUNET_CONTAINER_multihashmap32_create (256);
   rc->timeout_task =
-      GNUNET_SCHEDULER_add_delayed (timeout, &timeout_task, rc);
+    GNUNET_SCHEDULER_add_delayed (timeout, &timeout_task, rc);
+  GNUNET_assert (NULL == rc->interrupt_task);
   rc->interrupt_task =
-      GNUNET_SCHEDULER_add_delayed (GNUNET_TIME_UNIT_FOREVER_REL, &interrupt,
-                                    rc);
+    GNUNET_SCHEDULER_add_shutdown (&interrupt,
+                                  rc);
   return;
 
 error_cleanup:

Modified: gnunet/src/testing/gnunet-testing.c
===================================================================
--- gnunet/src/testing/gnunet-testing.c 2016-04-30 08:16:14 UTC (rev 37101)
+++ gnunet/src/testing/gnunet-testing.c 2016-04-30 08:17:37 UTC (rev 37102)
@@ -76,7 +76,7 @@
 /**
  * Task identifier of the task that waits for stdin.
  */
-static struct GNUNET_SCHEDULER_Task * tid;
+static struct GNUNET_SCHEDULER_Task *tid;
 
 /**
  * Peer started for '-r'.
@@ -228,13 +228,8 @@
 stdin_cb (void *cls)
 {
   int c;
-  const struct GNUNET_SCHEDULER_TaskContext *tc;
 
   tid = NULL;
-  tc = GNUNET_SCHEDULER_get_task_context ();
-  if (0 != (GNUNET_SCHEDULER_REASON_SHUTDOWN & tc->reason))
-    return;
-  GNUNET_assert (0 != (GNUNET_SCHEDULER_REASON_READ_READY & tc->reason));
   c = getchar ();
   switch (c)
   {
@@ -258,7 +253,8 @@
     fprintf (stderr, _("Unknown command, use 'q' to quit or 'r' to restart 
peer\n"));
     break;
   }
-  tid = GNUNET_SCHEDULER_add_read_file (GNUNET_TIME_UNIT_FOREVER_REL, fh,
+  tid = GNUNET_SCHEDULER_add_read_file (GNUNET_TIME_UNIT_FOREVER_REL,
+                                       fh,
                                         &stdin_cb, NULL);
 }
 
@@ -291,9 +287,10 @@
   }
   printf("ok\n%s\n", tmpfilename);
   fflush(stdout);
-  GNUNET_SCHEDULER_add_delayed (GNUNET_TIME_UNIT_FOREVER_REL, &cleanup, NULL);
+  GNUNET_SCHEDULER_add_shutdown (&cleanup, NULL);
   fh = GNUNET_DISK_get_handle_from_native (stdin);
-  tid = GNUNET_SCHEDULER_add_read_file (GNUNET_TIME_UNIT_FOREVER_REL, fh,
+  tid = GNUNET_SCHEDULER_add_read_file (GNUNET_TIME_UNIT_FOREVER_REL,
+                                       fh,
                                         &stdin_cb, NULL);
 }
 

Modified: gnunet/src/topology/gnunet-daemon-topology.c
===================================================================
--- gnunet/src/topology/gnunet-daemon-topology.c        2016-04-30 08:16:14 UTC 
(rev 37101)
+++ gnunet/src/topology/gnunet-daemon-topology.c        2016-04-30 08:17:37 UTC 
(rev 37102)
@@ -514,13 +514,9 @@
   struct FindAdvHelloContext fah;
   size_t next_want;
   struct GNUNET_TIME_Relative delay;
-  const struct GNUNET_SCHEDULER_TaskContext *tc;
 
   pl->hello_delay_task = NULL;
   GNUNET_assert (GNUNET_YES == pl->is_connected);
-  tc = GNUNET_SCHEDULER_get_task_context ();
-  if (0 != (tc->reason & GNUNET_SCHEDULER_REASON_SHUTDOWN))
-    return;                     /* we're out of here */
   if (pl->hello_req != NULL)
     return;                     /* did not finish sending the previous one */
   /* find applicable HELLOs */
@@ -535,7 +531,7 @@
       GNUNET_SCHEDULER_add_delayed (fah.next_adv,
                                     &schedule_next_hello,
                                     pl);
-  if (fah.result == NULL)
+  if (NULL == fah.result)
     return;
   next_want = GNUNET_HELLO_size (fah.result->hello);
   delay = GNUNET_TIME_absolute_get_remaining (pl->next_hello_allowed);
@@ -1241,9 +1237,8 @@
                            NULL, GNUNET_NO,
                            NULL, GNUNET_NO,
                            handlers);
-  GNUNET_SCHEDULER_add_delayed (GNUNET_TIME_UNIT_FOREVER_REL,
-                                &cleaning_task,
-                                NULL);
+  GNUNET_SCHEDULER_add_shutdown (&cleaning_task,
+                                NULL);
   if (NULL == transport)
   {
     GNUNET_log (GNUNET_ERROR_TYPE_ERROR,

Modified: gnunet/src/transport/gnunet-service-transport.c
===================================================================
--- gnunet/src/transport/gnunet-service-transport.c     2016-04-30 08:16:14 UTC 
(rev 37101)
+++ gnunet/src/transport/gnunet-service-transport.c     2016-04-30 08:17:37 UTC 
(rev 37102)
@@ -848,9 +848,8 @@
              "My identity is `%4s'\n",
              GNUNET_i2s_full (&GST_my_identity));
 
-  GNUNET_SCHEDULER_add_delayed (GNUNET_TIME_UNIT_FOREVER_REL,
-                                &shutdown_task,
-                                NULL);
+  GNUNET_SCHEDULER_add_shutdown (&shutdown_task,
+                                NULL);
   if (NULL == GST_peerinfo)
   {
     GNUNET_log(GNUNET_ERROR_TYPE_ERROR,

Modified: gnunet/src/transport/gnunet-service-transport_validation.c
===================================================================
--- gnunet/src/transport/gnunet-service-transport_validation.c  2016-04-30 
08:16:14 UTC (rev 37101)
+++ gnunet/src/transport/gnunet-service-transport_validation.c  2016-04-30 
08:17:37 UTC (rev 37102)
@@ -873,7 +873,6 @@
   validation_entry_changed (ve,
                             GNUNET_TRANSPORT_VS_UPDATE);
   memset (&prop, 0, sizeof (prop));
-  GNUNET_break (GNUNET_ATS_NET_UNSPECIFIED != ve->network);
   prop.scope = ve->network;
   prop.delay = GNUNET_TIME_relative_divide (ve->latency, 2);
   if (GNUNET_YES != ve->known_to_ats)

Modified: gnunet/src/transport/gnunet-transport-profiler.c
===================================================================
--- gnunet/src/transport/gnunet-transport-profiler.c    2016-04-30 08:16:14 UTC 
(rev 37101)
+++ gnunet/src/transport/gnunet-transport-profiler.c    2016-04-30 08:17:37 UTC 
(rev 37102)
@@ -146,11 +146,6 @@
 static struct GNUNET_PeerIdentity pid;
 
 /**
- * Task scheduled for cleanup / termination of the process.
- */
-static struct GNUNET_SCHEDULER_Task * end;
-
-/**
  * Selected level of verbosity.
  */
 static int verbosity;
@@ -380,9 +375,7 @@
   if (it_count == benchmark_iterations)
   {
     benchmark_running = GNUNET_NO;
-    if (NULL != end)
-      GNUNET_SCHEDULER_cancel (end);
-    end = GNUNET_SCHEDULER_add_now (&shutdown_task, NULL);
+    GNUNET_SCHEDULER_shutdown ();
     return;
   }
   else
@@ -570,9 +563,8 @@
   ats_sh = GNUNET_ATS_connectivity_suggest (ats,
                                             &pid,
                                             1);
-  end = GNUNET_SCHEDULER_add_delayed (GNUNET_TIME_UNIT_FOREVER_REL,
-                                      &shutdown_task,
-                                      NULL);
+  GNUNET_SCHEDULER_add_shutdown (&shutdown_task,
+                                NULL);
 }
 
 

Modified: gnunet/src/transport/gnunet-transport.c
===================================================================
--- gnunet/src/transport/gnunet-transport.c     2016-04-30 08:16:14 UTC (rev 
37101)
+++ gnunet/src/transport/gnunet-transport.c     2016-04-30 08:17:37 UTC (rev 
37102)
@@ -607,9 +607,7 @@
     FPRINTF (stdout,
              _("Failed to connect to `%s'\n"),
              GNUNET_i2s_full (&pid));
-    if (NULL != end)
-      GNUNET_SCHEDULER_cancel (end);
-    end = GNUNET_SCHEDULER_add_now (&shutdown_task, NULL);
+    GNUNET_SCHEDULER_shutdown ();
     ret = 1;
     return;
   }
@@ -633,9 +631,7 @@
     FPRINTF (stdout,
              "%s",
              _("Failed to list connections, timeout occured\n"));
-    if (NULL != end)
-      GNUNET_SCHEDULER_cancel (end);
-    end = GNUNET_SCHEDULER_add_now (&shutdown_task, NULL);
+    GNUNET_SCHEDULER_shutdown ();
     ret = 1;
     return;
   }
@@ -851,11 +847,6 @@
   GNUNET_free (vc);
   if ((0 == address_resolutions) && (iterate_validation))
   {
-    if (NULL != end)
-    {
-      GNUNET_SCHEDULER_cancel (end);
-      end = NULL;
-    }
     if (NULL != op_timeout)
     {
       GNUNET_SCHEDULER_cancel (op_timeout);
@@ -862,7 +853,7 @@
       op_timeout = NULL;
     }
     ret = 0;
-    end = GNUNET_SCHEDULER_add_now (&shutdown_task, NULL);
+    GNUNET_SCHEDULER_shutdown ();
   }
 }
 
@@ -937,9 +928,7 @@
       return;
     }
     vic = NULL;
-    if (NULL != end)
-      GNUNET_SCHEDULER_cancel (end);
-    end = GNUNET_SCHEDULER_add_now (&shutdown_task, NULL);
+    GNUNET_SCHEDULER_shutdown ();
     return;
   }
   resolve_validation_address (address,
@@ -1364,11 +1353,6 @@
   GNUNET_free (rc);
   if ((0 == address_resolutions) && (iterate_connections))
   {
-    if (NULL != end)
-    {
-      GNUNET_SCHEDULER_cancel (end);
-      end = NULL;
-    }
     if (NULL != op_timeout)
     {
       GNUNET_SCHEDULER_cancel (op_timeout);
@@ -1375,8 +1359,7 @@
       op_timeout = NULL;
     }
     ret = 0;
-    end = GNUNET_SCHEDULER_add_now (&shutdown_task,
-                                   NULL);
+    GNUNET_SCHEDULER_shutdown ();
   }
 }
 
@@ -1950,10 +1933,9 @@
     GNUNET_break(0);
     return;
   }
-
-  end = GNUNET_SCHEDULER_add_delayed (GNUNET_TIME_UNIT_FOREVER_REL,
-                                      &shutdown_task,
-                                      NULL);
+  
+  GNUNET_SCHEDULER_add_shutdown (&shutdown_task,
+                                NULL);
 }
 
 

Modified: gnunet/src/transport/plugin_transport_http_client.c
===================================================================
--- gnunet/src/transport/plugin_transport_http_client.c 2016-04-30 08:16:14 UTC 
(rev 37101)
+++ gnunet/src/transport/plugin_transport_http_client.c 2016-04-30 08:17:37 UTC 
(rev 37102)
@@ -226,17 +226,17 @@
   /**
    * Session timeout task
    */
-  struct GNUNET_SCHEDULER_Task * put_disconnect_task;
+  struct GNUNET_SCHEDULER_Task *put_disconnect_task;
 
   /**
    * Session timeout task
    */
-  struct GNUNET_SCHEDULER_Task * timeout_task;
+  struct GNUNET_SCHEDULER_Task *timeout_task;
 
   /**
    * Task to wake up client receive handle when receiving is allowed again
    */
-  struct GNUNET_SCHEDULER_Task * recv_wakeup_task;
+  struct GNUNET_SCHEDULER_Task *recv_wakeup_task;
 
   /**
    * Absolute time when to receive data again.
@@ -1130,12 +1130,8 @@
 client_wake_up (void *cls)
 {
   struct GNUNET_ATS_Session *s = cls;
-  const struct GNUNET_SCHEDULER_TaskContext *tc;
 
   s->recv_wakeup_task = NULL;
-  tc = GNUNET_SCHEDULER_get_task_context ();
-  if (0 != (tc->reason & GNUNET_SCHEDULER_REASON_SHUTDOWN))
-    return;
   LOG (GNUNET_ERROR_TYPE_DEBUG,
        "Session %p/request %p: Waking up GET handle\n",
        s, s->get.easyhandle);
@@ -1301,13 +1297,8 @@
   CURLMsg *msg;
   int put_request; /* GNUNET_YES if easy handle is put, GNUNET_NO for get */
   int msgs_left;
-  const struct GNUNET_SCHEDULER_TaskContext *tc;
 
   plugin->client_perform_task = NULL;
-  tc = GNUNET_SCHEDULER_get_task_context ();
-  if (0 != (tc->reason & GNUNET_SCHEDULER_REASON_SHUTDOWN))
-    return;
-
   /* While data are available or timeouts occured */
   do
   {
@@ -2379,8 +2370,10 @@
   if (s->recv_wakeup_task != NULL)
   {
     GNUNET_SCHEDULER_cancel (s->recv_wakeup_task);
-    s->recv_wakeup_task = GNUNET_SCHEDULER_add_delayed (delay,
-        &client_wake_up, s);
+    s->recv_wakeup_task
+      = GNUNET_SCHEDULER_add_delayed (delay,
+                                     &client_wake_up,
+                                     s);
   }
 }
 

Modified: gnunet/src/transport/plugin_transport_http_server.c
===================================================================
--- gnunet/src/transport/plugin_transport_http_server.c 2016-04-30 08:16:14 UTC 
(rev 37101)
+++ gnunet/src/transport/plugin_transport_http_server.c 2016-04-30 08:17:37 UTC 
(rev 37102)
@@ -374,17 +374,17 @@
   /**
    * MHD IPv4 task
    */
-  struct GNUNET_SCHEDULER_Task * server_v4_task;
+  struct GNUNET_SCHEDULER_Task *server_v4_task;
 
   /**
    * MHD IPv6 task
    */
-  struct GNUNET_SCHEDULER_Task * server_v6_task;
+  struct GNUNET_SCHEDULER_Task *server_v6_task;
 
   /**
    * Task calling transport service about external address
    */
-  struct GNUNET_SCHEDULER_Task * notify_ext_task;
+  struct GNUNET_SCHEDULER_Task *notify_ext_task;
 
   /**
    * Notify transport only about external address
@@ -496,12 +496,8 @@
 server_wake_up (void *cls)
 {
   struct GNUNET_ATS_Session *s = cls;
-  const struct GNUNET_SCHEDULER_TaskContext *tc;
 
-  tc = GNUNET_SCHEDULER_get_task_context ();
   s->recv_wakeup_task = NULL;
-  if (0 != (tc->reason & GNUNET_SCHEDULER_REASON_SHUTDOWN))
-    return;
   LOG (GNUNET_ERROR_TYPE_DEBUG,
        "Session %p: Waking up PUT handle\n",
        s);
@@ -913,12 +909,8 @@
 server_v4_run (void *cls)
 {
   struct HTTP_Server_Plugin *plugin = cls;
-  const struct GNUNET_SCHEDULER_TaskContext *tc;
 
   plugin->server_v4_task = NULL;
-  tc = GNUNET_SCHEDULER_get_task_context ();
-  if (0 != (tc->reason & GNUNET_SCHEDULER_REASON_SHUTDOWN))
-    return;
   plugin->server_v4_immediately = GNUNET_NO;
   GNUNET_assert (MHD_YES == MHD_run (plugin->server_v4));
   server_reschedule (plugin, plugin->server_v4, GNUNET_NO);
@@ -935,12 +927,8 @@
 server_v6_run (void *cls)
 {
   struct HTTP_Server_Plugin *plugin = cls;
-  const struct GNUNET_SCHEDULER_TaskContext *tc;
 
   plugin->server_v6_task = NULL;
-  tc = GNUNET_SCHEDULER_get_task_context ();
-  if (0 != (tc->reason & GNUNET_SCHEDULER_REASON_SHUTDOWN))
-    return;
   plugin->server_v6_immediately = GNUNET_NO;
   GNUNET_assert (MHD_YES == MHD_run (plugin->server_v6));
   server_reschedule (plugin, plugin->server_v6, GNUNET_NO);
@@ -1869,8 +1857,10 @@
         GNUNET_assert(s->server_recv->mhd_conn == mhd_connection);
         MHD_suspend_connection (s->server_recv->mhd_conn);
         if (NULL == s->recv_wakeup_task)
-          s->recv_wakeup_task = GNUNET_SCHEDULER_add_delayed (delay,
-              &server_wake_up, s);
+          s->recv_wakeup_task
+           = GNUNET_SCHEDULER_add_delayed (delay,
+                                           &server_wake_up,
+                                           s);
       }
       return MHD_YES;
     }
@@ -2851,18 +2841,12 @@
   size_t ext_addr_len;
   unsigned int urlen;
   char *url;
-  const struct GNUNET_SCHEDULER_TaskContext *tc;
 
   plugin->notify_ext_task = NULL;
-  tc = GNUNET_SCHEDULER_get_task_context ();
-  if (0 != (tc->reason & GNUNET_SCHEDULER_REASON_SHUTDOWN))
-    return;
-
-  GNUNET_asprintf(&url,
-                  "%s://%s",
-                  plugin->protocol,
-                  plugin->external_hostname);
-
+  GNUNET_asprintf (&url,
+                  "%s://%s",
+                  plugin->protocol,
+                  plugin->external_hostname);
   urlen = strlen (url) + 1;
   ext_addr = GNUNET_malloc (sizeof (struct HttpAddress) + urlen);
   ext_addr->options = htonl (plugin->options);
@@ -2881,13 +2865,23 @@
          "Enabling SSL verification for external hostname address `%s'\n",
          plugin->external_hostname);
   plugin->ext_addr = GNUNET_HELLO_address_allocate (plugin->env->my_identity,
-      "https_client", ext_addr, ext_addr_len, GNUNET_HELLO_ADDRESS_INFO_NONE );
-  plugin->env->notify_address (plugin->env->cls, GNUNET_YES, plugin->ext_addr);
+                                                   "https_client",
+                                                   ext_addr,
+                                                   ext_addr_len,
+                                                   
GNUNET_HELLO_ADDRESS_INFO_NONE);
+  plugin->env->notify_address (plugin->env->cls,
+                              GNUNET_YES,
+                              plugin->ext_addr);
   GNUNET_free (ext_addr);
 #else
   plugin->ext_addr = GNUNET_HELLO_address_allocate (plugin->env->my_identity,
-      "http_client", ext_addr, ext_addr_len, GNUNET_HELLO_ADDRESS_INFO_NONE );
-  plugin->env->notify_address (plugin->env->cls, GNUNET_YES, plugin->ext_addr);
+                                                   "http_client",
+                                                   ext_addr,
+                                                   ext_addr_len,
+                                                   
GNUNET_HELLO_ADDRESS_INFO_NONE);
+  plugin->env->notify_address (plugin->env->cls,
+                              GNUNET_YES,
+                              plugin->ext_addr);
   GNUNET_free (ext_addr);
 #endif
 }

Modified: gnunet/src/transport/plugin_transport_udp.c
===================================================================
--- gnunet/src/transport/plugin_transport_udp.c 2016-04-30 08:16:14 UTC (rev 
37101)
+++ gnunet/src/transport/plugin_transport_udp.c 2016-04-30 08:17:37 UTC (rev 
37102)
@@ -3516,13 +3516,11 @@
 {
   struct Plugin *plugin = cls;
   const struct GNUNET_SCHEDULER_TaskContext *tc;
-
-  tc = GNUNET_SCHEDULER_get_task_context ();
+  
   plugin->select_task_v4 = NULL;
-  if (0 != (tc->reason & GNUNET_SCHEDULER_REASON_SHUTDOWN))
-    return;
   if (NULL == plugin->sockv4)
     return;
+  tc = GNUNET_SCHEDULER_get_task_context ();
   if ((0 != (tc->reason & GNUNET_SCHEDULER_REASON_READ_READY)) &&
       (GNUNET_NETWORK_fdset_isset (tc->read_ready,
                                    plugin->sockv4)))
@@ -3547,12 +3545,10 @@
   struct Plugin *plugin = cls;
   const struct GNUNET_SCHEDULER_TaskContext *tc;
 
-  tc = GNUNET_SCHEDULER_get_task_context ();
   plugin->select_task_v6 = NULL;
-  if (0 != (tc->reason & GNUNET_SCHEDULER_REASON_SHUTDOWN))
-    return;
   if (NULL == plugin->sockv6)
     return;
+  tc = GNUNET_SCHEDULER_get_task_context ();
   if ( (0 != (tc->reason & GNUNET_SCHEDULER_REASON_READ_READY)) &&
        (GNUNET_NETWORK_fdset_isset (tc->read_ready,
                                     plugin->sockv6)) )

Modified: gnunet/src/transport/plugin_transport_unix.c
===================================================================
--- gnunet/src/transport/plugin_transport_unix.c        2016-04-30 08:16:14 UTC 
(rev 37101)
+++ gnunet/src/transport/plugin_transport_unix.c        2016-04-30 08:17:37 UTC 
(rev 37102)
@@ -1229,11 +1229,9 @@
 {
   struct Plugin *plugin = cls;
   const struct GNUNET_SCHEDULER_TaskContext *tc;
-
+  
+  plugin->read_task = NULL;
   tc = GNUNET_SCHEDULER_get_task_context ();
-  plugin->read_task = NULL;
-  if (0 != (tc->reason & GNUNET_SCHEDULER_REASON_SHUTDOWN))
-    return;
   if (0 != (tc->reason & GNUNET_SCHEDULER_REASON_READ_READY))
     unix_plugin_do_read (plugin);
   plugin->read_task =
@@ -1254,11 +1252,9 @@
 {
   struct Plugin *plugin = cls;
   const struct GNUNET_SCHEDULER_TaskContext *tc;
-
+  
+  plugin->write_task = NULL;
   tc = GNUNET_SCHEDULER_get_task_context ();
-  plugin->write_task = NULL;
-  if (0 != (tc->reason & GNUNET_SCHEDULER_REASON_SHUTDOWN))
-    return;
   if (0 != (tc->reason & GNUNET_SCHEDULER_REASON_WRITE_READY))
     unix_plugin_do_write (plugin);
   if (NULL == plugin->msg_head)

Modified: gnunet/src/transport/test_transport_api.c
===================================================================
--- gnunet/src/transport/test_transport_api.c   2016-04-30 08:16:14 UTC (rev 
37101)
+++ gnunet/src/transport/test_transport_api.c   2016-04-30 08:17:37 UTC (rev 
37102)
@@ -228,12 +228,7 @@
 static void
 sendtask (void *cls)
 {
-  const struct GNUNET_SCHEDULER_TaskContext *tc;
-
   send_task = NULL;
-  tc = GNUNET_SCHEDULER_get_task_context ();
-  if ((tc->reason & GNUNET_SCHEDULER_REASON_SHUTDOWN) != 0)
-    return;
   char *receiver_s = GNUNET_strdup (GNUNET_i2s (&p1->id));
 
   GNUNET_log (GNUNET_ERROR_TYPE_INFO,

Modified: gnunet/src/transport/test_transport_api_bidirectional_connect.c
===================================================================
--- gnunet/src/transport/test_transport_api_bidirectional_connect.c     
2016-04-30 08:16:14 UTC (rev 37101)
+++ gnunet/src/transport/test_transport_api_bidirectional_connect.c     
2016-04-30 08:17:37 UTC (rev 37102)
@@ -210,14 +210,10 @@
 static void
 sendtask (void *cls)
 {
-  const struct GNUNET_SCHEDULER_TaskContext *tc;
+  char *receiver_s;
 
   send_task = NULL;
-  tc = GNUNET_SCHEDULER_get_task_context ();
-  if ((tc->reason & GNUNET_SCHEDULER_REASON_SHUTDOWN) != 0)
-    return;
-  char *receiver_s = GNUNET_strdup (GNUNET_i2s (&p1->id));
-
+  receiver_s = GNUNET_strdup (GNUNET_i2s (&p1->id));
   GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
               "Sending message from peer %u (`%4s') -> peer %u (`%s') !\n",
               p2->no, GNUNET_i2s (&p2->id), p1->no, receiver_s);

Modified: gnunet/src/transport/test_transport_api_blacklisting.c
===================================================================
--- gnunet/src/transport/test_transport_api_blacklisting.c      2016-04-30 
08:16:14 UTC (rev 37101)
+++ gnunet/src/transport/test_transport_api_blacklisting.c      2016-04-30 
08:17:37 UTC (rev 37102)
@@ -262,12 +262,7 @@
 static void
 sendtask (void *cls)
 {
-  const struct GNUNET_SCHEDULER_TaskContext *tc;
-
   send_task = NULL;
-  tc = GNUNET_SCHEDULER_get_task_context ();
-  if ((tc->reason & GNUNET_SCHEDULER_REASON_SHUTDOWN) != 0)
-    return;
   char *receiver_s = GNUNET_strdup (GNUNET_i2s (&p1->id));
 
   GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,

Modified: gnunet/src/transport/test_transport_api_disconnect.c
===================================================================
--- gnunet/src/transport/test_transport_api_disconnect.c        2016-04-30 
08:16:14 UTC (rev 37101)
+++ gnunet/src/transport/test_transport_api_disconnect.c        2016-04-30 
08:17:37 UTC (rev 37102)
@@ -165,12 +165,6 @@
 static void
 stop_peer (void *cls)
 {
-  const struct GNUNET_SCHEDULER_TaskContext *tc;
-
-  tc = GNUNET_SCHEDULER_get_task_context ();
-  if ((tc->reason & GNUNET_SCHEDULER_REASON_SHUTDOWN) != 0)
-    return;
-
   struct PeerContext *p = cls;
 
   GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Shutting down peer %u (`%s')\n", p->no,
@@ -254,12 +248,7 @@
 static void
 sendtask (void *cls)
 {
-  const struct GNUNET_SCHEDULER_TaskContext *tc;
-
   send_task = NULL;
-  tc = GNUNET_SCHEDULER_get_task_context ();
-  if ((tc->reason & GNUNET_SCHEDULER_REASON_SHUTDOWN) != 0)
-    return;
   char *receiver_s = GNUNET_strdup (GNUNET_i2s (&p1->id));
 
   GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,

Modified: gnunet/src/transport/test_transport_api_http_reverse_peer2.conf
===================================================================
--- gnunet/src/transport/test_transport_api_http_reverse_peer2.conf     
2016-04-30 08:16:14 UTC (rev 37101)
+++ gnunet/src/transport/test_transport_api_http_reverse_peer2.conf     
2016-04-30 08:17:37 UTC (rev 37102)
@@ -10,4 +10,3 @@
 [transport]
 PLUGINS = http_server
 
-

Modified: gnunet/src/transport/test_transport_api_https_peer1.conf
===================================================================
--- gnunet/src/transport/test_transport_api_https_peer1.conf    2016-04-30 
08:16:14 UTC (rev 37101)
+++ gnunet/src/transport/test_transport_api_https_peer1.conf    2016-04-30 
08:17:37 UTC (rev 37102)
@@ -21,5 +21,6 @@
 PORT = 12101
 PLUGINS = https_client
 UNIXPATH = $GNUNET_RUNTIME_DIR/gnunet-p1-service-transport.sock
+#PREFIX = valgrind
 
 

Modified: gnunet/src/transport/test_transport_api_https_peer2.conf
===================================================================
--- gnunet/src/transport/test_transport_api_https_peer2.conf    2016-04-30 
08:16:14 UTC (rev 37101)
+++ gnunet/src/transport/test_transport_api_https_peer2.conf    2016-04-30 
08:17:37 UTC (rev 37102)
@@ -27,5 +27,6 @@
 PORT = 12111
 PLUGINS = https_server
 UNIXPATH = $GNUNET_RUNTIME_DIR/gnunet-p2-service-transport.sock
+#PREFIX = valgrind
 
 

Modified: gnunet/src/transport/test_transport_api_limited_sockets.c
===================================================================
--- gnunet/src/transport/test_transport_api_limited_sockets.c   2016-04-30 
08:16:14 UTC (rev 37101)
+++ gnunet/src/transport/test_transport_api_limited_sockets.c   2016-04-30 
08:17:37 UTC (rev 37102)
@@ -198,13 +198,7 @@
 static void
 sendtask (void *cls)
 {
-  const struct GNUNET_SCHEDULER_TaskContext *tc;
-
   send_task = NULL;
-  tc = GNUNET_SCHEDULER_get_task_context ();
-  if ((tc->reason & GNUNET_SCHEDULER_REASON_SHUTDOWN) != 0)
-    return;
-
   th = GNUNET_TRANSPORT_notify_transmit_ready (p1->th, &p2->id, 256, TIMEOUT,
                                                &notify_ready, &p1);
 }

Modified: gnunet/src/transport/test_transport_api_manipulation_cfg.c
===================================================================
--- gnunet/src/transport/test_transport_api_manipulation_cfg.c  2016-04-30 
08:16:14 UTC (rev 37101)
+++ gnunet/src/transport/test_transport_api_manipulation_cfg.c  2016-04-30 
08:17:37 UTC (rev 37102)
@@ -206,12 +206,7 @@
 static void
 sendtask_request_task (void *cls)
 {
-  const struct GNUNET_SCHEDULER_TaskContext *tc;
-
   send_task = NULL;
-  tc = GNUNET_SCHEDULER_get_task_context ();
-  if ((tc->reason & GNUNET_SCHEDULER_REASON_SHUTDOWN) != 0)
-    return;
   char *receiver_s = GNUNET_strdup (GNUNET_i2s (&p2->id));
 
   GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
@@ -272,12 +267,7 @@
 static void
 sendtask_response_task (void *cls)
 {
-  const struct GNUNET_SCHEDULER_TaskContext *tc;
-
   send_task = NULL;
-  tc = GNUNET_SCHEDULER_get_task_context ();
-  if ((tc->reason & GNUNET_SCHEDULER_REASON_SHUTDOWN) != 0)
-    return;
   {
     char *receiver_s = GNUNET_strdup (GNUNET_i2s (&p1->id));
 

Modified: gnunet/src/transport/test_transport_api_manipulation_recv_tcp.c
===================================================================
--- gnunet/src/transport/test_transport_api_manipulation_recv_tcp.c     
2016-04-30 08:16:14 UTC (rev 37101)
+++ gnunet/src/transport/test_transport_api_manipulation_recv_tcp.c     
2016-04-30 08:17:37 UTC (rev 37102)
@@ -292,12 +292,7 @@
 static void
 sendtask (void *cls)
 {
-  const struct GNUNET_SCHEDULER_TaskContext *tc;
-
   send_task = NULL;
-  tc = GNUNET_SCHEDULER_get_task_context ();
-  if ((tc->reason & GNUNET_SCHEDULER_REASON_SHUTDOWN) != 0)
-    return;
   char *receiver_s = GNUNET_strdup (GNUNET_i2s (&p1->id));
 
   GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,

Modified: gnunet/src/transport/test_transport_api_manipulation_send_tcp.c
===================================================================
--- gnunet/src/transport/test_transport_api_manipulation_send_tcp.c     
2016-04-30 08:16:14 UTC (rev 37101)
+++ gnunet/src/transport/test_transport_api_manipulation_send_tcp.c     
2016-04-30 08:17:37 UTC (rev 37102)
@@ -288,12 +288,8 @@
 {
   struct GNUNET_TIME_Relative delay;
   struct GNUNET_ATS_Properties prop;
-  const struct GNUNET_SCHEDULER_TaskContext *tc;
 
   send_task = NULL;
-  tc = GNUNET_SCHEDULER_get_task_context ();
-  if ((tc->reason & GNUNET_SCHEDULER_REASON_SHUTDOWN) != 0)
-    return;
   char *receiver_s = GNUNET_strdup (GNUNET_i2s (&p1->id));
 
   GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,

Modified: gnunet/src/transport/test_transport_api_monitor_peers.c
===================================================================
--- gnunet/src/transport/test_transport_api_monitor_peers.c     2016-04-30 
08:16:14 UTC (rev 37101)
+++ gnunet/src/transport/test_transport_api_monitor_peers.c     2016-04-30 
08:17:37 UTC (rev 37102)
@@ -262,12 +262,7 @@
 static void
 sendtask (void *cls)
 {
-  const struct GNUNET_SCHEDULER_TaskContext *tc;
-
   send_task = NULL;
-  tc = GNUNET_SCHEDULER_get_task_context ();
-  if ((tc->reason & GNUNET_SCHEDULER_REASON_SHUTDOWN) != 0)
-    return;
   char *receiver_s = GNUNET_strdup (GNUNET_i2s (&p1->id));
 
   GNUNET_log (GNUNET_ERROR_TYPE_INFO,

Modified: gnunet/src/transport/test_transport_api_monitor_validation.c
===================================================================
--- gnunet/src/transport/test_transport_api_monitor_validation.c        
2016-04-30 08:16:14 UTC (rev 37101)
+++ gnunet/src/transport/test_transport_api_monitor_validation.c        
2016-04-30 08:17:37 UTC (rev 37102)
@@ -275,12 +275,7 @@
 static void
 sendtask (void *cls)
 {
-  const struct GNUNET_SCHEDULER_TaskContext *tc;
-
   send_task = NULL;
-  tc = GNUNET_SCHEDULER_get_task_context ();
-  if ((tc->reason & GNUNET_SCHEDULER_REASON_SHUTDOWN) != 0)
-    return;
   char *receiver_s = GNUNET_strdup (GNUNET_i2s (&p1->id));
 
   GNUNET_log (GNUNET_ERROR_TYPE_INFO,

Modified: gnunet/src/transport/test_transport_api_restart_1peer.c
===================================================================
--- gnunet/src/transport/test_transport_api_restart_1peer.c     2016-04-30 
08:16:14 UTC (rev 37101)
+++ gnunet/src/transport/test_transport_api_restart_1peer.c     2016-04-30 
08:17:37 UTC (rev 37102)
@@ -260,12 +260,7 @@
 static void
 sendtask (void *cls)
 {
-  const struct GNUNET_SCHEDULER_TaskContext *tc;
-
   send_task = NULL;
-  tc = GNUNET_SCHEDULER_get_task_context ();
-  if ((tc->reason & GNUNET_SCHEDULER_REASON_SHUTDOWN) != 0)
-    return;
   char *receiver_s = GNUNET_strdup (GNUNET_i2s (&p1->id));
 
   GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,

Modified: gnunet/src/transport/test_transport_api_restart_2peers.c
===================================================================
--- gnunet/src/transport/test_transport_api_restart_2peers.c    2016-04-30 
08:16:14 UTC (rev 37101)
+++ gnunet/src/transport/test_transport_api_restart_2peers.c    2016-04-30 
08:17:37 UTC (rev 37102)
@@ -266,13 +266,7 @@
 static void
 sendtask (void *cls)
 {
-  const struct GNUNET_SCHEDULER_TaskContext *tc;
-
   send_task = NULL;
-  tc = GNUNET_SCHEDULER_get_task_context ();
-  if ((tc->reason & GNUNET_SCHEDULER_REASON_SHUTDOWN) != 0)
-    return;
-
   {
     char *receiver_s = GNUNET_strdup (GNUNET_i2s (&p1->id));
 

Modified: gnunet/src/transport/test_transport_api_timeout.c
===================================================================
--- gnunet/src/transport/test_transport_api_timeout.c   2016-04-30 08:16:14 UTC 
(rev 37101)
+++ gnunet/src/transport/test_transport_api_timeout.c   2016-04-30 08:17:37 UTC 
(rev 37102)
@@ -185,13 +185,8 @@
 timer (void *cls)
 {
   static int percentage;
-  const struct GNUNET_SCHEDULER_TaskContext *tc;
 
   timer_task = NULL;
-  tc = GNUNET_SCHEDULER_get_task_context ();
-  if ((tc->reason & GNUNET_SCHEDULER_REASON_SHUTDOWN) != 0)
-    return;
-
   percentage += 10;
   time_running =
       GNUNET_TIME_relative_add (time_running,
@@ -213,6 +208,7 @@
   }
 }
 
+
 static void
 testing_connect_cb (struct PeerContext *p1, struct PeerContext *p2, void *cls)
 {

Modified: gnunet/src/transport/test_transport_startonly.c
===================================================================
--- gnunet/src/transport/test_transport_startonly.c     2016-04-30 08:16:14 UTC 
(rev 37101)
+++ gnunet/src/transport/test_transport_startonly.c     2016-04-30 08:17:37 UTC 
(rev 37102)
@@ -67,15 +67,9 @@
 static void
 end_badly (void *cls)
 {
-  const struct GNUNET_SCHEDULER_TaskContext *tc;
-
-  tc = GNUNET_SCHEDULER_get_task_context ();
-  GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Fail! Stopping peers\n");
-
+  GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
+             "Fail! Stopping peers\n");
   timeout_task = NULL;
-  if ((tc->reason & GNUNET_SCHEDULER_REASON_SHUTDOWN) != 0)
-    return;
-
   if (p1 != NULL)
     GNUNET_TRANSPORT_TESTING_stop_peer (tth, p1);
   if (NULL != tth)
@@ -83,6 +77,7 @@
   ret = GNUNET_SYSERR;
 }
 
+
 static void
 notify_connect (void *cls, const struct GNUNET_PeerIdentity *peer)
 {
@@ -91,6 +86,7 @@
   connected++;
 }
 
+
 static void
 notify_disconnect (void *cls, const struct GNUNET_PeerIdentity *peer)
 {
@@ -98,6 +94,7 @@
               GNUNET_i2s (peer));
 }
 
+
 static void
 notify_receive (void *cls, const struct GNUNET_PeerIdentity *peer,
                 const struct GNUNET_MessageHeader *message)

Modified: gnunet/src/transport/transport-testing.c
===================================================================
--- gnunet/src/transport/transport-testing.c    2016-04-30 08:16:14 UTC (rev 
37101)
+++ gnunet/src/transport/transport-testing.c    2016-04-30 08:17:37 UTC (rev 
37102)
@@ -220,7 +220,7 @@
 /**
  * Offer the current HELLO of P2 to P1.
  *
- * @param cls our `struct GNUNET_TRANSPORT_TESTING_ConnectRequest `
+ * @param cls our `struct GNUNET_TRANSPORT_TESTING_ConnectRequest`
  */
 static void
 offer_hello (void *cls)
@@ -228,12 +228,8 @@
   struct GNUNET_TRANSPORT_TESTING_ConnectRequest *cc = cls;
   struct PeerContext *p1 = cc->p1;
   struct PeerContext *p2 = cc->p2;
-  const struct GNUNET_SCHEDULER_TaskContext *tc;
 
   cc->tct = NULL;
-  tc = GNUNET_SCHEDULER_get_task_context ();
-  if ((tc->reason & GNUNET_SCHEDULER_REASON_SHUTDOWN) != 0)
-    return;
   {
     char *p2_s = GNUNET_strdup (GNUNET_i2s (&p2->id));
 

Modified: gnunet/src/transport/transport_api.c
===================================================================
--- gnunet/src/transport/transport_api.c        2016-04-30 08:16:14 UTC (rev 
37101)
+++ gnunet/src/transport/transport_api.c        2016-04-30 08:17:37 UTC (rev 
37102)
@@ -1196,15 +1196,8 @@
 reconnect (void *cls)
 {
   struct GNUNET_TRANSPORT_Handle *h = cls;
-  const struct GNUNET_SCHEDULER_TaskContext *tc;
 
   h->reconnect_task = NULL;
-  tc = GNUNET_SCHEDULER_get_task_context ();
-  if (0 != (tc->reason & GNUNET_SCHEDULER_REASON_SHUTDOWN))
-  {
-    /* shutdown, just give up */
-    return;
-  }
   LOG (GNUNET_ERROR_TYPE_DEBUG,
        "Connecting to transport service.\n");
   GNUNET_assert (NULL == h->client);

Modified: gnunet/src/util/bandwidth.c
===================================================================
--- gnunet/src/util/bandwidth.c 2016-04-30 08:16:14 UTC (rev 37101)
+++ gnunet/src/util/bandwidth.c 2016-04-30 08:17:37 UTC (rev 37102)
@@ -149,7 +149,6 @@
   struct GNUNET_BANDWIDTH_Tracker *av = cls;
 
   av->excess_task = NULL;
-
   if (NULL != av->excess_cb)
     av->excess_cb (av->excess_cb_cls);
 }

Modified: gnunet/src/util/client.c
===================================================================
--- gnunet/src/util/client.c    2016-04-30 08:16:14 UTC (rev 37101)
+++ gnunet/src/util/client.c    2016-04-30 08:17:37 UTC (rev 37102)
@@ -578,7 +578,7 @@
 /**
  * Continuation to call the receive callback.
  *
- * @param cls  our handle to the client connection
+ * @param cls our handle to the client connection
  */
 static void
 receive_task (void *cls)
@@ -611,7 +611,8 @@
   GNUNET_assert (GNUNET_YES == client->msg_complete);
   GNUNET_assert (client->received_pos >= msize);
   memcpy (msg, cmsg, msize);
-  memmove (client->received_buf, &client->received_buf[msize],
+  memmove (client->received_buf,
+          &client->received_buf[msize],
            client->received_pos - msize);
   client->received_pos -= msize;
   client->msg_complete = GNUNET_NO;
@@ -655,7 +656,8 @@
        (GNUNET_SYSERR == client->in_receive) )
   {
     GNUNET_assert (NULL == client->receive_task);
-    client->receive_task = GNUNET_SCHEDULER_add_now (&receive_task, client);
+    client->receive_task = GNUNET_SCHEDULER_add_now (&receive_task,
+                                                    client);
     return;
   }
   LOG (GNUNET_ERROR_TYPE_DEBUG,
@@ -703,7 +705,7 @@
   /**
    * ID of task used for asynchronous operations.
    */
-  struct GNUNET_SCHEDULER_Task * task;
+  struct GNUNET_SCHEDULER_Task *task;
 
   /**
    * Final result to report back (once known).
@@ -1081,19 +1083,9 @@
 client_delayed_retry (void *cls)
 {
   struct GNUNET_CLIENT_TransmitHandle *th = cls;
-  const struct GNUNET_SCHEDULER_TaskContext *tc;
   struct GNUNET_TIME_Relative delay;
 
   th->reconnect_task = NULL;
-  tc = GNUNET_SCHEDULER_get_task_context ();
-  if (0 != (tc->reason & GNUNET_SCHEDULER_REASON_SHUTDOWN))
-  {
-    /* give up, was shutdown */
-    th->client->th = NULL;
-    th->notify (th->notify_cls, 0, NULL);
-    GNUNET_free (th);
-    return;
-  }
   th->client->connection =
     do_connect (th->client->service_name,
                th->client->cfg,
@@ -1112,13 +1104,16 @@
     GNUNET_assert (NULL == th->th);
     GNUNET_assert (NULL == th->reconnect_task);
     th->reconnect_task =
-        GNUNET_SCHEDULER_add_delayed (delay, &client_delayed_retry, th);
+        GNUNET_SCHEDULER_add_delayed (delay,
+                                     &client_delayed_retry,
+                                     th);
     return;
   }
   th->th =
       GNUNET_CONNECTION_notify_transmit_ready (th->client->connection, 
th->size,
                                                
GNUNET_TIME_absolute_get_remaining
-                                               (th->timeout), &client_notify,
+                                               (th->timeout),
+                                              &client_notify,
                                                th);
   if (NULL == th->th)
   {
@@ -1149,14 +1144,11 @@
   struct GNUNET_CLIENT_Connection *client = th->client;
   size_t ret;
   struct GNUNET_TIME_Relative delay;
-  const struct GNUNET_SCHEDULER_TaskContext *tc;
 
-
   LOG (GNUNET_ERROR_TYPE_DEBUG,
        "client_notify is running\n");
   th->th = NULL;
   client->th = NULL;
-  tc = GNUNET_SCHEDULER_get_task_context ();
   if (NULL == buf)
   {
     delay = GNUNET_TIME_absolute_get_remaining (th->timeout);
@@ -1163,8 +1155,7 @@
     delay.rel_value_us /= 2;
     if ( (GNUNET_YES != th->auto_retry) ||
          (0 == --th->attempts_left) ||
-         (delay.rel_value_us < 1)||
-         (0 != (tc->reason & GNUNET_SCHEDULER_REASON_SHUTDOWN)))
+         (delay.rel_value_us < 1) )
     {
       LOG (GNUNET_ERROR_TYPE_DEBUG,
            "Transmission failed %u times, giving up.\n",
@@ -1198,7 +1189,9 @@
     GNUNET_assert (NULL == th->reconnect_task);
     GNUNET_assert (NULL == th->th);
     th->reconnect_task =
-        GNUNET_SCHEDULER_add_delayed (delay, &client_delayed_retry, th);
+        GNUNET_SCHEDULER_add_delayed (delay,
+                                     &client_delayed_retry,
+                                     th);
     return 0;
   }
   GNUNET_assert (size >= th->size);

Modified: gnunet/src/util/client_manager.c
===================================================================
--- gnunet/src/util/client_manager.c    2016-04-30 08:16:14 UTC (rev 37101)
+++ gnunet/src/util/client_manager.c    2016-04-30 08:17:37 UTC (rev 37102)
@@ -243,8 +243,10 @@
 schedule_disconnect (void *cls)
 {
   struct GNUNET_CLIENT_MANAGER_Connection *mgr = cls;
+
   GNUNET_CLIENT_MANAGER_disconnect (mgr, GNUNET_NO,
-                                    mgr->disconnect_cb, mgr->disconnect_cls);
+                                    mgr->disconnect_cb,
+                                   mgr->disconnect_cls);
 }
 
 
@@ -263,9 +265,10 @@
 static size_t
 send_next_message (void *cls, size_t buf_size, void *buf)
 {
-  LOG (GNUNET_ERROR_TYPE_DEBUG, "send_next_message()\n");
   struct GNUNET_CLIENT_MANAGER_Connection *mgr = cls;
 
+  LOG (GNUNET_ERROR_TYPE_DEBUG,
+       "send_next_message()\n");
   if (NULL == buf)
   {
     /* disconnected */
@@ -282,7 +285,9 @@
   GNUNET_assert (size <= buf_size);
   memcpy (buf, mqi->msg, size);
 
-  GNUNET_CONTAINER_DLL_remove (mgr->tmit_head, mgr->tmit_tail, mqi);
+  GNUNET_CONTAINER_DLL_remove (mgr->tmit_head,
+                              mgr->tmit_tail,
+                              mqi);
   GNUNET_free (mqi->msg);
   GNUNET_free (mqi);
 
@@ -292,7 +297,7 @@
   }
   else if (GNUNET_YES == mgr->is_disconnecting)
   {
-    GNUNET_SCHEDULER_add_now (&schedule_disconnect, mgr);
+    (void) GNUNET_SCHEDULER_add_now (&schedule_disconnect, mgr);
     return size;
   }
 
@@ -322,7 +327,8 @@
   {
     if (GNUNET_YES == mgr->is_disconnecting)
       GNUNET_CLIENT_MANAGER_disconnect (mgr, GNUNET_NO,
-                                        mgr->disconnect_cb, 
mgr->disconnect_cls);
+                                        mgr->disconnect_cb,
+                                       mgr->disconnect_cls);
     return;
   }
 
@@ -346,14 +352,15 @@
 schedule_reconnect (void *cls)
 {
   struct GNUNET_CLIENT_MANAGER_Connection *mgr = cls;
+
   mgr->reconnect_task = NULL;
-
   LOG (GNUNET_ERROR_TYPE_DEBUG,
-       "Connecting to %s service.\n", mgr->service_name);
+       "Connecting to %s service.\n",
+       mgr->service_name);
   GNUNET_assert (NULL == mgr->client);
-  mgr->client = GNUNET_CLIENT_connect (mgr->service_name, mgr->cfg);
+  mgr->client = GNUNET_CLIENT_connect (mgr->service_name,
+                                      mgr->cfg);
   GNUNET_assert (NULL != mgr->client);
-
   transmit_next (mgr);
 }
 
@@ -373,16 +380,17 @@
 struct GNUNET_CLIENT_MANAGER_Connection *
 GNUNET_CLIENT_MANAGER_connect (const struct GNUNET_CONFIGURATION_Handle *cfg,
                                const char *service_name,
-                               const struct
-                               GNUNET_CLIENT_MANAGER_MessageHandler *handlers)
+                               const struct 
GNUNET_CLIENT_MANAGER_MessageHandler *handlers)
 {
-  struct GNUNET_CLIENT_MANAGER_Connection *
-    mgr = GNUNET_malloc (sizeof (*mgr));
+  struct GNUNET_CLIENT_MANAGER_Connection *mgr;
+  
+  mgr = GNUNET_new (struct GNUNET_CLIENT_MANAGER_Connection);
   mgr->cfg = cfg;
   mgr->service_name = service_name;
   mgr->handlers = handlers;
   mgr->reconnect_delay = GNUNET_TIME_UNIT_ZERO;
-  mgr->reconnect_task = GNUNET_SCHEDULER_add_now (&schedule_reconnect, mgr);
+  mgr->reconnect_task = GNUNET_SCHEDULER_add_now (&schedule_reconnect,
+                                                 mgr);
   return mgr;
 }
 
@@ -405,7 +413,9 @@
                                   GNUNET_ContinuationCallback disconnect_cb,
                                   void *cls)
 {
-  LOG (GNUNET_ERROR_TYPE_DEBUG, "Disconnecting (%d)\n", transmit_queue);
+  LOG (GNUNET_ERROR_TYPE_DEBUG,
+       "Disconnecting (%d)\n",
+       transmit_queue);
   mgr->disconnect_cb = disconnect_cb;
   mgr->disconnect_cls = cls;
   if (NULL != mgr->tmit_head)
@@ -424,7 +434,7 @@
       GNUNET_CLIENT_MANAGER_drop_queue (mgr);
     }
   }
-  if (mgr->reconnect_task != NULL)
+  if (NULL != mgr->reconnect_task)
   {
     GNUNET_SCHEDULER_cancel (mgr->reconnect_task);
     mgr->reconnect_task = NULL;
@@ -473,7 +483,9 @@
        "Scheduling task to reconnect to service in %s.\n",
        GNUNET_STRINGS_relative_time_to_string (mgr->reconnect_delay, 
GNUNET_YES));
   mgr->reconnect_task =
-    GNUNET_SCHEDULER_add_delayed (mgr->reconnect_delay, &schedule_reconnect, 
mgr);
+    GNUNET_SCHEDULER_add_delayed (mgr->reconnect_delay,
+                                 &schedule_reconnect,
+                                 mgr);
   mgr->reconnect_delay = GNUNET_TIME_STD_BACKOFF (mgr->reconnect_delay);
 }
 
@@ -491,9 +503,13 @@
 GNUNET_CLIENT_MANAGER_transmit (struct GNUNET_CLIENT_MANAGER_Connection *mgr,
                                 struct GNUNET_MessageHeader *msg)
 {
-  struct MessageQueueItem *mqi = GNUNET_malloc (sizeof (*mqi));
+  struct MessageQueueItem *mqi;
+
+  mqi = GNUNET_new (struct MessageQueueItem);
   mqi->msg = GNUNET_copy_message (msg);
-  GNUNET_CONTAINER_DLL_insert_tail (mgr->tmit_head, mgr->tmit_tail, mqi);
+  GNUNET_CONTAINER_DLL_insert_tail (mgr->tmit_head,
+                                   mgr->tmit_tail,
+                                   mqi);
   transmit_next (mgr);
 }
 
@@ -511,9 +527,13 @@
 GNUNET_CLIENT_MANAGER_transmit_now (struct GNUNET_CLIENT_MANAGER_Connection 
*mgr,
                                     struct GNUNET_MessageHeader *msg)
 {
-  struct MessageQueueItem *mqi = GNUNET_malloc (sizeof (*mqi));
+  struct MessageQueueItem *mqi;
+
+  mqi = GNUNET_new (struct MessageQueueItem);
   mqi->msg = GNUNET_copy_message (msg);
-  GNUNET_CONTAINER_DLL_insert (mgr->tmit_head, mgr->tmit_tail, mqi);
+  GNUNET_CONTAINER_DLL_insert (mgr->tmit_head,
+                              mgr->tmit_tail,
+                              mqi);
   transmit_next (mgr);
 }
 
@@ -527,7 +547,10 @@
 void
 GNUNET_CLIENT_MANAGER_drop_queue (struct GNUNET_CLIENT_MANAGER_Connection *mgr)
 {
-  struct MessageQueueItem *cur, *next = mgr->tmit_head;
+  struct MessageQueueItem *cur;
+  struct MessageQueueItem *next;
+
+  next = mgr->tmit_head;
   while (NULL != next)
   {
     cur = next;
@@ -629,15 +652,14 @@
  * @return Operation, or NULL if not found.
  */
 static struct OperationListItem *
-op_find (struct GNUNET_CLIENT_MANAGER_Connection *mgr, uint64_t op_id)
+op_find (struct GNUNET_CLIENT_MANAGER_Connection *mgr,
+        uint64_t op_id)
 {
-  struct OperationListItem *op = mgr->op_head;
-  while (NULL != op)
-  {
+  struct OperationListItem *op;
+
+  for (op = mgr->op_head; NULL != op; op = op->next)
     if (op->op_id == op_id)
       return op;
-    op = op->next;
-  }
   return NULL;
 }
 
@@ -691,17 +713,21 @@
                               GNUNET_ResultCallback result_cb,
                               void *cls)
 {
+  struct OperationListItem *op;
+
   if (NULL == result_cb)
     return 0;
-
-  struct OperationListItem *op = GNUNET_malloc (sizeof (*op));
+  op = GNUNET_new (struct OperationListItem);
   op->op_id = GNUNET_CLIENT_MANAGER_op_get_next_id (mgr);
   op->result_cb = result_cb;
   op->cls = cls;
-  GNUNET_CONTAINER_DLL_insert_tail (mgr->op_head, mgr->op_tail, op);
-
+  GNUNET_CONTAINER_DLL_insert_tail (mgr->op_head,
+                                   mgr->op_tail,
+                                   op);
   LOG (GNUNET_ERROR_TYPE_DEBUG,
-       "%p Added operation #%" PRIu64 "\n", mgr, op->op_id);
+       "%p Added operation #%" PRIu64 "\n",
+       mgr,
+       op->op_id);
   return op->op_id;
 }
 
@@ -730,8 +756,11 @@
  */
 static int
 op_result (struct GNUNET_CLIENT_MANAGER_Connection *mgr,
-           uint64_t op_id, int64_t result_code,
-           const void *data, uint16_t data_size, uint8_t cancel)
+           uint64_t op_id,
+          int64_t result_code,
+           const void *data,
+          uint16_t data_size,
+          uint8_t cancel)
 {
   if (0 == op_id)
     return GNUNET_NO;
@@ -744,11 +773,15 @@
     return GNUNET_NO;
   }
 
-  GNUNET_CONTAINER_DLL_remove (mgr->op_head, mgr->op_tail, op);
+  GNUNET_CONTAINER_DLL_remove (mgr->op_head,
+                              mgr->op_tail,
+                              op);
 
-  if (GNUNET_YES != cancel && NULL != op->result_cb)
-    op->result_cb (op->cls, result_code, data, data_size);
-
+  if ( (GNUNET_YES != cancel) &&
+       (NULL != op->result_cb) )
+    op->result_cb (op->cls,
+                  result_code, data,
+                  data_size);
   GNUNET_free (op);
   return GNUNET_YES;
 }
@@ -773,8 +806,10 @@
  */
 int
 GNUNET_CLIENT_MANAGER_op_result (struct GNUNET_CLIENT_MANAGER_Connection *mgr,
-                                 uint64_t op_id, int64_t result_code,
-                                 const void *data, uint16_t data_size)
+                                 uint64_t op_id,
+                                int64_t result_code,
+                                 const void *data,
+                                uint16_t data_size)
 {
   LOG (GNUNET_ERROR_TYPE_DEBUG,
        "%p Received result for operation #%" PRIu64 ": %" PRId64 " (size: 
%u)\n",
@@ -799,6 +834,8 @@
                                  uint64_t op_id)
 {
   LOG (GNUNET_ERROR_TYPE_DEBUG,
-       "%p Cancelling operation #%" PRIu64  "\n", mgr, op_id);
+       "%p Cancelling operation #%" PRIu64  "\n",
+       mgr,
+       op_id);
   return op_result (mgr, op_id, 0, NULL, 0, GNUNET_YES);
 }

Modified: gnunet/src/util/connection.c
===================================================================
--- gnunet/src/util/connection.c        2016-04-30 08:16:14 UTC (rev 37101)
+++ gnunet/src/util/connection.c        2016-04-30 08:17:37 UTC (rev 37102)
@@ -217,7 +217,7 @@
   struct GNUNET_RESOLVER_RequestHandle *dns_active;
 
   /**
-   * The handle we return for GNUNET_CONNECTION_notify_transmit_ready.
+   * The handle we return for #GNUNET_CONNECTION_notify_transmit_ready().
    */
   struct GNUNET_CONNECTION_TransmitHandle nth;
 
@@ -344,7 +344,9 @@
 
   addrlen = sizeof (addr);
   sock =
-      GNUNET_NETWORK_socket_accept (lsock, (struct sockaddr *) &addr, 
&addrlen);
+      GNUNET_NETWORK_socket_accept (lsock,
+                                   (struct sockaddr *) &addr,
+                                   &addrlen);
   if (NULL == sock)
   {
     if (EAGAIN != errno)
@@ -360,7 +362,8 @@
 
   sa = (struct sockaddr *) addr;
   v6 = (struct sockaddr_in6 *) addr;
-  if ((AF_INET6 == sa->sa_family) && (IN6_IS_ADDR_V4MAPPED (&v6->sin6_addr)))
+  if ( (AF_INET6 == sa->sa_family) &&
+       (IN6_IS_ADDR_V4MAPPED (&v6->sin6_addr)) )
   {
     /* convert to V4 address */
     v4 = GNUNET_new (struct sockaddr_in);
@@ -389,15 +392,21 @@
   {
 #if HAVE_GETPEEREID
     /* most BSDs */
-    if (0 == getpeereid (GNUNET_NETWORK_get_fd (sock), &gc.uid, &gc.gid))
+    if (0 == getpeereid (GNUNET_NETWORK_get_fd (sock),
+                        &gc.uid,
+                        &gc.gid))
       gcp = &gc;
 #else
 #ifdef SO_PEERCRED
     /* largely traditional GNU/Linux */
     olen = sizeof (uc);
-    if ((0 ==
-         getsockopt (GNUNET_NETWORK_get_fd (sock), SOL_SOCKET, SO_PEERCRED, 
&uc,
-                     &olen)) && (olen == sizeof (uc)))
+    if ( (0 ==
+         getsockopt (GNUNET_NETWORK_get_fd (sock),
+                     SOL_SOCKET,
+                     SO_PEERCRED,
+                     &uc,
+                     &olen)) &&
+        (olen == sizeof (uc)) )
     {
       gc.uid = uc.uid;
       gc.gid = uc.gid;
@@ -421,8 +430,11 @@
 #endif
   }
 
-  if ((NULL != access_cb) &&
-      (GNUNET_YES != (aret = access_cb (access_cb_cls, gcp, uaddr, addrlen))))
+  if ( (NULL != access_cb) &&
+       (GNUNET_YES != (aret = access_cb (access_cb_cls,
+                                        gcp,
+                                        uaddr,
+                                        addrlen))) )
   {
     if (GNUNET_NO == aret)
       LOG (GNUNET_ERROR_TYPE_INFO,
@@ -444,7 +456,9 @@
   connection->sock = sock;
   LOG (GNUNET_ERROR_TYPE_INFO,
        _("Accepting connection from `%s': %p\n"),
-       GNUNET_a2s (uaddr, addrlen), connection);
+       GNUNET_a2s (uaddr,
+                  addrlen),
+       connection);
   return connection;
 }
 
@@ -554,7 +568,9 @@
     return;                     /* nobody to tell about it */
   notify = connection->nth.notify_ready;
   connection->nth.notify_ready = NULL;
-  notify (connection->nth.notify_ready_cls, 0, NULL);
+  notify (connection->nth.notify_ready_cls,
+         0,
+         NULL);
 }
 
 
@@ -631,7 +647,8 @@
 {
   LOG (GNUNET_ERROR_TYPE_DEBUG,
        "Connection to `%s' succeeded! (%p)\n",
-       GNUNET_a2s (connection->addr, connection->addrlen),
+       GNUNET_a2s (connection->addr,
+                  connection->addrlen),
        connection);
   /* trigger jobs that waited for the connection */
   if (NULL != connection->receiver)
@@ -642,7 +659,8 @@
     GNUNET_assert (NULL == connection->read_task);
     connection->read_task =
       GNUNET_SCHEDULER_add_read_net (GNUNET_TIME_absolute_get_remaining
-                                     (connection->receive_timeout), 
connection->sock,
+                                     (connection->receive_timeout),
+                                    connection->sock,
                                      &receive_ready, connection);
   }
   if (NULL != connection->nth.notify_ready)
@@ -679,21 +697,28 @@
   socklen_t len;
 
   GNUNET_assert (NULL != ap->sock);
-  GNUNET_CONTAINER_DLL_remove (connection->ap_head, connection->ap_tail, ap);
+  GNUNET_CONTAINER_DLL_remove (connection->ap_head,
+                              connection->ap_tail,
+                              ap);
   len = sizeof (error);
   errno = 0;
   error = 0;
   tc = GNUNET_SCHEDULER_get_task_context ();
-  if ((0 == (tc->reason & GNUNET_SCHEDULER_REASON_WRITE_READY)) ||
-      (GNUNET_OK !=
-       GNUNET_NETWORK_socket_getsockopt (ap->sock, SOL_SOCKET, SO_ERROR, 
&error,
-                                         &len)) || (0 != error))
+  if ( (0 == (tc->reason & GNUNET_SCHEDULER_REASON_WRITE_READY)) ||
+       (GNUNET_OK !=
+       GNUNET_NETWORK_socket_getsockopt (ap->sock,
+                                         SOL_SOCKET,
+                                         SO_ERROR,
+                                         &error,
+                                         &len)) ||
+       (0 != error) )
   {
-    GNUNET_break (GNUNET_OK == GNUNET_NETWORK_socket_close (ap->sock));
+    GNUNET_break (GNUNET_OK ==
+                 GNUNET_NETWORK_socket_close (ap->sock));
     GNUNET_free (ap);
-    if ((NULL == connection->ap_head) &&
-        (GNUNET_NO == connection->dns_active) &&
-        (NULL == connection->proxy_handshake))
+    if ( (NULL == connection->ap_head) &&
+        (GNUNET_NO == connection->dns_active) &&
+        (NULL == connection->proxy_handshake) )
       connect_fail_continuation (connection);
     return;
   }
@@ -709,7 +734,9 @@
   {
     GNUNET_break (GNUNET_OK == GNUNET_NETWORK_socket_close (pos->sock));
     GNUNET_SCHEDULER_cancel (pos->task);
-    GNUNET_CONTAINER_DLL_remove (connection->ap_head, connection->ap_tail, 
pos);
+    GNUNET_CONTAINER_DLL_remove (connection->ap_head,
+                                connection->ap_tail,
+                                pos);
     GNUNET_free (pos);
   }
   connect_success_continuation (connection);
@@ -771,7 +798,8 @@
     GNUNET_free (ap);
     return;                     /* not supported by us */
   }
-  ap->sock = GNUNET_NETWORK_socket_create (ap->addr->sa_family, SOCK_STREAM, 
0);
+  ap->sock = GNUNET_NETWORK_socket_create (ap->addr->sa_family,
+                                          SOCK_STREAM, 0);
   if (NULL == ap->sock)
   {
     GNUNET_free (ap);
@@ -782,7 +810,9 @@
        GNUNET_a2s (ap->addr, ap->addrlen),
        connection);
   if ((GNUNET_OK !=
-       GNUNET_NETWORK_socket_connect (ap->sock, ap->addr, ap->addrlen)) &&
+       GNUNET_NETWORK_socket_connect (ap->sock,
+                                     ap->addr,
+                                     ap->addrlen)) &&
       (EINPROGRESS != errno))
   {
     /* maybe refused / unsupported address, try next */
@@ -794,17 +824,15 @@
   GNUNET_CONTAINER_DLL_insert (connection->ap_head, connection->ap_tail, ap);
   delay = GNUNET_CONNECTION_CONNECT_RETRY_TIMEOUT;
   if (NULL != connection->nth.notify_ready)
-    delay =
-        GNUNET_TIME_relative_min (delay,
-                                  GNUNET_TIME_absolute_get_remaining 
(connection->nth.transmit_timeout));
+    delay = GNUNET_TIME_relative_min (delay,
+                                     GNUNET_TIME_absolute_get_remaining 
(connection->nth.transmit_timeout));
   if (NULL != connection->receiver)
-    delay =
-        GNUNET_TIME_relative_min (delay,
-                                  GNUNET_TIME_absolute_get_remaining
-                                  (connection->receive_timeout));
-  ap->task =
-      GNUNET_SCHEDULER_add_write_net (delay, ap->sock,
-                                      &connect_probe_continuation, ap);
+    delay = GNUNET_TIME_relative_min (delay,
+                                     GNUNET_TIME_absolute_get_remaining 
(connection->receive_timeout));
+  ap->task = GNUNET_SCHEDULER_add_write_net (delay,
+                                            ap->sock,
+                                            &connect_probe_continuation,
+                                            ap);
 }
 
 
@@ -833,9 +861,11 @@
   connection->port = port;
   connection->hostname = GNUNET_strdup (hostname);
   connection->dns_active =
-      GNUNET_RESOLVER_ip_get (connection->hostname, AF_UNSPEC,
+      GNUNET_RESOLVER_ip_get (connection->hostname,
+                             AF_UNSPEC,
                               GNUNET_CONNECTION_CONNECT_RETRY_TIMEOUT,
-                              &try_connect_using_address, connection);
+                              &try_connect_using_address,
+                             connection);
   return connection;
 }
 
@@ -865,7 +895,8 @@
   {
     int abstract;
 
-    abstract = GNUNET_CONFIGURATION_get_value_yesno (cfg, "TESTING",
+    abstract = GNUNET_CONFIGURATION_get_value_yesno (cfg,
+                                                    "TESTING",
                                                      "USE_ABSTRACT_SOCKETS");
     if (GNUNET_YES == abstract)
       un->sun_path[0] = '\0';
@@ -882,7 +913,9 @@
   connection->hostname = NULL;
   connection->addr = (struct sockaddr *) un;
   connection->addrlen = sizeof (struct sockaddr_un);
-  connection->sock = GNUNET_NETWORK_socket_create (AF_UNIX, SOCK_STREAM, 0);
+  connection->sock = GNUNET_NETWORK_socket_create (AF_UNIX,
+                                                  SOCK_STREAM,
+                                                  0);
   if (NULL == connection->sock)
   {
     GNUNET_free (connection->addr);
@@ -891,11 +924,14 @@
     return NULL;
   }
   if ( (GNUNET_OK !=
-       GNUNET_NETWORK_socket_connect (connection->sock, connection->addr, 
connection->addrlen)) &&
+       GNUNET_NETWORK_socket_connect (connection->sock,
+                                      connection->addr,
+                                      connection->addrlen)) &&
        (EINPROGRESS != errno) )
   {
     /* Just return; we expect everything to work eventually so don't fail HARD 
*/
-    GNUNET_break (GNUNET_OK == GNUNET_NETWORK_socket_close (connection->sock));
+    GNUNET_break (GNUNET_OK ==
+                 GNUNET_NETWORK_socket_close (connection->sock));
     connection->sock = NULL;
     return connection;
   }
@@ -971,10 +1007,13 @@
   s = GNUNET_NETWORK_socket_create (af_family, SOCK_STREAM, 0);
   if (NULL == s)
   {
-    LOG_STRERROR (GNUNET_ERROR_TYPE_WARNING | GNUNET_ERROR_TYPE_BULK, 
"socket");
+    LOG_STRERROR (GNUNET_ERROR_TYPE_WARNING | GNUNET_ERROR_TYPE_BULK,
+                 "socket");
     return NULL;
   }
-  return GNUNET_CONNECTION_connect_socket (s, serv_addr, addrlen);
+  return GNUNET_CONNECTION_connect_socket (s,
+                                          serv_addr, 
+                                          addrlen);
 }
 
 
@@ -1054,7 +1093,9 @@
   {
     GNUNET_break (GNUNET_OK == GNUNET_NETWORK_socket_close (pos->sock));
     GNUNET_SCHEDULER_cancel (pos->task);
-    GNUNET_CONTAINER_DLL_remove (connection->ap_head, connection->ap_tail, 
pos);
+    GNUNET_CONTAINER_DLL_remove (connection->ap_head,
+                                connection->ap_tail,
+                                pos);
     GNUNET_free (pos);
   }
   if ( (NULL != connection->sock) &&
@@ -1105,21 +1146,14 @@
 
   connection->read_task = NULL;
   tc = GNUNET_SCHEDULER_get_task_context ();
-  if (0 != (tc->reason & GNUNET_SCHEDULER_REASON_SHUTDOWN))
-  {
-    /* ignore shutdown request, go again immediately */
-    connection->read_task =
-        GNUNET_SCHEDULER_add_read_net (GNUNET_TIME_absolute_get_remaining
-                                       (connection->receive_timeout), 
connection->sock,
-                                       &receive_ready, connection);
-    return;
-  }
   if (0 != (tc->reason & GNUNET_SCHEDULER_REASON_TIMEOUT))
   {
     LOG (GNUNET_ERROR_TYPE_DEBUG,
         "Receive from `%s' encounters error: timeout (%s, %p)\n",
-        GNUNET_a2s (connection->addr, connection->addrlen),
-        GNUNET_STRINGS_relative_time_to_string 
(GNUNET_TIME_absolute_get_duration (connection->receive_timeout), GNUNET_YES),
+        GNUNET_a2s (connection->addr,
+                    connection->addrlen),
+        GNUNET_STRINGS_relative_time_to_string 
(GNUNET_TIME_absolute_get_duration (connection->receive_timeout),
+                                                GNUNET_YES),
         connection);
     signal_receive_timeout (connection);
     return;
@@ -1130,7 +1164,8 @@
     signal_receive_error (connection, ECONNREFUSED);
     return;
   }
-  GNUNET_assert (GNUNET_NETWORK_fdset_isset (tc->read_ready, 
connection->sock));
+  GNUNET_assert (GNUNET_NETWORK_fdset_isset (tc->read_ready,
+                                            connection->sock));
 RETRY:
   ret = GNUNET_NETWORK_socket_recv (connection->sock,
                                     buffer,
@@ -1161,8 +1196,8 @@
 
 
 /**
- * Receive data from the given connection.  Note that this function will
- * call @a receiver asynchronously using the scheduler.  It will
+ * Receive data from the given connection.  Note that this function
+ * will call @a receiver asynchronously using the scheduler.  It will
  * "immediately" return.  Note that there MUST only be one active
  * receive call per connection at any given point in time (so do not
  * call receive again until the receiver callback has been invoked).
@@ -1202,7 +1237,10 @@
       (NULL == connection->proxy_handshake))
   {
     connection->receiver = NULL;
-    receiver (receiver_cls, NULL, 0, NULL, 0, ETIMEDOUT);
+    receiver (receiver_cls,
+             NULL, 0,
+             NULL, 0,
+             ETIMEDOUT);
     return;
   }
 }
@@ -1312,7 +1350,9 @@
   notify = connection->nth.notify_ready;
   GNUNET_assert (NULL != notify);
   connection->nth.notify_ready = NULL;
-  notify (connection->nth.notify_ready_cls, 0, NULL);
+  notify (connection->nth.notify_ready_cls,
+         0,
+         NULL);
 }
 
 
@@ -1339,7 +1379,9 @@
   connection->write_task = NULL;
   notify = connection->nth.notify_ready;
   connection->nth.notify_ready = NULL;
-  notify (connection->nth.notify_ready_cls, 0, NULL);
+  notify (connection->nth.notify_ready_cls,
+         0,
+         NULL);
 }
 
 
@@ -1364,21 +1406,6 @@
   connection->write_task = NULL;
   GNUNET_assert (NULL == connection->nth.timeout_task);
   tc = GNUNET_SCHEDULER_get_task_context ();
-  if (0 != (tc->reason & GNUNET_SCHEDULER_REASON_SHUTDOWN))
-  {
-    if (NULL != connection->sock)
-      goto SCHEDULE_WRITE;      /* ignore shutdown, go again immediately */
-    LOG (GNUNET_ERROR_TYPE_DEBUG,
-         "Transmit to `%s' fails, shutdown happened (%p).\n",
-         GNUNET_a2s (connection->addr, connection->addrlen), connection);
-    notify = connection->nth.notify_ready;
-    if (NULL != notify)
-    {
-      connection->nth.notify_ready = NULL;
-      notify (connection->nth.notify_ready_cls, 0, NULL);
-    }
-    return;
-  }
   if (0 != (tc->reason & GNUNET_SCHEDULER_REASON_TIMEOUT))
   {
     LOG (GNUNET_ERROR_TYPE_DEBUG,
@@ -1400,7 +1427,8 @@
      * Hence retry.  */
     goto SCHEDULE_WRITE;
   }
-  if (!GNUNET_NETWORK_fdset_isset (tc->write_ready, connection->sock))
+  if (! GNUNET_NETWORK_fdset_isset (tc->write_ready,
+                                   connection->sock))
   {
     GNUNET_assert (NULL == connection->write_task);
     /* special circumstances (in particular, shutdown): not yet ready
@@ -1444,7 +1472,11 @@
   }
   LOG (GNUNET_ERROR_TYPE_DEBUG,
        "Connection transmitted %u/%u bytes to `%s' (%p)\n",
-       (unsigned int) ret, have, GNUNET_a2s (connection->addr, 
connection->addrlen), connection);
+       (unsigned int) ret,
+       have,
+       GNUNET_a2s (connection->addr,
+                  connection->addrlen),
+       connection);
   connection->write_buffer_pos += ret;
   if (connection->write_buffer_pos == connection->write_buffer_off)
   {
@@ -1452,14 +1484,17 @@
     connection->write_buffer_pos = 0;
     connection->write_buffer_off = 0;
   }
-  if ((0 == connection->write_buffer_off) && (NULL == 
connection->nth.notify_ready))
+  if ( (0 == connection->write_buffer_off) &&
+       (NULL == connection->nth.notify_ready) )
     return;                     /* all data sent! */
   /* not done writing, schedule more */
 SCHEDULE_WRITE:
   LOG (GNUNET_ERROR_TYPE_DEBUG,
-       "Re-scheduling transmit_ready (more to do) (%p).\n", connection);
+       "Re-scheduling transmit_ready (more to do) (%p).\n",
+       connection);
   have = connection->write_buffer_off - connection->write_buffer_pos;
-  GNUNET_assert ((NULL != connection->nth.notify_ready) || (have > 0));
+  GNUNET_assert ( (NULL != connection->nth.notify_ready) ||
+                 (have > 0) );
   if (NULL == connection->write_task)
     connection->write_task =
         GNUNET_SCHEDULER_add_write_net ((connection->nth.notify_ready ==
@@ -1466,7 +1501,8 @@
                                          NULL) ? GNUNET_TIME_UNIT_FOREVER_REL :
                                         GNUNET_TIME_absolute_get_remaining
                                         (connection->nth.transmit_timeout),
-                                        connection->sock, &transmit_ready, 
connection);
+                                        connection->sock,
+                                       &transmit_ready, connection);
 }
 
 
@@ -1488,8 +1524,8 @@
 GNUNET_CONNECTION_notify_transmit_ready (struct GNUNET_CONNECTION_Handle 
*connection,
                                          size_t size,
                                          struct GNUNET_TIME_Relative timeout,
-                                         GNUNET_CONNECTION_TransmitReadyNotify
-                                         notify, void *notify_cls)
+                                         GNUNET_CONNECTION_TransmitReadyNotify 
notify,
+                                        void *notify_cls)
 {
   if (NULL != connection->nth.notify_ready)
   {
@@ -1529,7 +1565,8 @@
     connection->write_task =
         GNUNET_SCHEDULER_add_write_net (GNUNET_TIME_absolute_get_remaining
                                         (connection->nth.transmit_timeout),
-                                        connection->sock, &transmit_ready, 
connection);
+                                        connection->sock,
+                                       &transmit_ready, connection);
     return &connection->nth;
   }
   /* not yet connected, wait for connection */
@@ -1538,7 +1575,8 @@
        connection);
   connection->nth.timeout_task =
     GNUNET_SCHEDULER_add_delayed (timeout,
-                                  &transmit_timeout, connection);
+                                  &transmit_timeout,
+                                 connection);
   return &connection->nth;
 }
 
@@ -1575,7 +1613,8 @@
 struct GNUNET_CONNECTION_Handle *
 GNUNET_CONNECTION_create_proxied_from_handshake (struct 
GNUNET_CONNECTION_Handle *cph)
 {
-  struct GNUNET_CONNECTION_Handle * proxied = 
GNUNET_CONNECTION_create_from_existing(NULL);
+  struct GNUNET_CONNECTION_Handle *proxied = 
GNUNET_CONNECTION_create_from_existing (NULL);
+
   proxied->proxy_handshake = cph;
   return proxied;
 }
@@ -1592,11 +1631,12 @@
 GNUNET_CONNECTION_acivate_proxied (struct GNUNET_CONNECTION_Handle *proxied)
 {
   struct GNUNET_CONNECTION_Handle *cph = proxied->proxy_handshake;
+
   GNUNET_assert (NULL != cph);
   GNUNET_assert (NULL == proxied->sock);
   GNUNET_assert (NULL != cph->sock);
-  proxied->sock=cph->sock;
-  cph->sock=NULL;
+  proxied->sock = cph->sock;
+  cph->sock = NULL;
   GNUNET_CONNECTION_destroy (cph);
   connect_success_continuation (proxied);
 }

Modified: gnunet/src/util/crypto_hash_file.c
===================================================================
--- gnunet/src/util/crypto_hash_file.c  2016-04-30 08:16:14 UTC (rev 37101)
+++ gnunet/src/util/crypto_hash_file.c  2016-04-30 08:17:37 UTC (rev 37102)
@@ -130,9 +130,13 @@
   delta = fhc->bsize;
   if (fhc->fsize - fhc->offset < delta)
     delta = fhc->fsize - fhc->offset;
-  if (delta != GNUNET_DISK_file_read (fhc->fh, fhc->buffer, delta))
+  if (delta != GNUNET_DISK_file_read (fhc->fh,
+                                     fhc->buffer,
+                                     delta))
   {
-    LOG_STRERROR_FILE (GNUNET_ERROR_TYPE_WARNING, "read", fhc->filename);
+    LOG_STRERROR_FILE (GNUNET_ERROR_TYPE_WARNING,
+                      "read",
+                      fhc->filename);
     file_hash_finish (fhc, NULL);
     return;
   }
@@ -140,12 +144,14 @@
   fhc->offset += delta;
   if (fhc->offset == fhc->fsize)
   {
-    res = (struct GNUNET_HashCode *) gcry_md_read (fhc->md, GCRY_MD_SHA512);
+    res = (struct GNUNET_HashCode *) gcry_md_read (fhc->md,
+                                                  GCRY_MD_SHA512);
     file_hash_finish (fhc, res);
     return;
   }
   fhc->task = GNUNET_SCHEDULER_add_with_priority (fhc->priority,
-                                                 &file_hash_task, fhc);
+                                                 &file_hash_task,
+                                                 fhc);
 }
 
 
@@ -156,12 +162,13 @@
  * @param filename name of file to hash
  * @param blocksize number of bytes to process in one task
  * @param callback function to call upon completion
- * @param callback_cls closure for callback
+ * @param callback_cls closure for @a callback
  * @return NULL on (immediate) errror
  */
 struct GNUNET_CRYPTO_FileHashContext *
 GNUNET_CRYPTO_hash_file (enum GNUNET_SCHEDULER_Priority priority,
-                         const char *filename, size_t blocksize,
+                         const char *filename,
+                        size_t blocksize,
                          GNUNET_CRYPTO_HashCompletedCallback callback,
                          void *callback_cls)
 {
@@ -181,16 +188,20 @@
     return NULL;
   }
   fhc->bsize = blocksize;
-  if (GNUNET_OK != GNUNET_DISK_file_size (filename, &fhc->fsize, GNUNET_NO, 
GNUNET_YES))
+  if (GNUNET_OK !=
+      GNUNET_DISK_file_size (filename,
+                            &fhc->fsize,
+                            GNUNET_NO,
+                            GNUNET_YES))
   {
     GNUNET_free (fhc->filename);
     GNUNET_free (fhc);
     return NULL;
   }
-  fhc->fh =
-      GNUNET_DISK_file_open (filename, GNUNET_DISK_OPEN_READ,
-                             GNUNET_DISK_PERM_NONE);
-  if (!fhc->fh)
+  fhc->fh = GNUNET_DISK_file_open (filename,
+                                  GNUNET_DISK_OPEN_READ,
+                                  GNUNET_DISK_PERM_NONE);
+  if (! fhc->fh)
   {
     GNUNET_free (fhc->filename);
     GNUNET_free (fhc);
@@ -197,8 +208,9 @@
     return NULL;
   }
   fhc->priority = priority;
-  fhc->task =
-      GNUNET_SCHEDULER_add_with_priority (priority, &file_hash_task, fhc);
+  fhc->task = GNUNET_SCHEDULER_add_with_priority (priority,
+                                                 &file_hash_task,
+                                                 fhc);
   return fhc;
 }
 
@@ -213,7 +225,8 @@
 {
   GNUNET_SCHEDULER_cancel (fhc->task);
   GNUNET_free (fhc->filename);
-  GNUNET_break (GNUNET_OK == GNUNET_DISK_file_close (fhc->fh));
+  GNUNET_break (GNUNET_OK ==
+               GNUNET_DISK_file_close (fhc->fh));
   GNUNET_free (fhc);
 }
 

Modified: gnunet/src/util/gnunet-scrypt.c
===================================================================
--- gnunet/src/util/gnunet-scrypt.c     2016-04-30 08:16:14 UTC (rev 37101)
+++ gnunet/src/util/gnunet-scrypt.c     2016-04-30 08:17:37 UTC (rev 37102)
@@ -40,7 +40,7 @@
 
 static uint64_t proof;
 
-static struct GNUNET_SCHEDULER_Task * proof_task;
+static struct GNUNET_SCHEDULER_Task *proof_task;
 
 static const struct GNUNET_CONFIGURATION_Handle *cfg;
 
@@ -51,15 +51,21 @@
 
 /**
  * Write our current proof to disk.
+ * 
+ * @param cls closure
  */
 static void
-write_proof ()
+shutdown_task (void *cls)
 {
   if (sizeof (proof) !=
-      GNUNET_DISK_fn_write (pwfn, &proof, sizeof (proof),
+      GNUNET_DISK_fn_write (pwfn,
+                           &proof,
+                           sizeof (proof),
                             GNUNET_DISK_PERM_USER_READ |
                             GNUNET_DISK_PERM_USER_WRITE))
-    GNUNET_log_strerror_file (GNUNET_ERROR_TYPE_WARNING, "write", proof);
+    GNUNET_log_strerror_file (GNUNET_ERROR_TYPE_WARNING,
+                             "write",
+                             proof);
 }
 
 
@@ -120,15 +126,10 @@
   unsigned int i;
   struct GNUNET_TIME_Absolute timestamp;
   struct GNUNET_TIME_Relative elapsed;
-  const struct GNUNET_SCHEDULER_TaskContext *tc;
 
-  tc = GNUNET_SCHEDULER_get_task_context ();
-  if (0 != (GNUNET_SCHEDULER_REASON_SHUTDOWN & tc->reason))
-  {
-    write_proof ();
-    return;
-  }
-  GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Got Proof of Work %llu\n", proof);
+  GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
+             "Got Proof of Work %llu\n",
+             proof);
   proof_task = NULL;
   memcpy (&buf[sizeof (uint64_t)], &pub,
           sizeof (struct GNUNET_CRYPTO_EddsaPublicKey));
@@ -144,7 +145,7 @@
       proof = counter;
       FPRINTF (stdout, "Proof of work found: %llu!\n",
                (unsigned long long) proof);
-      write_proof ();
+      GNUNET_SCHEDULER_shutdown ();
       return;
     }
     counter++;
@@ -162,7 +163,7 @@
                 (unsigned long long) counter);
     /* remember progress every 100 rounds */
     proof = counter;
-    write_proof ();
+    shutdown_task (NULL);
   }
   else
   {
@@ -169,9 +170,9 @@
     proof = counter;
   }
   proof_task =
-  GNUNET_SCHEDULER_add_delayed_with_priority (proof_find_delay,
-                                              GNUNET_SCHEDULER_PRIORITY_IDLE,
-                                              &find_proof, NULL);
+    GNUNET_SCHEDULER_add_delayed_with_priority (proof_find_delay,
+                                               GNUNET_SCHEDULER_PRIORITY_IDLE,
+                                               &find_proof, NULL);
 }
 
 
@@ -193,17 +194,18 @@
   char *pids;
 
   cfg = config;
-
   /* load proof of work */
   if (NULL == pwfn)
   {
     if (GNUNET_OK !=
-        GNUNET_CONFIGURATION_get_value_filename (cfg, "NSE",
+        GNUNET_CONFIGURATION_get_value_filename (cfg,
+                                                "NSE",
                                                  "PROOFFILE",
                                                  &pwfn))
     {
       GNUNET_log_config_missing (GNUNET_ERROR_TYPE_ERROR,
-                                 "NSE", "PROOFFILE");
+                                 "NSE",
+                                "PROOFFILE");
       GNUNET_SCHEDULER_shutdown ();
       return;
     }
@@ -219,19 +221,26 @@
   /* load private key */
   if (NULL == pkfn)
   {
-    if (GNUNET_OK != GNUNET_CONFIGURATION_get_value_filename (cfg, "PEER",
-                                                              "PRIVATE_KEY",
-                                                              &pkfn))
+    if (GNUNET_OK !=
+       GNUNET_CONFIGURATION_get_value_filename (cfg,
+                                                "PEER",
+                                                "PRIVATE_KEY",
+                                                &pkfn))
     {
       GNUNET_log_config_missing (GNUNET_ERROR_TYPE_ERROR,
-                                 "PEER", "PRIVATE_KEY");
+                                 "PEER",
+                                "PRIVATE_KEY");
       return;
     }
   }
-  GNUNET_log (GNUNET_ERROR_TYPE_INFO, "Private Key file: %s\n", pkfn);
+  GNUNET_log (GNUNET_ERROR_TYPE_INFO,
+             "Private Key file: %s\n",
+             pkfn);
   if (NULL == (pk = GNUNET_CRYPTO_eddsa_key_create_from_file (pkfn)))
   {
-    FPRINTF (stderr, _("Loading hostkey from `%s' failed.\n"), pkfn);
+    FPRINTF (stderr,
+            _("Loading hostkey from `%s' failed.\n"),
+            pkfn);
     GNUNET_free (pkfn);
     return;
   }
@@ -248,22 +257,28 @@
   if (0 == nse_work_required)
   {
     if (GNUNET_OK !=
-        GNUNET_CONFIGURATION_get_value_number (cfg, "NSE", "WORKBITS",
+        GNUNET_CONFIGURATION_get_value_number (cfg,
+                                              "NSE",
+                                              "WORKBITS",
                                                &nse_work_required))
     {
-      GNUNET_log_config_missing (GNUNET_ERROR_TYPE_ERROR, "NSE", "WORKBITS");
+      GNUNET_log_config_missing (GNUNET_ERROR_TYPE_ERROR,
+                                "NSE",
+                                "WORKBITS");
       GNUNET_SCHEDULER_shutdown ();
       return;
     }
     if (nse_work_required >= sizeof (struct GNUNET_HashCode) * 8)
     {
-      GNUNET_log_config_invalid (GNUNET_ERROR_TYPE_ERROR, "NSE", "WORKBITS",
+      GNUNET_log_config_invalid (GNUNET_ERROR_TYPE_ERROR,
+                                "NSE",
+                                "WORKBITS",
                                 _("Value is too large.\n"));
       GNUNET_SCHEDULER_shutdown ();
       return;
-    } else if (0 == nse_work_required)
+    }
+    else if (0 == nse_work_required)
     {
-      write_proof ();
       GNUNET_SCHEDULER_shutdown ();
       return;
     }
@@ -275,8 +290,12 @@
   GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
               "Delay between tries: %s\n",
               GNUNET_STRINGS_relative_time_to_string (proof_find_delay, 1));
-  GNUNET_SCHEDULER_add_with_priority (GNUNET_SCHEDULER_PRIORITY_IDLE,
-                                      &find_proof, NULL);
+  proof_task = 
+    GNUNET_SCHEDULER_add_with_priority (GNUNET_SCHEDULER_PRIORITY_IDLE,
+                                       &find_proof,
+                                       NULL);
+  GNUNET_SCHEDULER_add_shutdown (&shutdown_task,
+                                NULL);
 }
 
 
@@ -307,7 +326,8 @@
   };
   int ret;
 
-  if (GNUNET_OK != GNUNET_STRINGS_get_utf8_args (argc, argv, &argc, &argv))
+  if (GNUNET_OK !=
+      GNUNET_STRINGS_get_utf8_args (argc, argv, &argc, &argv))
     return 2;
 
   ret = (GNUNET_OK ==

Modified: gnunet/src/util/gnunet-uri.c
===================================================================
--- gnunet/src/util/gnunet-uri.c        2016-04-30 08:16:14 UTC (rev 37101)
+++ gnunet/src/util/gnunet-uri.c        2016-04-30 08:17:37 UTC (rev 37102)
@@ -52,6 +52,7 @@
 maint_child_death (void *cls)
 {
   enum GNUNET_OS_ProcessStatusType type;
+
   if ( (GNUNET_OK !=
        GNUNET_OS_process_status (p, &type, &exit_code)) ||
        (type != GNUNET_OS_PROCESS_EXITED) )
@@ -80,12 +81,14 @@
 
   if (NULL == (uri = args[0]))
   {
-    fprintf (stderr, _("No URI specified on command line\n"));
+    fprintf (stderr,
+            _("No URI specified on command line\n"));
     return;
   }
   if (0 != strncasecmp ("gnunet://", uri, strlen ("gnunet://")))
   {
-    fprintf (stderr, _("Invalid URI: does not start with `%s'\n"),
+    fprintf (stderr,
+            _("Invalid URI: does not start with `%s'\n"),
             "gnunet://");
     return;
   }

Modified: gnunet/src/util/helper.c
===================================================================
--- gnunet/src/util/helper.c    2016-04-30 08:16:14 UTC (rev 37101)
+++ gnunet/src/util/helper.c    2016-04-30 08:17:37 UTC (rev 37102)
@@ -142,17 +142,17 @@
   /**
    * Task to read from the helper.
    */
-  struct GNUNET_SCHEDULER_Task * read_task;
+  struct GNUNET_SCHEDULER_Task *read_task;
 
   /**
    * Task to read from the helper.
    */
-  struct GNUNET_SCHEDULER_Task * write_task;
+  struct GNUNET_SCHEDULER_Task *write_task;
 
   /**
    * Restart task.
    */
-  struct GNUNET_SCHEDULER_Task * restart_task;
+  struct GNUNET_SCHEDULER_Task *restart_task;
 
   /**
    * Does the helper support the use of a control pipe for signalling?
@@ -319,19 +319,10 @@
 helper_read (void *cls)
 {
   struct GNUNET_HELPER_Handle *h = cls;
-  const struct GNUNET_SCHEDULER_TaskContext *tc;
   char buf[GNUNET_SERVER_MAX_MESSAGE_SIZE] GNUNET_ALIGN;
   ssize_t t;
 
   h->read_task = NULL;
-  tc = GNUNET_SCHEDULER_get_task_context ();
-  if (0 != (tc->reason & GNUNET_SCHEDULER_REASON_SHUTDOWN))
-  {
-    /* try again */
-    h->read_task = GNUNET_SCHEDULER_add_read_file 
(GNUNET_TIME_UNIT_FOREVER_REL,
-                                                  h->fh_from_helper, 
&helper_read, h);
-    return;
-  }
   t = GNUNET_DISK_file_read (h->fh_from_helper, &buf, sizeof (buf));
   if (t < 0)
   {
@@ -348,9 +339,9 @@
     }
     stop_helper (h, GNUNET_NO);
     /* Restart the helper */
-    h->restart_task = GNUNET_SCHEDULER_add_delayed(
-        GNUNET_TIME_relative_multiply(GNUNET_TIME_UNIT_SECONDS,
-            h->retry_back_off), &restart_task, h);
+    h->restart_task = GNUNET_SCHEDULER_add_delayed 
(GNUNET_TIME_relative_multiply (GNUNET_TIME_UNIT_SECONDS,
+                                                                               
   h->retry_back_off),
+                                                   &restart_task, h);
     return;
   }
   if (0 == t)
@@ -368,9 +359,10 @@
     }
     stop_helper (h, GNUNET_NO);
     /* Restart the helper */
-    h->restart_task = GNUNET_SCHEDULER_add_delayed(
-        GNUNET_TIME_relative_multiply(GNUNET_TIME_UNIT_SECONDS,
-            h->retry_back_off), &restart_task, h);
+    h->restart_task
+      = GNUNET_SCHEDULER_add_delayed (GNUNET_TIME_relative_multiply 
(GNUNET_TIME_UNIT_SECONDS,
+                                                                  
h->retry_back_off),
+                                    &restart_task, h);
     return;
   }
   GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
@@ -378,9 +370,13 @@
              (unsigned int) t,
              h->binary_name);
   h->read_task = GNUNET_SCHEDULER_add_read_file (GNUNET_TIME_UNIT_FOREVER_REL,
-                                                h->fh_from_helper, 
&helper_read, h);
+                                                h->fh_from_helper,
+                                                &helper_read, h);
   if (GNUNET_SYSERR ==
-      GNUNET_SERVER_mst_receive (h->mst, NULL, buf, t, GNUNET_NO, GNUNET_NO))
+      GNUNET_SERVER_mst_receive (h->mst,
+                                NULL,
+                                buf, t,
+                                GNUNET_NO, GNUNET_NO))
   {
     GNUNET_log (GNUNET_ERROR_TYPE_WARNING,
                _("Failed to parse inbound message from helper `%s'\n"),
@@ -393,9 +389,9 @@
     }
     stop_helper (h, GNUNET_NO);
     /* Restart the helper */
-    h->restart_task = GNUNET_SCHEDULER_add_delayed(
-        GNUNET_TIME_relative_multiply(GNUNET_TIME_UNIT_SECONDS,
-            h->retry_back_off), &restart_task, h);
+    h->restart_task = GNUNET_SCHEDULER_add_delayed 
(GNUNET_TIME_relative_multiply(GNUNET_TIME_UNIT_SECONDS,
+                                                                               
  h->retry_back_off),
+                                                   &restart_task, h);
     return;
   }
 }
@@ -416,9 +412,9 @@
     /* out of file descriptors? try again later... */
     stop_helper (h, GNUNET_NO);
     h->restart_task =
-      GNUNET_SCHEDULER_add_delayed(
-          GNUNET_TIME_relative_multiply(GNUNET_TIME_UNIT_SECONDS,
-              h->retry_back_off), &restart_task, h);
+      GNUNET_SCHEDULER_add_delayed 
(GNUNET_TIME_relative_multiply(GNUNET_TIME_UNIT_SECONDS,
+                                                                 
h->retry_back_off),
+                                   &restart_task, h);
     return;
   }
   GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
@@ -437,9 +433,9 @@
   {
     /* failed to start process? try again later... */
     stop_helper (h, GNUNET_NO);
-    h->restart_task = GNUNET_SCHEDULER_add_delayed(
-        GNUNET_TIME_relative_multiply(GNUNET_TIME_UNIT_SECONDS,
-            h->retry_back_off), &restart_task, h);
+    h->restart_task = GNUNET_SCHEDULER_add_delayed 
(GNUNET_TIME_relative_multiply(GNUNET_TIME_UNIT_SECONDS,
+                                                                               
  h->retry_back_off),
+                                                   &restart_task, h);
     return;
   }
   GNUNET_DISK_pipe_close_end (h->helper_out, GNUNET_DISK_PIPE_END_WRITE);
@@ -583,22 +579,11 @@
 helper_write (void *cls)
 {
   struct GNUNET_HELPER_Handle *h = cls;
-  const struct GNUNET_SCHEDULER_TaskContext *tc;
   struct GNUNET_HELPER_SendHandle *sh;
   const char *buf;
   ssize_t t;
 
   h->write_task = NULL;
-  tc = GNUNET_SCHEDULER_get_task_context ();
-  if (0 != (tc->reason & GNUNET_SCHEDULER_REASON_SHUTDOWN))
-  {
-    /* try again */
-    GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
-               "Helper write triggered during shutdown, retrying\n");
-    h->write_task = GNUNET_SCHEDULER_add_write_file 
(GNUNET_TIME_UNIT_FOREVER_REL,
-                                                    h->fh_to_helper, 
&helper_write, h);
-    return;
-  }
   if (NULL == (sh = h->sh_head))
   {
     GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
@@ -626,9 +611,9 @@
                "Stopping and restarting helper task!\n");
     stop_helper (h, GNUNET_NO);
     /* Restart the helper */
-      h->restart_task = GNUNET_SCHEDULER_add_delayed(
-          GNUNET_TIME_relative_multiply(GNUNET_TIME_UNIT_SECONDS,
-              h->retry_back_off), &restart_task, h);
+    h->restart_task = GNUNET_SCHEDULER_add_delayed 
(GNUNET_TIME_relative_multiply(GNUNET_TIME_UNIT_SECONDS,
+                                                                               
  h->retry_back_off),
+                                                   &restart_task, h);
     return;
   }
   GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,

Modified: gnunet/src/util/mq.c
===================================================================
--- gnunet/src/util/mq.c        2016-04-30 08:16:14 UTC (rev 37101)
+++ gnunet/src/util/mq.c        2016-04-30 08:17:37 UTC (rev 37102)
@@ -302,13 +302,8 @@
 impl_send_continue (void *cls)
 {
   struct GNUNET_MQ_Handle *mq = cls;
-  const struct GNUNET_SCHEDULER_TaskContext *tc;
   struct GNUNET_MQ_Envelope *current_envelope;
 
-  tc = GNUNET_SCHEDULER_get_task_context ();
-  if (0 != (tc->reason & GNUNET_SCHEDULER_REASON_SHUTDOWN))
-    return;
-
   mq->continue_task = NULL;
   /* call is only valid if we're actually currently sending
    * a message */
@@ -325,7 +320,9 @@
     GNUNET_CONTAINER_DLL_remove (mq->envelope_head,
                                  mq->envelope_tail,
                                  mq->current_envelope);
-    mq->send_impl (mq, mq->current_envelope->mh, mq->impl_state);
+    mq->send_impl (mq,
+                  mq->current_envelope->mh,
+                  mq->impl_state);
   }
   if (NULL != current_envelope->sent_cb)
     current_envelope->sent_cb (current_envelope->sent_cls);
@@ -334,10 +331,9 @@
 
 
 /**
- * Call the send implementation for the next queued message,
- * if any.
- * Only useful for implementing message queues,
- * results in undefined behavior if not used carefully.
+ * Call the send implementation for the next queued message, if any.
+ * Only useful for implementing message queues, results in undefined
+ * behavior if not used carefully.
  *
  * @param mq message queue to send the next message with
  */
@@ -471,7 +467,9 @@
     return NULL;
 
   mqm = GNUNET_MQ_msg_ (mhp, size, type);
-  memcpy ((char *) mqm->mh + base_size, nested_mh, ntohs (nested_mh->size));
+  memcpy ((char *) mqm->mh + base_size,
+         nested_mh,
+         ntohs (nested_mh->size));
 
   return mqm;
 }
@@ -481,9 +479,9 @@
  * Transmit a queued message to the session's client.
  *
  * @param cls consensus session
- * @param size number of bytes available in buf
+ * @param size number of bytes available in @a buf
  * @param buf where the callee should write the message
- * @return number of bytes written to buf
+ * @return number of bytes written to @a buf
  */
 static size_t
 transmit_queued (void *cls, size_t size,
@@ -535,10 +533,10 @@
 
   GNUNET_assert (NULL != mq);
   GNUNET_assert (NULL != state);
-  state->th =
-      GNUNET_SERVER_notify_transmit_ready (state->client, ntohs (msg->size),
-                                           GNUNET_TIME_UNIT_FOREVER_REL,
-                                           &transmit_queued, mq);
+  state->th = GNUNET_SERVER_notify_transmit_ready (state->client,
+                                                  ntohs (msg->size),
+                                                  GNUNET_TIME_UNIT_FOREVER_REL,
+                                                  &transmit_queued, mq);
 }
 
 
@@ -580,10 +578,10 @@
     GNUNET_MQ_inject_error (mq, GNUNET_MQ_ERROR_READ);
     return;
   }
-
-  GNUNET_CLIENT_receive (state->connection, handle_client_message, mq,
+  GNUNET_CLIENT_receive (state->connection,
+                        &handle_client_message,
+                        mq,
                          GNUNET_TIME_UNIT_FOREVER_REL);
-
   GNUNET_MQ_inject_message (mq, msg);
 }
 
@@ -652,7 +650,8 @@
   GNUNET_assert (NULL != state);
   GNUNET_assert (NULL == state->th);
   state->th =
-      GNUNET_CLIENT_notify_transmit_ready (state->connection, ntohs 
(msg->size),
+      GNUNET_CLIENT_notify_transmit_ready (state->connection,
+                                          ntohs (msg->size),
                                            GNUNET_TIME_UNIT_FOREVER_REL, 
GNUNET_NO,
                                            &connection_client_transmit_queued, 
mq);
   GNUNET_assert (NULL != state->th);
@@ -752,8 +751,10 @@
 
   if (NULL == mq->assoc_map)
     return NULL;
-  val = GNUNET_CONTAINER_multihashmap32_get (mq->assoc_map, request_id);
-  GNUNET_CONTAINER_multihashmap32_remove_all (mq->assoc_map, request_id);
+  val = GNUNET_CONTAINER_multihashmap32_get (mq->assoc_map,
+                                            request_id);
+  GNUNET_CONTAINER_multihashmap32_remove_all (mq->assoc_map,
+                                             request_id);
   return val;
 }
 
@@ -785,10 +786,11 @@
     struct GNUNET_MQ_Envelope *ev;
     ev = mq->envelope_head;
     ev->parent_queue = NULL;
-    GNUNET_CONTAINER_DLL_remove (mq->envelope_head, mq->envelope_tail, ev);
+    GNUNET_CONTAINER_DLL_remove (mq->envelope_head,
+                                mq->envelope_tail,
+                                ev);
     GNUNET_MQ_discard (ev);
   }
-
   if (NULL != mq->current_envelope)
   {
     /* we can only discard envelopes that
@@ -797,7 +799,6 @@
     GNUNET_MQ_discard (mq->current_envelope);
     mq->current_envelope = NULL;
   }
-
   if (NULL != mq->assoc_map)
   {
     GNUNET_CONTAINER_multihashmap32_destroy (mq->assoc_map);
@@ -851,10 +852,12 @@
   GNUNET_assert (NULL != mq);
   GNUNET_assert (NULL != mq->cancel_impl);
 
-  if (mq->current_envelope == ev) {
+  if (mq->current_envelope == ev)
+  {
     // complex case, we already started with transmitting
     // the message
-    mq->cancel_impl (mq, mq->impl_state);
+    mq->cancel_impl (mq,
+                    mq->impl_state);
     // continue sending the next message, if any
     if (NULL == mq->envelope_head)
     {
@@ -866,11 +869,17 @@
       GNUNET_CONTAINER_DLL_remove (mq->envelope_head,
                                    mq->envelope_tail,
                                    mq->current_envelope);
-      mq->send_impl (mq, mq->current_envelope->mh, mq->impl_state);
+      mq->send_impl (mq,
+                    mq->current_envelope->mh,
+                    mq->impl_state);
     }
-  } else {
+  }
+  else
+  {
     // simple case, message is still waiting in the queue
-    GNUNET_CONTAINER_DLL_remove (mq->envelope_head, mq->envelope_tail, ev);
+    GNUNET_CONTAINER_DLL_remove (mq->envelope_head,
+                                mq->envelope_tail,
+                                ev);
   }
 
   ev->parent_queue = NULL;

Modified: gnunet/src/util/os_installation.c
===================================================================
--- gnunet/src/util/os_installation.c   2016-04-30 08:16:14 UTC (rev 37101)
+++ gnunet/src/util/os_installation.c   2016-04-30 08:17:37 UTC (rev 37102)
@@ -62,7 +62,7 @@
   .bug_email = "address@hidden",
   .homepage = "http://www.gnu.org/s/gnunet/";,
   .config_file = "gnunet.conf",
-  .user_config_file = "~/.config/gnunet.conf"
+  .user_config_file = "~/.config/gnunet.conf",
 };
 
 /**

Modified: gnunet/src/util/os_priority.c
===================================================================
--- gnunet/src/util/os_priority.c       2016-04-30 08:16:14 UTC (rev 37101)
+++ gnunet/src/util/os_priority.c       2016-04-30 08:17:37 UTC (rev 37102)
@@ -65,49 +65,68 @@
  */
 static struct GNUNET_OS_Process current_process;
 
+/**
+ * Handle for the #parent_control_handler() Task.
+ */
+static struct GNUNET_SCHEDULER_Task *pch;
 
+
 /**
+ * This handler is called on shutdown to remove the #pch.
+ *
+ * @param cls the `struct GNUNET_DISK_FileHandle` of the control pipe
+ */
+static void
+shutdown_pch (void *cls)
+{
+  struct GNUNET_DISK_FileHandle *control_pipe = cls;
+    
+  GNUNET_SCHEDULER_cancel (pch);
+  pch = NULL;
+  GNUNET_DISK_file_close (control_pipe);
+  control_pipe = NULL;
+}
+
+
+/**
  * This handler is called when there are control data to be read on the pipe
  *
- * @param cls the 'struct GNUNET_DISK_FileHandle' of the control pipe
+ * @param cls the `struct GNUNET_DISK_FileHandle` of the control pipe
  */
 static void
 parent_control_handler (void *cls)
 {
   struct GNUNET_DISK_FileHandle *control_pipe = cls;
-  const struct GNUNET_SCHEDULER_TaskContext *tc;
   char sig;
   char *pipe_fd;
   ssize_t ret;
 
-  tc = GNUNET_SCHEDULER_get_task_context ();
-  LOG (GNUNET_ERROR_TYPE_DEBUG,
-       "`%s' invoked because of %d\n", __FUNCTION__,
-       tc->reason);
-  if (0 != (tc->reason &
-           (GNUNET_SCHEDULER_REASON_SHUTDOWN | 
GNUNET_SCHEDULER_REASON_TIMEOUT)))
-  {
-    GNUNET_DISK_file_close (control_pipe);
-    control_pipe = NULL;
-    return;
-  }
-  ret = GNUNET_DISK_file_read (control_pipe, &sig, sizeof (sig));
+  pch = NULL;
+  ret = GNUNET_DISK_file_read (control_pipe,
+                              &sig,
+                              sizeof (sig));
   if (sizeof (sig) != ret)
   {
     if (-1 == ret)
-      LOG_STRERROR (GNUNET_ERROR_TYPE_ERROR, "GNUNET_DISK_file_read");
-    LOG (GNUNET_ERROR_TYPE_DEBUG, "Closing control pipe\n");
+      LOG_STRERROR (GNUNET_ERROR_TYPE_ERROR,
+                   "GNUNET_DISK_file_read");
+    LOG (GNUNET_ERROR_TYPE_DEBUG,
+        "Closing control pipe\n");
     GNUNET_DISK_file_close (control_pipe);
     control_pipe = NULL;
     return;
   }
   pipe_fd = getenv (GNUNET_OS_CONTROL_PIPE);
-  GNUNET_assert ( (NULL == pipe_fd) || (strlen (pipe_fd) <= 0) );
+  GNUNET_assert ( (NULL == pipe_fd) ||
+                 (strlen (pipe_fd) <= 0) );
   LOG (GNUNET_ERROR_TYPE_DEBUG,
-       "Got control code %d from parent via pipe %s\n", sig, pipe_fd);
-  GNUNET_SCHEDULER_add_read_file (GNUNET_TIME_UNIT_FOREVER_REL,
-                                 control_pipe, &parent_control_handler,
-                                 control_pipe);
+       "Got control code %d from parent via pipe %s\n",
+       sig,
+       pipe_fd);
+  pch = GNUNET_SCHEDULER_add_read_file (GNUNET_TIME_UNIT_FOREVER_REL,
+                                       control_pipe,
+                                       &parent_control_handler,
+                                       control_pipe);
   GNUNET_SIGNAL_raise ((int) sig);
 }
 
@@ -115,7 +134,7 @@
 /**
  * Task that connects this process to its parent via pipe;
  * essentially, the parent control handler will read signal numbers
- * from the 'GNUNET_OS_CONTROL_PIPE' (as given in an environment
+ * from the #GNUNET_OS_CONTROL_PIPE (as given in an environment
  * variable) and raise those signals.
  *
  * @param cls closure (unused)
@@ -128,6 +147,12 @@
   struct GNUNET_DISK_FileHandle *control_pipe;
   uint64_t pipe_fd;
 
+  if (NULL != pch)
+  {
+    /* already done, we've been called twice... */
+    GNUNET_break (0);
+    return;
+  }
   env_buf = getenv (GNUNET_OS_CONTROL_PIPE);
   if ( (NULL == env_buf) || (strlen (env_buf) <= 0) )
   {
@@ -141,7 +166,9 @@
   pipe_fd = strtoull (env_buf, &env_buf_end, 16);
   if ((0 != errno) || (env_buf == env_buf_end))
   {
-    LOG_STRERROR_FILE (GNUNET_ERROR_TYPE_WARNING, "strtoull", env_buf);
+    LOG_STRERROR_FILE (GNUNET_ERROR_TYPE_WARNING,
+                      "strtoull",
+                      env_buf);
     putenv (GNUNET_OS_CONTROL_PIPE "=");
     return;
   }
@@ -153,7 +180,8 @@
 #endif
   {
     LOG (GNUNET_ERROR_TYPE_ERROR,
-         "GNUNET_OS_CONTROL_PIPE `%s' contains garbage?\n", env_buf);
+         "GNUNET_OS_CONTROL_PIPE `%s' contains garbage?\n",
+        env_buf);
     putenv (GNUNET_OS_CONTROL_PIPE "=");
     return;
   }
@@ -164,14 +192,21 @@
 #endif
   if (NULL == control_pipe)
   {
-    LOG_STRERROR_FILE (GNUNET_ERROR_TYPE_WARNING, "open", env_buf);
+    LOG_STRERROR_FILE (GNUNET_ERROR_TYPE_WARNING,
+                      "open",
+                      env_buf);
     putenv (GNUNET_OS_CONTROL_PIPE "=");
     return;
   }
   LOG (GNUNET_ERROR_TYPE_DEBUG,
-       "Adding parent control handler pipe `%s' to the scheduler\n", env_buf);
-  GNUNET_SCHEDULER_add_read_file (GNUNET_TIME_UNIT_FOREVER_REL, control_pipe,
-                                  &parent_control_handler, control_pipe);
+       "Adding parent control handler pipe `%s' to the scheduler\n",
+       env_buf);
+  pch = GNUNET_SCHEDULER_add_read_file (GNUNET_TIME_UNIT_FOREVER_REL,
+                                       control_pipe,
+                                       &parent_control_handler,
+                                       control_pipe);
+  GNUNET_SCHEDULER_add_shutdown (&shutdown_pch,
+                                control_pipe);
   putenv (GNUNET_OS_CONTROL_PIPE "=");
 }
 
@@ -179,8 +214,8 @@
 /**
  * Get process structure for current process
  *
- * The pointer it returns points to static memory location and must not be
- * deallocated/closed
+ * The pointer it returns points to static memory location and must
+ * not be deallocated/closed.
  *
  * @return pointer to the process sturcutre for this process
  */
@@ -205,7 +240,8 @@
  * @return 0 on success, -1 on error
  */
 int
-GNUNET_OS_process_kill (struct GNUNET_OS_Process *proc, int sig)
+GNUNET_OS_process_kill (struct GNUNET_OS_Process *proc,
+                       int sig)
 {
   int ret;
   char csig;
@@ -213,8 +249,13 @@
   csig = (char) sig;
   if (NULL != proc->control_pipe)
   {
-    LOG (GNUNET_ERROR_TYPE_DEBUG, "Sending signal %d to pid: %u via pipe\n", 
sig, proc->pid);
-    ret = GNUNET_DISK_file_write (proc->control_pipe, &csig, sizeof (csig));
+    LOG (GNUNET_ERROR_TYPE_DEBUG,
+        "Sending signal %d to pid: %u via pipe\n",
+        sig,
+        proc->pid);
+    ret = GNUNET_DISK_file_write (proc->control_pipe,
+                                 &csig,
+                                 sizeof (csig));
     if (sizeof (csig) == ret)
       return 0;
   }
@@ -237,14 +278,17 @@
       if (0 != GetExitCodeProcess (proc->handle, &exitcode))
         must_kill = (exitcode == STILL_ACTIVE) ? GNUNET_YES : GNUNET_NO;
       if (GNUNET_YES == must_kill)
+      {
         if (0 == SafeTerminateProcess (proc->handle, 0, 0))
         {
           DWORD error_code = GetLastError ();
-          if ((error_code != WAIT_TIMEOUT) && (error_code != 
ERROR_PROCESS_ABORTED))
+          if ( (error_code != WAIT_TIMEOUT) &&
+              (error_code != ERROR_PROCESS_ABORTED) )
           {
             LOG ((error_code == ERROR_ACCESS_DENIED) ?
-                GNUNET_ERROR_TYPE_INFO : GNUNET_ERROR_TYPE_WARNING,
-                "SafeTermiateProcess failed with code %lu\n", error_code);
+                GNUNET_ERROR_TYPE_INFO : GNUNET_ERROR_TYPE_WARNING,
+                "SafeTermiateProcess failed with code %lu\n",
+                error_code);
             /* The problem here is that a process that is already dying
              * might cause SafeTerminateProcess to fail with
              * ERROR_ACCESS_DENIED, but the process WILL die eventually.
@@ -263,6 +307,7 @@
             }
           }
         }
+      }
     }
     return 0;
 #else
@@ -277,12 +322,16 @@
     errno = EINVAL;
     return -1;
 #else
-    LOG (GNUNET_ERROR_TYPE_DEBUG, "Sending signal %d to pid: %u via system 
call\n", sig, proc->pid);
+    LOG (GNUNET_ERROR_TYPE_DEBUG,
+        "Sending signal %d to pid: %u via system call\n",
+        sig,
+        proc->pid);
     return PLIBC_KILL (proc->pid, sig);
 #endif
   }
 }
 
+
 /**
  * Get the pid of the process in question
  *
@@ -298,7 +347,8 @@
 
 
 /**
- * Cleans up process structure contents (OS-dependent) and deallocates it
+ * Cleans up process structure contents (OS-dependent) and deallocates
+ * it.
  *
  * @param proc pointer to process structure
  */
@@ -314,6 +364,7 @@
   GNUNET_free (proc);
 }
 
+
 #if WINDOWS
 #include "gnunet_signal_lib.h"
 
@@ -324,6 +375,7 @@
  */
 #define DWORD_WINAPI DWORD WINAPI
 
+
 /**
  * @brief Waits for a process to terminate and invokes the SIGCHLD handler
  * @param proc pointer to process structure
@@ -467,7 +519,9 @@
   fd = open ("/dev/null", flags);
   if (-1 == fd)
   {
-    GNUNET_log_strerror_file (GNUNET_ERROR_TYPE_ERROR, "open", "/dev/null");
+    GNUNET_log_strerror_file (GNUNET_ERROR_TYPE_ERROR,
+                             "open",
+                             "/dev/null");
     return;
   }
   if (fd == target_fd)
@@ -531,7 +585,8 @@
   int fd_stdin_read;
   int fd_stdin_write;
 
-  if (GNUNET_SYSERR == GNUNET_OS_check_helper_binary (filename, GNUNET_NO, 
NULL))
+  if (GNUNET_SYSERR ==
+      GNUNET_OS_check_helper_binary (filename, GNUNET_NO, NULL))
     return NULL; /* not executable */
   if (GNUNET_YES == pipe_control)
   {
@@ -538,16 +593,22 @@
     struct GNUNET_DISK_PipeHandle *childpipe;
     int dup_childpipe_read_fd = -1;
 
-    childpipe = GNUNET_DISK_pipe (GNUNET_NO, GNUNET_NO, GNUNET_YES, GNUNET_NO);
+    childpipe = GNUNET_DISK_pipe (GNUNET_NO, GNUNET_NO,
+                                 GNUNET_YES, GNUNET_NO);
     if (NULL == childpipe)
       return NULL;
-    childpipe_read = GNUNET_DISK_pipe_detach_end (childpipe, 
GNUNET_DISK_PIPE_END_READ);
-    childpipe_write = GNUNET_DISK_pipe_detach_end (childpipe, 
GNUNET_DISK_PIPE_END_WRITE);
+    childpipe_read = GNUNET_DISK_pipe_detach_end (childpipe,
+                                                 GNUNET_DISK_PIPE_END_READ);
+    childpipe_write = GNUNET_DISK_pipe_detach_end (childpipe,
+                                                  GNUNET_DISK_PIPE_END_WRITE);
     GNUNET_DISK_pipe_close (childpipe);
-    if ((NULL == childpipe_read) || (NULL == childpipe_write) ||
-        (GNUNET_OK != GNUNET_DISK_internal_file_handle_ (childpipe_read,
-        &childpipe_read_fd, sizeof (int))) ||
-        (-1 == (dup_childpipe_read_fd = dup (childpipe_read_fd))))
+    if ( (NULL == childpipe_read) ||
+        (NULL == childpipe_write) ||
+        (GNUNET_OK !=
+         GNUNET_DISK_internal_file_handle_ (childpipe_read,
+                                            &childpipe_read_fd,
+                                            sizeof (int))) ||
+        (-1 == (dup_childpipe_read_fd = dup (childpipe_read_fd))))
     {
       if (NULL != childpipe_read)
         GNUNET_DISK_file_close (childpipe_read);
@@ -1762,17 +1823,19 @@
 
   cmd->rtask = NULL;
   tc = GNUNET_SCHEDULER_get_task_context ();
-  if (GNUNET_YES != GNUNET_NETWORK_fdset_handle_isset (tc->read_ready, cmd->r))
+  if (GNUNET_YES !=
+      GNUNET_NETWORK_fdset_handle_isset (tc->read_ready,
+                                        cmd->r))
   {
-    /* timeout, shutdown, etc. */
+    /* timeout */
     proc = cmd->proc;
     cmd->proc = NULL;
     proc (cmd->proc_cls, NULL);
     return;
   }
-  ret =
-      GNUNET_DISK_file_read (cmd->r, &cmd->buf[cmd->off],
-                             sizeof (cmd->buf) - cmd->off);
+  ret = GNUNET_DISK_file_read (cmd->r,
+                              &cmd->buf[cmd->off],
+                              sizeof (cmd->buf) - cmd->off);
   if (ret <= 0)
   {
     if ((cmd->off > 0) && (cmd->off < sizeof (cmd->buf)))
@@ -1795,9 +1858,11 @@
     cmd->off -= (end + 1 - cmd->buf);
     end = memchr (cmd->buf, '\n', cmd->off);
   }
-  cmd->rtask =
-      GNUNET_SCHEDULER_add_read_file (GNUNET_TIME_absolute_get_remaining
-                                      (cmd->timeout), cmd->r, &cmd_read, cmd);
+  cmd->rtask 
+    = GNUNET_SCHEDULER_add_read_file (GNUNET_TIME_absolute_get_remaining
+                                      (cmd->timeout),
+                                     cmd->r,
+                                     &cmd_read, cmd);
 }
 
 
@@ -1824,12 +1889,15 @@
   struct GNUNET_DISK_PipeHandle *opipe;
   va_list ap;
 
-  opipe = GNUNET_DISK_pipe (GNUNET_YES, GNUNET_YES, GNUNET_NO, GNUNET_YES);
+  opipe = GNUNET_DISK_pipe (GNUNET_YES, GNUNET_YES,
+                           GNUNET_NO, GNUNET_YES);
   if (NULL == opipe)
     return NULL;
   va_start (ap, binary);
   /* redirect stdout, don't inherit stderr/stdin */
-  eip = GNUNET_OS_start_process_va (GNUNET_NO, 0, NULL, opipe, NULL, binary, 
ap);
+  eip = GNUNET_OS_start_process_va (GNUNET_NO, 0, NULL,
+                                   opipe, NULL, binary,
+                                   ap);
   va_end (ap);
   if (NULL == eip)
   {
@@ -1843,8 +1911,12 @@
   cmd->opipe = opipe;
   cmd->proc = proc;
   cmd->proc_cls = proc_cls;
-  cmd->r = GNUNET_DISK_pipe_handle (opipe, GNUNET_DISK_PIPE_END_READ);
-  cmd->rtask = GNUNET_SCHEDULER_add_read_file (timeout, cmd->r, &cmd_read, 
cmd);
+  cmd->r = GNUNET_DISK_pipe_handle (opipe,
+                                   GNUNET_DISK_PIPE_END_READ);
+  cmd->rtask = GNUNET_SCHEDULER_add_read_file (timeout,
+                                              cmd->r,
+                                              &cmd_read,
+                                              cmd);
   return cmd;
 }
 

Modified: gnunet/src/util/program.c
===================================================================
--- gnunet/src/util/program.c   2016-04-30 08:16:14 UTC (rev 37101)
+++ gnunet/src/util/program.c   2016-04-30 08:17:37 UTC (rev 37102)
@@ -76,11 +76,7 @@
 program_main (void *cls)
 {
   struct CommandContext *cc = cls;
-  const struct GNUNET_SCHEDULER_TaskContext *tc;
 
-  tc = GNUNET_SCHEDULER_get_task_context ();
-  if (0 != (GNUNET_SCHEDULER_REASON_SHUTDOWN & tc->reason))
-    return;
   GNUNET_SPEEDUP_start_(cc->cfg);
   GNUNET_RESOLVER_connect (cc->cfg);
   cc->task (cc->task_cls, cc->args, cc->cfgfile, cc->cfg);

Modified: gnunet/src/util/resolver_api.c
===================================================================
--- gnunet/src/util/resolver_api.c      2016-04-30 08:16:14 UTC (rev 37101)
+++ gnunet/src/util/resolver_api.c      2016-04-30 08:17:37 UTC (rev 37102)
@@ -118,7 +118,7 @@
   GNUNET_RESOLVER_HostnameCallback name_callback;
 
   /**
-   * Closure for the respective "callback".
+   * Closure for the callbacks.
    */
   void *cls;
 
@@ -131,7 +131,7 @@
    * Task handle for making reply callbacks in numeric lookups
    * asynchronous, and for timeout handling.
    */
-  struct GNUNET_SCHEDULER_Task * task;
+  struct GNUNET_SCHEDULER_Task *task;
 
   /**
    * Desired address family.
@@ -638,6 +638,7 @@
     rh->addr_callback (rh->cls,
                        (const struct sockaddr *) &v4,
                        sizeof (v4));
+
     break;
   default:
     GNUNET_break (0);
@@ -683,7 +684,7 @@
     /* nothing to do, release socket really soon if there is nothing
      * else happening... */
     s_task =
-        GNUNET_SCHEDULER_add_delayed (GNUNET_TIME_UNIT_MILLISECONDS,
+        GNUNET_SCHEDULER_add_delayed (GNUNET_TIME_UNIT_SECONDS,
                                       &shutdown_task,
                                       NULL);
     return;
@@ -727,14 +728,9 @@
 static void
 reconnect_task (void *cls)
 {
-  const struct GNUNET_SCHEDULER_TaskContext *tc;
-
   r_task = NULL;
   if (NULL == req_head)
     return;                     /* no work pending */
-  tc = GNUNET_SCHEDULER_get_task_context ();
-  if (0 != (tc->reason & GNUNET_SCHEDULER_REASON_SHUTDOWN))
-    return;
   LOG (GNUNET_ERROR_TYPE_DEBUG,
        "Trying to connect to DNS service\n");
   client = GNUNET_CLIENT_connect ("resolver",
@@ -774,7 +770,9 @@
       break;
     case GNUNET_SYSERR:
       /* request was cancelled, remove entirely */
-      GNUNET_CONTAINER_DLL_remove (req_head, req_tail, rh);
+      GNUNET_CONTAINER_DLL_remove (req_head,
+                                  req_tail,
+                                  rh);
       GNUNET_free (rh);
       break;
     default:

Modified: gnunet/src/util/scheduler.c
===================================================================
--- gnunet/src/util/scheduler.c 2016-04-30 08:16:14 UTC (rev 37101)
+++ gnunet/src/util/scheduler.c 2016-04-30 08:17:37 UTC (rev 37102)
@@ -1,6 +1,6 @@
 /*
       This file is part of GNUnet
-      Copyright (C) 2009-2013 GNUnet e.V.
+      Copyright (C) 2009-2016 GNUnet e.V.
 
       GNUnet is free software; you can redistribute it and/or modify
       it under the terms of the GNU General Public License as published
@@ -152,6 +152,11 @@
   int lifeness;
 
   /**
+   * Is this task run on shutdown?
+   */
+  int on_shutdown;
+  
+  /**
    * Is this task in the ready list?
    */
   int in_ready_list;
@@ -184,6 +189,16 @@
 static struct GNUNET_SCHEDULER_Task *pending_tail;
 
 /**
+ * Head of list of tasks waiting for shutdown.
+ */
+static struct GNUNET_SCHEDULER_Task *shutdown_head;
+
+/**
+ * Tail of list of tasks waiting for shutdown.
+ */
+static struct GNUNET_SCHEDULER_Task *shutdown_tail;
+
+/**
  * List of tasks waiting ONLY for a timeout event.
  * Sorted by timeout (earliest first).  Used so that
  * we do not traverse the list of these tasks when
@@ -421,8 +436,6 @@
 {
   enum GNUNET_SCHEDULER_Priority p = check_priority (task->priority);
 
-  if (0 != (task->reason & GNUNET_SCHEDULER_REASON_SHUTDOWN))
-    p = task->priority = GNUNET_SCHEDULER_PRIORITY_SHUTDOWN;
   GNUNET_CONTAINER_DLL_insert (ready_head[p],
                                ready_tail[p],
                                task);
@@ -477,29 +490,24 @@
 
 
 /**
- * Request the shutdown of a scheduler.  Marks all currently
- * pending tasks as ready because of shutdown.  This will
- * cause all tasks to run (as soon as possible, respecting
- * priorities and prerequisite tasks).  Note that tasks
- * scheduled AFTER this call may still be delayed arbitrarily.
- *
- * Note that we don't move the tasks into the ready queue yet;
- * check_ready() will do that later, possibly adding additional
- * readiness-factors
+ * Request the shutdown of a scheduler.  Marks all tasks 
+ * awaiting shutdown as ready. Note that tasks
+ * scheduled with #GNUNET_SCHEDULER_add_shutdown() AFTER this call
+ * will be delayed until the next shutdown signal.
  */
 void
 GNUNET_SCHEDULER_shutdown ()
 {
   struct GNUNET_SCHEDULER_Task *pos;
-  int i;
 
-  for (pos = pending_timeout_head; NULL != pos; pos = pos->next)
+  while (NULL != (pos = shutdown_head))
+  {
+    GNUNET_CONTAINER_DLL_remove (shutdown_head,
+                                 shutdown_tail,
+                                 pos);
     pos->reason |= GNUNET_SCHEDULER_REASON_SHUTDOWN;
-  for (pos = pending_head; NULL != pos; pos = pos->next)
-    pos->reason |= GNUNET_SCHEDULER_REASON_SHUTDOWN;
-  for (i = 0; i < GNUNET_SCHEDULER_PRIORITY_COUNT; i++)
-    for (pos = ready_head[i]; NULL != pos; pos = pos->next)
-      pos->reason |= GNUNET_SCHEDULER_REASON_SHUTDOWN;
+    queue_ready_task (pos);
+  }
 }
 
 
@@ -523,6 +531,27 @@
 
 
 /**
+ * Output stack trace of task @a t.
+ *
+ * @param t task to dump stack trace of
+ */ 
+static void
+dump_backtrace (struct GNUNET_SCHEDULER_Task *t)
+{
+#if EXECINFO
+  unsigned int i;
+  
+  for (i = 0; i < t->num_backtrace_strings; i++)
+    LOG (GNUNET_ERROR_TYPE_DEBUG,
+        "Task %p trace %u: %s\n",
+        t,
+        i,
+        t->backtrace_strings[i]);
+#endif
+}
+
+
+/**
  * Run at least one task in the highest-priority queue that is not
  * empty.  Keep running tasks until we are either no longer running
  * "URGENT" tasks or until we have at least one "pending" task (which
@@ -589,16 +618,7 @@
         "Running task: %p\n",
          pos);
     pos->callback (pos->callback_cls);
-#if EXECINFO
-    unsigned int i;
-
-    for (i = 0; i < pos->num_backtrace_strings; i++)
-      LOG (GNUNET_ERROR_TYPE_DEBUG,
-           "Task %p trace %u: %s\n",
-           pos,
-           i,
-           pos->backtrace_strings[i]);
-#endif
+    dump_backtrace (pos);
     active_task = NULL;
     destroy_task (pos);
     tasks_run++;
@@ -684,10 +704,13 @@
   for (t = pending_head; NULL != t; t = t->next)
     if (t->lifeness == GNUNET_YES)
       return GNUNET_OK;
+  for (t = shutdown_head; NULL != t; t = t->next)
+    if (t->lifeness == GNUNET_YES)
+      return GNUNET_OK;
   for (t = pending_timeout_head; NULL != t; t = t->next)
     if (t->lifeness == GNUNET_YES)
       return GNUNET_OK;
-  if ((NULL != pending_head) || (NULL != pending_timeout_head))
+  if (NULL != shutdown_head)
   {
     GNUNET_SCHEDULER_shutdown ();
     return GNUNET_OK;
@@ -749,15 +772,21 @@
   my_pid = getpid ();
   LOG (GNUNET_ERROR_TYPE_DEBUG,
        "Registering signal handlers\n");
-  shc_int = GNUNET_SIGNAL_handler_install (SIGINT, &sighandler_shutdown);
-  shc_term = GNUNET_SIGNAL_handler_install (SIGTERM, &sighandler_shutdown);
+  shc_int = GNUNET_SIGNAL_handler_install (SIGINT,
+                                          &sighandler_shutdown);
+  shc_term = GNUNET_SIGNAL_handler_install (SIGTERM,
+                                           &sighandler_shutdown);
 #if (SIGTERM != GNUNET_TERM_SIG)
-  shc_gterm = GNUNET_SIGNAL_handler_install (GNUNET_TERM_SIG, 
&sighandler_shutdown);
+  shc_gterm = GNUNET_SIGNAL_handler_install (GNUNET_TERM_SIG,
+                                            &sighandler_shutdown);
 #endif
 #ifndef MINGW
-  shc_pipe = GNUNET_SIGNAL_handler_install (SIGPIPE, &sighandler_pipe);
-  shc_quit = GNUNET_SIGNAL_handler_install (SIGQUIT, &sighandler_shutdown);
-  shc_hup = GNUNET_SIGNAL_handler_install (SIGHUP, &sighandler_shutdown);
+  shc_pipe = GNUNET_SIGNAL_handler_install (SIGPIPE,
+                                           &sighandler_pipe);
+  shc_quit = GNUNET_SIGNAL_handler_install (SIGQUIT,
+                                           &sighandler_shutdown);
+  shc_hup = GNUNET_SIGNAL_handler_install (SIGHUP,
+                                          &sighandler_shutdown);
 #endif
   current_priority = GNUNET_SCHEDULER_PRIORITY_DEFAULT;
   current_lifeness = GNUNET_YES;
@@ -826,14 +855,7 @@
               LOG (GNUNET_ERROR_TYPE_ERROR,
                    "Got invalid file descriptor %d!\n",
                    t->read_fd);
-#if EXECINFO
-              unsigned int i;
-
-              for (i = 0; i < t->num_backtrace_strings; i++)
-                LOG (GNUNET_ERROR_TYPE_ERROR,
-                     "Trace: %s\n",
-                     t->backtrace_strings[i]);
-#endif
+             dump_backtrace (t);
             }
         }
         if (-1 != t->write_fd)
@@ -844,14 +866,7 @@
                 LOG (GNUNET_ERROR_TYPE_ERROR,
                      "Got invalid file descriptor %d!\n",
                      t->write_fd);
-#if EXECINFO
-                unsigned int i;
-
-                for (i = 0; i < t->num_backtrace_strings; i++)
-                  LOG (GNUNET_ERROR_TYPE_DEBUG,
-                       "Trace: %s\n",
-                       t->backtrace_strings[i]);
-#endif
+               dump_backtrace (t);
               }
           }
       }
@@ -959,7 +974,8 @@
   enum GNUNET_SCHEDULER_Priority p;
   void *ret;
 
-  GNUNET_assert (NULL != active_task);
+  GNUNET_assert ( (NULL != active_task) ||
+                 (GNUNET_NO == task->lifeness) );
   if (! task->in_ready_list)
   {
     if ( (-1 == task->read_fd) &&
@@ -967,9 +983,14 @@
          (NULL == task->read_set) &&
          (NULL == task->write_set) )
     {
-      GNUNET_CONTAINER_DLL_remove (pending_timeout_head,
-                                   pending_timeout_tail,
-                                   task);
+      if (GNUNET_YES == task->on_shutdown)
+       GNUNET_CONTAINER_DLL_remove (shutdown_head,
+                                    shutdown_tail,
+                                    task);
+      else
+       GNUNET_CONTAINER_DLL_remove (pending_timeout_head,
+                                    pending_timeout_tail,
+                                    task);
       if (task == pending_timeout_last)
         pending_timeout_last = NULL;
     }
@@ -998,6 +1019,27 @@
 
 
 /**
+ * Initialize backtrace data for task @a t
+ *
+ * @param t task to initialize
+ */
+static void
+init_backtrace (struct GNUNET_SCHEDULER_Task *t)
+{
+#if EXECINFO
+  void *backtrace_array[MAX_TRACE_DEPTH];
+
+  t->num_backtrace_strings
+    = backtrace (backtrace_array, MAX_TRACE_DEPTH);
+  t->backtrace_strings =
+      backtrace_symbols (backtrace_array,
+                        t->num_backtrace_strings);
+  dump_backtrace (t);
+#endif
+}
+
+
+/**
  * Continue the current execution with the given function.  This is
  * similar to the other "add" functions except that there is no delay
  * and the reason code can be specified.
@@ -1015,19 +1057,10 @@
 {
   struct GNUNET_SCHEDULER_Task *t;
 
-#if EXECINFO
-  void *backtrace_array[50];
-#endif
-
   GNUNET_assert (NULL != task);
   GNUNET_assert ((NULL != active_task) ||
                  (GNUNET_SCHEDULER_REASON_STARTUP == reason));
   t = GNUNET_new (struct GNUNET_SCHEDULER_Task);
-#if EXECINFO
-  t->num_backtrace_strings = backtrace (backtrace_array, 50);
-  t->backtrace_strings =
-      backtrace_symbols (backtrace_array, t->num_backtrace_strings);
-#endif
   t->read_fd = -1;
   t->write_fd = -1;
   t->callback = task;
@@ -1041,6 +1074,7 @@
   LOG (GNUNET_ERROR_TYPE_DEBUG,
        "Adding continuation task %p\n",
        t);
+  init_backtrace (t);
   queue_ready_task (t);
 }
 
@@ -1049,8 +1083,7 @@
  * Schedule a new task to be run with a specified delay.  The task
  * will be scheduled for execution once the delay has expired.
  *
- * @param delay when should this operation time out? Use
- *        #GNUNET_TIME_UNIT_FOREVER_REL for "on shutdown"
+ * @param delay when should this operation time out?
  * @param priority priority to use for the task
  * @param task main function of the task
  * @param task_cls closure of @a task
@@ -1067,20 +1100,11 @@
   struct GNUNET_SCHEDULER_Task *pos;
   struct GNUNET_SCHEDULER_Task *prev;
 
-#if EXECINFO
-  void *backtrace_array[MAX_TRACE_DEPTH];
-#endif
-
   GNUNET_assert (NULL != active_task);
   GNUNET_assert (NULL != task);
   t = GNUNET_new (struct GNUNET_SCHEDULER_Task);
   t->callback = task;
   t->callback_cls = task_cls;
-#if EXECINFO
-  t->num_backtrace_strings = backtrace (backtrace_array, MAX_TRACE_DEPTH);
-  t->backtrace_strings =
-      backtrace_symbols (backtrace_array, t->num_backtrace_strings);
-#endif
   t->read_fd = -1;
   t->write_fd = -1;
 #if PROFILE_DELAYS
@@ -1127,16 +1151,7 @@
   LOG (GNUNET_ERROR_TYPE_DEBUG,
        "Adding task: %p\n",
        t);
-#if EXECINFO
-  unsigned int i;
-
-  for (i = 0; i < t->num_backtrace_strings; i++)
-    LOG (GNUNET_ERROR_TYPE_DEBUG,
-         "Task %p trace %d: %s\n",
-         t,
-         i,
-         t->backtrace_strings[i]);
-#endif
+  init_backtrace (t);
   return t;
 }
 
@@ -1167,16 +1182,16 @@
  * will be scheduled for execution once the delay has expired. It
  * will be run with the DEFAULT priority.
  *
- * @param delay when should this operation time out? Use
- *        GNUNET_TIME_UNIT_FOREVER_REL for "on shutdown"
+ * @param delay when should this operation time out?
  * @param task main function of the task
- * @param task_cls closure of task
+ * @param task_cls closure of @a task
  * @return unique task identifier for the job
- *         only valid until "task" is started!
+ *         only valid until @a task is started!
  */
 struct GNUNET_SCHEDULER_Task *
 GNUNET_SCHEDULER_add_delayed (struct GNUNET_TIME_Relative delay,
-                              GNUNET_SCHEDULER_TaskCallback task, void 
*task_cls)
+                              GNUNET_SCHEDULER_TaskCallback task,
+                             void *task_cls)
 {
   return GNUNET_SCHEDULER_add_delayed_with_priority (delay,
                                                     
GNUNET_SCHEDULER_PRIORITY_DEFAULT,
@@ -1197,16 +1212,60 @@
  * @param task main function of the task
  * @param task_cls closure of @a task
  * @return unique task identifier for the job
- *         only valid until "task" is started!
+ *         only valid until @a task is started!
  */
 struct GNUNET_SCHEDULER_Task *
-GNUNET_SCHEDULER_add_now (GNUNET_SCHEDULER_TaskCallback task, void *task_cls)
+GNUNET_SCHEDULER_add_now (GNUNET_SCHEDULER_TaskCallback task,
+                         void *task_cls)
 {
-  return GNUNET_SCHEDULER_add_delayed (GNUNET_TIME_UNIT_ZERO, task, task_cls);
+  return GNUNET_SCHEDULER_add_delayed (GNUNET_TIME_UNIT_ZERO,
+                                      task,
+                                      task_cls);
 }
 
 
 /**
+ * Schedule a new task to be run on shutdown, that is when a CTRL-C
+ * signal is received, or when #GNUNET_SCHEDULER_shutdown() is being
+ * invoked.
+ *
+ * @param task main function of the task
+ * @param task_cls closure of @a task
+ * @return unique task identifier for the job
+ *         only valid until @a task is started!
+ */
+struct GNUNET_SCHEDULER_Task *
+GNUNET_SCHEDULER_add_shutdown (GNUNET_SCHEDULER_TaskCallback task,
+                              void *task_cls)
+{
+  struct GNUNET_SCHEDULER_Task *t;
+
+  GNUNET_assert (NULL != active_task);
+  GNUNET_assert (NULL != task);
+  t = GNUNET_new (struct GNUNET_SCHEDULER_Task);
+  t->callback = task;
+  t->callback_cls = task_cls;
+  t->read_fd = -1;
+  t->write_fd = -1;
+#if PROFILE_DELAYS
+  t->start_time = GNUNET_TIME_absolute_get ();
+#endif
+  t->timeout = GNUNET_TIME_UNIT_FOREVER_ABS;
+  t->priority = GNUNET_SCHEDULER_PRIORITY_SHUTDOWN;
+  t->on_shutdown = GNUNET_YES;
+  t->lifeness = GNUNET_YES;
+  GNUNET_CONTAINER_DLL_insert (shutdown_head,
+                              shutdown_tail,
+                              t);
+  LOG (GNUNET_ERROR_TYPE_DEBUG,
+       "Adding task: %p\n",
+       t);
+  init_backtrace (t);
+  return t;
+}
+
+
+/**
  * Schedule a new task to be run as soon as possible with the
  * (transitive) ignore-shutdown flag either explicitly set or
  * explicitly enabled.  This task (and all tasks created from it,
@@ -1246,12 +1305,10 @@
  * (prerequisite-run)
  * && (delay-ready
  *     || any-rs-ready
- *     || any-ws-ready
- *     || shutdown-active )
+ *     || any-ws-ready)
  * </code>
  *
- * @param delay how long should we wait? Use #GNUNET_TIME_UNIT_FOREVER_REL for 
"forever",
- *        which means that the task will only be run after we receive SIGTERM
+ * @param delay how long should we wait?
  * @param priority priority to use
  * @param rfd file descriptor we want to read (can be -1)
  * @param wfd file descriptors we want to write (can be -1)
@@ -1271,20 +1328,11 @@
 {
   struct GNUNET_SCHEDULER_Task *t;
 
-#if EXECINFO
-  void *backtrace_array[MAX_TRACE_DEPTH];
-#endif
-
   GNUNET_assert (NULL != active_task);
   GNUNET_assert (NULL != task);
   t = GNUNET_new (struct GNUNET_SCHEDULER_Task);
   t->callback = task;
   t->callback_cls = task_cls;
-#if EXECINFO
-  t->num_backtrace_strings = backtrace (backtrace_array, MAX_TRACE_DEPTH);
-  t->backtrace_strings =
-      backtrace_symbols (backtrace_array, t->num_backtrace_strings);
-#endif
 #if DEBUG_FDS
   if (-1 != rfd)
   {
@@ -1295,14 +1343,7 @@
       LOG (GNUNET_ERROR_TYPE_ERROR,
            "Got invalid file descriptor %d!\n",
            rfd);
-#if EXECINFO
-      unsigned int i;
-
-      for (i = 0; i < t->num_backtrace_strings; i++)
-        LOG (GNUNET_ERROR_TYPE_ERROR,
-             "Trace: %s\n",
-             t->backtrace_strings[i]);
-#endif
+      init_backtrace (t);
       GNUNET_assert (0);
     }
   }
@@ -1315,14 +1356,7 @@
       LOG (GNUNET_ERROR_TYPE_ERROR,
            "Got invalid file descriptor %d!\n",
            wfd);
-#if EXECINFO
-      unsigned int i;
-
-      for (i = 0; i < t->num_backtrace_strings; i++)
-        LOG (GNUNET_ERROR_TYPE_DEBUG,
-             "Trace: %s\n",
-             t->backtrace_strings[i]);
-#endif
+      init_backtrace (t);
       GNUNET_assert (0);
     }
   }
@@ -1344,16 +1378,7 @@
   LOG (GNUNET_ERROR_TYPE_DEBUG,
        "Adding task %p\n",
        t);
-#if EXECINFO
-  unsigned int i;
-
-  for (i = 0; i < t->num_backtrace_strings; i++)
-    LOG (GNUNET_ERROR_TYPE_DEBUG,
-         "Task %p trace %d: %s\n",
-         t,
-         i,
-         t->backtrace_strings[i]);
-#endif
+  init_backtrace (t);
   return t;
 }
 #endif
@@ -1366,8 +1391,7 @@
  * scheduled for execution once either the delay has expired or the
  * socket operation is ready.  It will be run with the DEFAULT priority.
  *
- * @param delay when should this operation time out? Use
- *        #GNUNET_TIME_UNIT_FOREVER_REL for "on shutdown"
+ * @param delay when should this operation time out? 
  * @param rfd read file-descriptor
  * @param task main function of the task
  * @param task_cls closure of @a task
@@ -1394,8 +1418,7 @@
  * either the delay has expired or the socket operation is ready.  It
  * will be run with the DEFAULT priority.
  *
- * @param delay when should this operation time out? Use
- *        #GNUNET_TIME_UNIT_FOREVER_REL for "on shutdown"
+ * @param delay when should this operation time out?
  * @param priority priority to use for the task
  * @param rfd read file-descriptor
  * @param task main function of the task
@@ -1426,8 +1449,7 @@
  * socket operation is ready.  It will be run with the priority of
  * the calling task.
  *
- * @param delay when should this operation time out? Use
- *        #GNUNET_TIME_UNIT_FOREVER_REL for "on shutdown"
+ * @param delay when should this operation time out?
  * @param wfd write file-descriptor
  * @param task main function of the task
  * @param task_cls closure of @a task
@@ -1454,8 +1476,7 @@
  * scheduled for execution once either the delay has expired or the
  * socket operation is ready.
  *
- * @param delay when should this operation time out? Use
- *        #GNUNET_TIME_UNIT_FOREVER_REL for "on shutdown"
+ * @param delay when should this operation time out?
  * @param priority priority of the task
  * @param fd file-descriptor
  * @param on_read whether to poll the file-descriptor for readability
@@ -1505,8 +1526,7 @@
  * scheduled for execution once either the delay has expired or the
  * socket operation is ready. It will be run with the DEFAULT priority.
  *
- * @param delay when should this operation time out? Use
- *        #GNUNET_TIME_UNIT_FOREVER_REL for "on shutdown"
+ * @param delay when should this operation time out?
  * @param rfd read file-descriptor
  * @param task main function of the task
  * @param task_cls closure of @a task
@@ -1532,8 +1552,7 @@
  * scheduled for execution once either the delay has expired or the
  * socket operation is ready. It will be run with the DEFAULT priority.
  *
- * @param delay when should this operation time out? Use
- *        #GNUNET_TIME_UNIT_FOREVER_REL for "on shutdown"
+ * @param delay when should this operation time out?
  * @param wfd write file-descriptor
  * @param task main function of the task
  * @param task_cls closure of @a task
@@ -1559,8 +1578,7 @@
  * scheduled for execution once either the delay has expired or the
  * socket operation is ready.
  *
- * @param delay when should this operation time out? Use
- *        #GNUNET_TIME_UNIT_FOREVER_REL for "on shutdown"
+ * @param delay when should this operation time out?
  * @param priority priority of the task
  * @param fd file-descriptor
  * @param on_read whether to poll the file-descriptor for readability
@@ -1618,13 +1636,11 @@
  * (prerequisite-run)
  * && (delay-ready
  *     || any-rs-ready
- *     || any-ws-ready
- *     || (shutdown-active && run-on-shutdown) )
+ *     || any-ws-ready) )
  * </code>
  *
  * @param prio how important is this task?
- * @param delay how long should we wait? Use #GNUNET_TIME_UNIT_FOREVER_REL for 
"forever",
- *        which means that the task will only be run after we receive SIGTERM
+ * @param delay how long should we wait? 
  * @param rs set of file descriptors we want to read (can be NULL)
  * @param ws set of file descriptors we want to write (can be NULL)
  * @param task main function of the task
@@ -1641,9 +1657,6 @@
                              void *task_cls)
 {
   struct GNUNET_SCHEDULER_Task *t;
-#if EXECINFO
-  void *backtrace_array[MAX_TRACE_DEPTH];
-#endif
 
   if ( (NULL == rs) &&
        (NULL == ws) )
@@ -1656,11 +1669,6 @@
   t = GNUNET_new (struct GNUNET_SCHEDULER_Task);
   t->callback = task;
   t->callback_cls = task_cls;
-#if EXECINFO
-  t->num_backtrace_strings = backtrace (backtrace_array, MAX_TRACE_DEPTH);
-  t->backtrace_strings =
-      backtrace_symbols (backtrace_array, t->num_backtrace_strings);
-#endif
   t->read_fd = -1;
   t->write_fd = -1;
   if (NULL != rs)
@@ -1689,16 +1697,7 @@
   LOG (GNUNET_ERROR_TYPE_DEBUG,
        "Adding task %p\n",
        t);
-#if EXECINFO
-  int i;
-
-  for (i = 0; i < t->num_backtrace_strings; i++)
-    LOG (GNUNET_ERROR_TYPE_DEBUG,
-         "Task p trace %d: %s\n",
-         t,
-         i,
-         t->backtrace_strings[i]);
-#endif
+  init_backtrace (t);
   return t;
 }
 

Modified: gnunet/src/util/server.c
===================================================================
--- gnunet/src/util/server.c    2016-04-30 08:16:14 UTC (rev 37101)
+++ gnunet/src/util/server.c    2016-04-30 08:17:37 UTC (rev 37102)
@@ -400,12 +400,6 @@
 
   server->listen_task = NULL;
   tc = GNUNET_SCHEDULER_get_task_context ();
-  if (0 != (tc->reason & GNUNET_SCHEDULER_REASON_SHUTDOWN))
-  {
-    /* ignore shutdown, someone else will take care of it! */
-    GNUNET_SERVER_resume (server);
-    return;
-  }
   for (i = 0; NULL != server->listen_sockets[i]; i++)
   {
     if (GNUNET_NETWORK_fdset_isset (tc->read_ready,
@@ -437,7 +431,8 @@
  * @return NULL on error, otherwise the listen socket
  */
 static struct GNUNET_NETWORK_Handle *
-open_listen_socket (const struct sockaddr *server_addr, socklen_t socklen)
+open_listen_socket (const struct sockaddr *server_addr,
+                   socklen_t socklen)
 {
   struct GNUNET_NETWORK_Handle *sock;
   uint16_t port;
@@ -683,7 +678,7 @@
     if (GNUNET_NO == client->is_monitor)
       return; /* not done yet */
   server->in_soft_shutdown = GNUNET_SYSERR;
-  GNUNET_SCHEDULER_add_now (&do_destroy, server);
+  (void) GNUNET_SCHEDULER_add_now (&do_destroy, server);
 }
 
 
@@ -720,8 +715,8 @@
     return; /* nothing to do, no listen sockets! */
   if (NULL == server->listen_sockets[1])
   {
-    /* simplified method: no fd set needed; this is then much simpler and
-       much more efficient */
+    /* simplified method: no fd set needed; this is then much simpler
+       and much more efficient */
     server->listen_task =
       GNUNET_SCHEDULER_add_read_net_with_priority 
(GNUNET_TIME_UNIT_FOREVER_REL,
                                                   
GNUNET_SCHEDULER_PRIORITY_HIGH,
@@ -890,18 +885,16 @@
 warn_no_receive_done (void *cls)
 {
   struct GNUNET_SERVER_Client *client = cls;
-  const struct GNUNET_SCHEDULER_TaskContext *tc;
 
   GNUNET_break (0 != client->warn_type); /* type should never be 0 here, as we 
don't use 0 */
   client->warn_task =
       GNUNET_SCHEDULER_add_delayed (GNUNET_TIME_UNIT_MINUTES,
                                     &warn_no_receive_done, client);
-  tc = GNUNET_SCHEDULER_get_task_context ();
-  if (0 == (GNUNET_SCHEDULER_REASON_SHUTDOWN & tc->reason))
-    LOG (GNUNET_ERROR_TYPE_WARNING,
-         _("Processing code for message of type %u did not call 
`GNUNET_SERVER_receive_done' after %s\n"),
-         (unsigned int) client->warn_type,
-         GNUNET_STRINGS_relative_time_to_string 
(GNUNET_TIME_absolute_get_duration (client->warn_start), GNUNET_YES));
+  LOG (GNUNET_ERROR_TYPE_WARNING,
+       _("Processing code for message of type %u did not call 
`GNUNET_SERVER_receive_done' after %s\n"),
+       (unsigned int) client->warn_type,
+       GNUNET_STRINGS_relative_time_to_string 
(GNUNET_TIME_absolute_get_duration (client->warn_start),
+                                              GNUNET_YES));
 }
 
 
@@ -987,7 +980,8 @@
             sender->warn_start = GNUNET_TIME_absolute_get ();
             sender->warn_task =
                 GNUNET_SCHEDULER_add_delayed (GNUNET_TIME_UNIT_MINUTES,
-                                              &warn_no_receive_done, sender);
+                                              &warn_no_receive_done,
+                                             sender);
             sender->warn_type = type;
           }
           sender->suspended++;

Modified: gnunet/src/util/service.c
===================================================================
--- gnunet/src/util/service.c   2016-04-30 08:16:14 UTC (rev 37101)
+++ gnunet/src/util/service.c   2016-04-30 08:17:37 UTC (rev 37102)
@@ -187,7 +187,7 @@
   /**
    * Task ID of the shutdown task.
    */
-  struct GNUNET_SCHEDULER_Task * shutdown_task;
+  struct GNUNET_SCHEDULER_Task *shutdown_task;
 
   /**
    * Idle timeout for server.
@@ -1151,11 +1151,7 @@
 {
   struct GNUNET_SERVICE_Context *sctx = cls;
   unsigned int i;
-  const struct GNUNET_SCHEDULER_TaskContext *tc;
 
-  tc = GNUNET_SCHEDULER_get_task_context ();
-  if (0 != (GNUNET_SCHEDULER_REASON_SHUTDOWN & tc->reason))
-    return;
   (void) GNUNET_SPEEDUP_start_ (sctx->cfg);
   GNUNET_RESOLVER_connect (sctx->cfg);
   if (NULL != sctx->lsocks)
@@ -1191,9 +1187,8 @@
   {
     /* install a task that will kill the server
      * process if the scheduler ever gets a shutdown signal */
-    sctx->shutdown_task = GNUNET_SCHEDULER_add_delayed 
(GNUNET_TIME_UNIT_FOREVER_REL,
-                                                        &shutdown_task,
-                                                       sctx);
+    sctx->shutdown_task = GNUNET_SCHEDULER_add_shutdown (&shutdown_task,
+                                                        sctx);
   }
   sctx->my_handlers = GNUNET_malloc (sizeof (defhandlers));
   memcpy (sctx->my_handlers, defhandlers, sizeof (defhandlers));

Modified: gnunet/src/util/socks.c
===================================================================
--- gnunet/src/util/socks.c     2016-04-30 08:16:14 UTC (rev 37101)
+++ gnunet/src/util/socks.c     2016-04-30 08:17:37 UTC (rev 37102)
@@ -328,7 +328,6 @@
  * @param buf where the callee should write the message
  * @return number of bytes written to @a buf
  */
-
 size_t
 transmit_ready (void *cls,
                 size_t size,
@@ -353,29 +352,19 @@
    * successful operations, including DNS resolution, do not use this.  */
   if (NULL == buf)
   {
-    const struct GNUNET_SCHEDULER_TaskContext *tc;
-
-    tc = GNUNET_SCHEDULER_get_task_context ();
-    if (0 != (tc->reason & GNUNET_SCHEDULER_REASON_SHUTDOWN))
-      return 0;
-    if (0 != (tc->reason & GNUNET_SCHEDULER_REASON_TIMEOUT)) {
-      if (0==ih->step)
-      {
-        LOG (GNUNET_ERROR_TYPE_WARNING,
-             "Timeout contacting SOCKS server, retrying indefinitely, but 
probably hopeless.\n");
-        register_sender (ih);
-      }
-      else
-      {
-        LOG (GNUNET_ERROR_TYPE_ERROR,
-             "Timeout during mid SOCKS handshake (step %u), probably not a 
SOCKS server.\n",
-             ih->step);
-        GNUNET_break (0);
-      }
-      return 0;
+    if (0 == ih->step)
+    {
+      LOG (GNUNET_ERROR_TYPE_WARNING,
+          "Timeout contacting SOCKS server, retrying indefinitely, but 
probably hopeless.\n");
+      register_sender (ih);
     }
-    /* if (reason == 48) register_sender (ih); */
-    /* GNUNET_break(0); */
+    else
+    {
+      LOG (GNUNET_ERROR_TYPE_ERROR,
+          "Timeout during mid SOCKS handshake (step %u), probably not a SOCKS 
server.\n",
+          ih->step);
+      GNUNET_break (0);
+    }
     return 0;
   }
 

Modified: gnunet/src/util/speedup.c
===================================================================
--- gnunet/src/util/speedup.c   2016-04-30 08:16:14 UTC (rev 37101)
+++ gnunet/src/util/speedup.c   2016-04-30 08:17:37 UTC (rev 37102)
@@ -41,18 +41,16 @@
 do_speedup (void *cls)
 {
   static long long current_offset;
-  const struct GNUNET_SCHEDULER_TaskContext *tc;
 
   speedup_task = NULL;
-  tc = GNUNET_SCHEDULER_get_task_context ();
-  if (0 != (GNUNET_SCHEDULER_REASON_SHUTDOWN & tc->reason))
-    return;
   current_offset += delta.rel_value_us;
   GNUNET_TIME_set_offset (current_offset);
   LOG (GNUNET_ERROR_TYPE_DEBUG,
        "Speeding up execution time by %s\n",
        GNUNET_STRINGS_relative_time_to_string (delta, GNUNET_NO));
-  speedup_task = GNUNET_SCHEDULER_add_delayed (interval, &do_speedup, NULL);
+  speedup_task = GNUNET_SCHEDULER_add_delayed (interval,
+                                              &do_speedup,
+                                              NULL);
 }
 
 
@@ -65,16 +63,22 @@
 int
 GNUNET_SPEEDUP_start_ (const struct GNUNET_CONFIGURATION_Handle *cfg)
 {
+  GNUNET_assert (NULL == speedup_task);
   if (GNUNET_OK !=
-      GNUNET_CONFIGURATION_get_value_time (cfg, "testing",
-                                           "SPEEDUP_INTERVAL", &interval))
+      GNUNET_CONFIGURATION_get_value_time (cfg,
+                                          "testing",
+                                           "SPEEDUP_INTERVAL",
+                                          &interval))
     return GNUNET_SYSERR;
   if (GNUNET_OK !=
-      GNUNET_CONFIGURATION_get_value_time (cfg, "testing",
-                                           "SPEEDUP_DELTA", &delta))
+      GNUNET_CONFIGURATION_get_value_time (cfg,
+                                          "testing",
+                                           "SPEEDUP_DELTA",
+                                          &delta))
     return GNUNET_SYSERR;
 
-  if ((0 == interval.rel_value_us) || (0 == delta.rel_value_us))
+  if ( (0 == interval.rel_value_us) ||
+       (0 == delta.rel_value_us) )
   {
     LOG (GNUNET_ERROR_TYPE_DEBUG,
         "Speed up disabled\n");
@@ -87,7 +91,8 @@
        "Speed up executed every %s\n",
        GNUNET_STRINGS_relative_time_to_string (interval, GNUNET_NO));
   speedup_task = GNUNET_SCHEDULER_add_now_with_lifeness (GNUNET_NO,
-                                                         &do_speedup, NULL);
+                                                         &do_speedup,
+                                                        NULL);
   return GNUNET_OK;
 }
 
@@ -109,6 +114,4 @@
         "Stopped execution speed up\n");
 }
 
-
-
 /* end of speedup.c */

Modified: gnunet/src/util/test_common_logging_runtime_loglevels.c
===================================================================
--- gnunet/src/util/test_common_logging_runtime_loglevels.c     2016-04-30 
08:16:14 UTC (rev 37101)
+++ gnunet/src/util/test_common_logging_runtime_loglevels.c     2016-04-30 
08:17:37 UTC (rev 37102)
@@ -234,7 +234,8 @@
     FPRINTF (stderr, "got %d bytes, reading more\n", rd);
 #endif
     read_task = GNUNET_SCHEDULER_add_read_file (GNUNET_TIME_UNIT_FOREVER_REL,
-                                               stdout_read_handle, &read_call,
+                                               stdout_read_handle,
+                                               &read_call,
                                                (void*) stdout_read_handle);
     return;
   }
@@ -411,7 +412,8 @@
 
   die_task =
       GNUNET_SCHEDULER_add_delayed (GNUNET_TIME_relative_multiply
-                                    (GNUNET_TIME_UNIT_SECONDS, 10), &end_task,
+                                    (GNUNET_TIME_UNIT_SECONDS, 10),
+                                   &end_task,
                                     NULL);
 
   bytes = 0;
@@ -419,7 +421,8 @@
   memset (&buf, 0, sizeof (buf));
 
   read_task = GNUNET_SCHEDULER_add_read_file (GNUNET_TIME_UNIT_FOREVER_REL,
-                                             stdout_read_handle, &read_call,
+                                             stdout_read_handle,
+                                             &read_call,
                                              (void*) stdout_read_handle);
 }
 

Modified: gnunet/src/util/test_connection_receive_cancel.c
===================================================================
--- gnunet/src/util/test_connection_receive_cancel.c    2016-04-30 08:16:14 UTC 
(rev 37101)
+++ gnunet/src/util/test_connection_receive_cancel.c    2016-04-30 08:17:37 UTC 
(rev 37102)
@@ -60,7 +60,8 @@
   GNUNET_assert (desc != NULL);
   if (GNUNET_NETWORK_socket_setsockopt
       (desc, SOL_SOCKET, SO_REUSEADDR, &on, sizeof (on)) != GNUNET_OK)
-    GNUNET_log (GNUNET_ERROR_TYPE_ERROR | GNUNET_ERROR_TYPE_BULK, 
"setsockopt");
+    GNUNET_log (GNUNET_ERROR_TYPE_ERROR | GNUNET_ERROR_TYPE_BULK,
+               "setsockopt");
   GNUNET_assert (GNUNET_OK ==
                 GNUNET_NETWORK_socket_bind (desc, (const struct sockaddr *) 
&sa,
                                             sizeof (sa)));
@@ -69,10 +70,13 @@
 }
 
 
-
 static void
-dead_receive (void *cls, const void *buf, size_t available,
-              const struct sockaddr *addr, socklen_t addrlen, int errCode)
+dead_receive (void *cls,
+             const void *buf,
+             size_t available,
+              const struct sockaddr *addr,
+             socklen_t addrlen,
+             int errCode)
 {
   GNUNET_assert (0);
 }
@@ -87,7 +91,8 @@
   GNUNET_CONNECTION_destroy (lsock);
   GNUNET_CONNECTION_receive (asock, 1024,
                              GNUNET_TIME_relative_multiply
-                             (GNUNET_TIME_UNIT_SECONDS, 5), &dead_receive, 
cls);
+                             (GNUNET_TIME_UNIT_SECONDS, 5),
+                            &dead_receive, cls);
 }
 
 
@@ -103,7 +108,6 @@
 }
 
 
-
 static void
 task_receive_cancel (void *cls)
 {
@@ -112,14 +116,16 @@
   GNUNET_assert (lsock != NULL);
   csock = GNUNET_CONNECTION_create_from_connect (cfg, "localhost", PORT);
   GNUNET_assert (csock != NULL);
-  GNUNET_SCHEDULER_add_read_net (GNUNET_TIME_UNIT_FOREVER_REL, ls,
-                                 &run_accept_cancel, cls);
-  GNUNET_SCHEDULER_add_delayed (GNUNET_TIME_UNIT_SECONDS, &receive_cancel_task,
+  GNUNET_SCHEDULER_add_read_net (GNUNET_TIME_UNIT_FOREVER_REL,
+                                ls,
+                                 &run_accept_cancel,
+                                cls);
+  GNUNET_SCHEDULER_add_delayed (GNUNET_TIME_UNIT_SECONDS,
+                               &receive_cancel_task,
                                 cls);
 }
 
 
-
 /**
  * Main method, starts scheduler with task_timeout.
  */
@@ -130,7 +136,9 @@
 
   ok = 1;
   cfg = GNUNET_CONFIGURATION_create ();
-  GNUNET_CONFIGURATION_set_value_string (cfg, "resolver", "HOSTNAME",
+  GNUNET_CONFIGURATION_set_value_string (cfg,
+                                        "resolver",
+                                        "HOSTNAME",
                                          "localhost");
   GNUNET_SCHEDULER_run (&task_receive_cancel, &ok);
   GNUNET_CONFIGURATION_destroy (cfg);

Modified: gnunet/src/util/test_disk.c
===================================================================
--- gnunet/src/util/test_disk.c 2016-04-30 08:16:14 UTC (rev 37101)
+++ gnunet/src/util/test_disk.c 2016-04-30 08:17:37 UTC (rev 37102)
@@ -28,6 +28,7 @@
 
 #define TESTSTRING "Hello World\0"
 
+
 static int
 testReadWrite ()
 {
@@ -79,6 +80,7 @@
   return 0;
 }
 
+
 static int
 testOpenClose ()
 {
@@ -104,6 +106,7 @@
 
 static int ok;
 
+
 static int
 scan_callback (void *want, const char *filename)
 {
@@ -112,26 +115,50 @@
   return GNUNET_OK;
 }
 
+
 static int
 testDirScan ()
 {
   if (GNUNET_OK !=
       GNUNET_DISK_directory_create ("test" DIR_SEPARATOR_STR "entry"))
+  {
+    GNUNET_break (0);
     return 1;
+  }
   if (GNUNET_OK !=
       GNUNET_DISK_directory_create ("test" DIR_SEPARATOR_STR "entry_more"))
+  {
+    GNUNET_break (0);
     return 1;
+  }
   GNUNET_DISK_directory_scan ("test", &scan_callback,
                               "test" DIR_SEPARATOR_STR "entry");
   if (GNUNET_OK != GNUNET_DISK_directory_remove ("test"))
+  {
+    GNUNET_break (0);
     return 1;
+  }
   if (ok < 2)
+  {
+    GNUNET_break (0);
     return 1;
+  }
   return 0;
 }
 
 
 static int
+iter_callback (void *cls,
+              const char *filename)
+{
+  int *i = cls;
+  
+  (*i)++;
+  return GNUNET_OK;
+}
+
+
+static int
 testDirIter ()
 {
   int i;
@@ -138,15 +165,33 @@
 
   i = 0;
   if (GNUNET_OK != GNUNET_DISK_directory_create ("test/entry"))
+  {
+    GNUNET_break (0);
     return 1;
+  }
   if (GNUNET_OK != GNUNET_DISK_directory_create ("test/entry_many"))
+  {
+    GNUNET_break (0);
     return 1;
+  }
   if (GNUNET_OK != GNUNET_DISK_directory_create ("test/entry_more"))
+  {
+    GNUNET_break (0);
     return 1;
+  }
+  GNUNET_DISK_directory_scan ("test",
+                             &iter_callback,
+                              &i);
   if (GNUNET_OK != GNUNET_DISK_directory_remove ("test"))
+  {
+    GNUNET_break (0);
     return 1;
+  }
   if (i < 3)
+  {
+    GNUNET_break (0);
     return 1;
+  }
   return 0;
 }
 
@@ -183,19 +228,40 @@
 testDirMani ()
 {
   if (GNUNET_OK != GNUNET_DISK_directory_create_for_file ("test/ing"))
+  {
+    GNUNET_break (0);
     return 1;
+  }
   if (GNUNET_NO != GNUNET_DISK_file_test ("test"))
+  {
+    GNUNET_break (0);
     return 1;
+  }
   if (GNUNET_NO != GNUNET_DISK_file_test ("test/ing"))
+  {
+    GNUNET_break (0);
     return 1;
+  }
   if (GNUNET_OK != GNUNET_DISK_directory_remove ("test"))
+  {
+    GNUNET_break (0);
     return 1;
+  }
   if (GNUNET_OK != GNUNET_DISK_directory_create ("test"))
+  {
+    GNUNET_break (0);
     return 1;
+  }
   if (GNUNET_YES != GNUNET_DISK_directory_test ("test", GNUNET_YES))
+  {
+    GNUNET_break (0);
     return 1;
+  }
   if (GNUNET_OK != GNUNET_DISK_directory_remove ("test"))
+  {
+    GNUNET_break (0);
     return 1;
+  }
   return 0;
 }
 
@@ -213,9 +279,11 @@
   failureCount += testCanonicalize ();
   failureCount += testChangeOwner ();
   failureCount += testDirMani ();
-  if (failureCount != 0)
+  if (0 != failureCount)
   {
-    FPRINTF (stderr, "\n%u TESTS FAILED!\n", failureCount);
+    FPRINTF (stderr,
+            "\n%u TESTS FAILED!\n",
+            failureCount);
     return -1;
   }
   return 0;

Modified: gnunet/src/util/test_os_start_process.c
===================================================================
--- gnunet/src/util/test_os_start_process.c     2016-04-30 08:16:14 UTC (rev 
37101)
+++ gnunet/src/util/test_os_start_process.c     2016-04-30 08:17:37 UTC (rev 
37102)
@@ -55,8 +55,10 @@
   const struct GNUNET_DISK_FileHandle *stdout_read_handle;
 };
 
-struct read_context rc;
 
+static struct read_context rc;
+
+
 static void
 end_task (void *cls)
 {
@@ -77,35 +79,39 @@
 {
   int bytes;
 
-  bytes = GNUNET_DISK_file_read (rc.stdout_read_handle, 
&rc.buf[rc.buf_offset], \
-      sizeof (rc.buf) - rc.buf_offset);
+  bytes = GNUNET_DISK_file_read (rc.stdout_read_handle,
+                                &rc.buf[rc.buf_offset],
+                                sizeof (rc.buf) - rc.buf_offset);
+  GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
+             "bytes is %d\n",
+             bytes);
 
-  GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "bytes is %d\n", bytes);
-
   if (bytes < 1)
   {
     GNUNET_break (0);
     ok = 1;
     GNUNET_SCHEDULER_cancel (die_task);
-    GNUNET_SCHEDULER_add_now (&end_task, NULL);
+    (void) GNUNET_SCHEDULER_add_now (&end_task, NULL);
     return;
   }
 
   ok = strncmp (rc.buf, test_phrase, strlen (test_phrase));
-  GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "read %s\n", &rc.buf[rc.buf_offset]);
+  GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
+             "read %s\n",
+             &rc.buf[rc.buf_offset]);
   rc.buf_offset += bytes;
 
   if (0 == ok)
   {
     GNUNET_SCHEDULER_cancel (die_task);
-    GNUNET_SCHEDULER_add_now (&end_task, NULL);
+    (void) GNUNET_SCHEDULER_add_now (&end_task, NULL);
     return;
   }
 
   GNUNET_SCHEDULER_add_read_file (GNUNET_TIME_UNIT_FOREVER_REL,
-                                  rc.stdout_read_handle, &read_call,
+                                  rc.stdout_read_handle,
+                                 &read_call,
                                   NULL);
-
 }
 
 
@@ -164,13 +170,15 @@
 
   die_task =
       GNUNET_SCHEDULER_add_delayed (GNUNET_TIME_relative_multiply
-                                    (GNUNET_TIME_UNIT_MINUTES, 1), &end_task,
+                                    (GNUNET_TIME_UNIT_MINUTES, 1),
+                                   &end_task,
                                     NULL);
 
   memset (&rc, 0, sizeof (rc));
   rc.stdout_read_handle = stdout_read_handle;
   GNUNET_SCHEDULER_add_read_file (GNUNET_TIME_UNIT_FOREVER_REL,
-                                  stdout_read_handle, &read_call,
+                                  stdout_read_handle,
+                                 &read_call,
                                   NULL);
 }
 
@@ -205,9 +213,12 @@
   fn = GNUNET_OS_get_libexec_binary_path ("gnunet-service-resolver");
   proc =
     GNUNET_OS_start_process (GNUNET_YES, GNUNET_OS_INHERIT_STD_ERR,
-                             hello_pipe_stdin, hello_pipe_stdout, NULL,
+                             hello_pipe_stdin,
+                            hello_pipe_stdout,
+                            NULL,
                              fn,
-                            "gnunet-service-resolver", "-", NULL);
+                            "gnunet-service-resolver", "-",
+                            NULL);
   sleep (1); /* give process time to start, so we actually use the pipe-kill 
mechanism! */
   GNUNET_free (fn);
   if (0 != GNUNET_OS_process_kill (proc, GNUNET_TERM_SIG))

Modified: gnunet/src/util/test_scheduler.c
===================================================================
--- gnunet/src/util/test_scheduler.c    2016-04-30 08:16:14 UTC (rev 37101)
+++ gnunet/src/util/test_scheduler.c    2016-04-30 08:17:37 UTC (rev 37102)
@@ -25,7 +25,7 @@
 #include "gnunet_util_lib.h"
 
 
-struct GNUNET_DISK_PipeHandle *p;
+static struct GNUNET_DISK_PipeHandle *p;
 
 static const struct GNUNET_DISK_FileHandle *fds[2];
 
@@ -80,7 +80,6 @@
 {
   int *ok = cls;
 
-  /* t4 should be ready (albeit with lower priority) */
   GNUNET_assert (8 == *ok);
   (*ok) = 0;
 }
@@ -98,8 +97,8 @@
   GNUNET_assert (GNUNET_NETWORK_fdset_handle_isset (tc->read_ready, fds[0]));
   GNUNET_assert (1 == GNUNET_DISK_file_read (fds[0], &c, 1));
   (*ok) = 8;
-  GNUNET_SCHEDULER_add_with_priority (GNUNET_SCHEDULER_PRIORITY_IDLE, 
&taskLast,
-                                      cls);
+  GNUNET_SCHEDULER_add_shutdown (&taskLast,
+                                cls);
   GNUNET_SCHEDULER_shutdown ();
 }
 
@@ -115,10 +114,14 @@
   GNUNET_assert (NULL != p);
   fds[0] = GNUNET_DISK_pipe_handle (p, GNUNET_DISK_PIPE_END_READ);
   fds[1] = GNUNET_DISK_pipe_handle (p, GNUNET_DISK_PIPE_END_WRITE);
-  GNUNET_SCHEDULER_add_read_file (GNUNET_TIME_UNIT_FOREVER_REL, fds[0], 
&taskRd,
+  GNUNET_SCHEDULER_add_read_file (GNUNET_TIME_UNIT_FOREVER_REL,
+                                 fds[0],
+                                 &taskRd,
                                   cls);
-  GNUNET_SCHEDULER_add_write_file (GNUNET_TIME_UNIT_FOREVER_REL, fds[1],
-                                   &taskWrt, cls);
+  GNUNET_SCHEDULER_add_write_file (GNUNET_TIME_UNIT_FOREVER_REL,
+                                  fds[1],
+                                   &taskWrt,
+                                  cls);
 }
 
 
@@ -130,9 +133,12 @@
   GNUNET_assert (1 == *ok);
   (*ok) = 2;
   GNUNET_SCHEDULER_add_now (&task3, cls);
-  GNUNET_SCHEDULER_add_with_priority (GNUNET_SCHEDULER_PRIORITY_UI, &task2,
+  GNUNET_SCHEDULER_add_with_priority (GNUNET_SCHEDULER_PRIORITY_UI,
+                                     &task2,
                                       cls);
-  GNUNET_SCHEDULER_add_delayed (GNUNET_TIME_UNIT_SECONDS, &task4, cls);
+  GNUNET_SCHEDULER_add_delayed (GNUNET_TIME_UNIT_SECONDS,
+                               &task4,
+                               cls);
 }
 
 
@@ -158,7 +164,7 @@
 
   GNUNET_assert (1 == *ok);
   *ok = 8;
-  GNUNET_SCHEDULER_add_delayed (GNUNET_TIME_UNIT_FOREVER_REL, &taskLast, cls);
+  GNUNET_SCHEDULER_add_shutdown (&taskLast, cls);
   GNUNET_SCHEDULER_shutdown ();
 }
 
@@ -186,8 +192,9 @@
 
   GNUNET_assert (1 == *ok);
   *ok = 8;
-  GNUNET_SCHEDULER_add_delayed (GNUNET_TIME_UNIT_FOREVER_REL, &taskLast, cls);
-  GNUNET_break (0 == PLIBC_KILL (getpid (), GNUNET_TERM_SIG));
+  GNUNET_SCHEDULER_add_shutdown (&taskLast, cls);
+  GNUNET_break (0 == PLIBC_KILL (getpid (),
+                                GNUNET_TERM_SIG));
 }
 
 
@@ -214,8 +221,7 @@
 
   GNUNET_assert (1 == *ok);
   *ok = 0;
-  GNUNET_SCHEDULER_cancel (GNUNET_SCHEDULER_add_now
-                           (&taskNeverRun, NULL));
+  GNUNET_SCHEDULER_cancel (GNUNET_SCHEDULER_add_now (&taskNeverRun, NULL));
 }
 
 

Modified: gnunet/src/util/test_scheduler_delay.c
===================================================================
--- gnunet/src/util/test_scheduler_delay.c      2016-04-30 08:16:14 UTC (rev 
37101)
+++ gnunet/src/util/test_scheduler_delay.c      2016-04-30 08:17:37 UTC (rev 
37102)
@@ -62,7 +62,8 @@
     return;
   }
   GNUNET_SCHEDULER_add_delayed (GNUNET_TIME_relative_multiply
-                                (GNUNET_TIME_UNIT_MICROSECONDS, i), &test_task,
+                                (GNUNET_TIME_UNIT_MICROSECONDS, i),
+                               &test_task,
                                 NULL);
   i += INCR;
 }
@@ -71,7 +72,9 @@
 int
 main (int argc, char *argv[])
 {
-  GNUNET_log_setup ("test-scheduler-delay", "WARNING", NULL);
+  GNUNET_log_setup ("test-scheduler-delay",
+                   "WARNING",
+                   NULL);
   target = GNUNET_TIME_absolute_get ();
   GNUNET_SCHEDULER_run (&test_task, NULL);
   FPRINTF (stdout,

Modified: gnunet/src/util/test_server_disconnect.c
===================================================================
--- gnunet/src/util/test_server_disconnect.c    2016-04-30 08:16:14 UTC (rev 
37101)
+++ gnunet/src/util/test_server_disconnect.c    2016-04-30 08:17:37 UTC (rev 
37102)
@@ -76,7 +76,8 @@
 
 
 static void
-recv_cb (void *cls, struct GNUNET_SERVER_Client *client,
+recv_cb (void *cls,
+        struct GNUNET_SERVER_Client *client,
          const struct GNUNET_MessageHeader *message)
 {
   GNUNET_assert (ok == 2);

Modified: gnunet/src/util/test_server_with_client_unix.c
===================================================================
--- gnunet/src/util/test_server_with_client_unix.c      2016-04-30 08:16:14 UTC 
(rev 37101)
+++ gnunet/src/util/test_server_with_client_unix.c      2016-04-30 08:17:37 UTC 
(rev 37102)
@@ -50,7 +50,8 @@
 
 
 static void
-recv_cb (void *cls, struct GNUNET_SERVER_Client *argclient,
+recv_cb (void *cls,
+        struct GNUNET_SERVER_Client *argclient,
          const struct GNUNET_MessageHeader *message)
 {
   switch (ok)
@@ -57,9 +58,10 @@
   {
   case 2:
     ok++;
-    GNUNET_SCHEDULER_add_delayed (GNUNET_TIME_relative_multiply
-                                  (GNUNET_TIME_UNIT_MILLISECONDS, 50),
-                                  &send_done, argclient);
+    (void) GNUNET_SCHEDULER_add_delayed (GNUNET_TIME_relative_multiply
+                                        (GNUNET_TIME_UNIT_MILLISECONDS, 50),
+                                        &send_done,
+                                        argclient);
     break;
   case 4:
     ok++;
@@ -91,13 +93,14 @@
  * @param client identification of the client
  */
 static void
-notify_disconnect (void *cls, struct GNUNET_SERVER_Client *client)
+notify_disconnect (void *cls,
+                  struct GNUNET_SERVER_Client *client)
 {
   if (client == NULL)
     return;
   GNUNET_assert (ok == 5);
   ok = 0;
-  GNUNET_SCHEDULER_add_now (&clean_up, NULL);
+  (void) GNUNET_SCHEDULER_add_now (&clean_up, NULL);
 }
 
 

Modified: gnunet/src/util/test_speedup.c
===================================================================
--- gnunet/src/util/test_speedup.c      2016-04-30 08:16:14 UTC (rev 37101)
+++ gnunet/src/util/test_speedup.c      2016-04-30 08:17:37 UTC (rev 37102)
@@ -53,7 +53,9 @@
   fprintf (stderr, "..%u", cycles);
   if (cycles <= 5)
   {
-    GNUNET_SCHEDULER_add_delayed (GNUNET_TIME_UNIT_SECONDS, &run, NULL);
+    GNUNET_SCHEDULER_add_delayed (GNUNET_TIME_UNIT_SECONDS,
+                                 &run,
+                                 NULL);
     return;
   }
   end = GNUNET_TIME_absolute_get();
@@ -66,14 +68,14 @@
  *
  */
 static void
-check (void *cls, char *const *args,
+check (void *cls,
+       char *const *args,
        const char *cfgfile,
-       const struct GNUNET_CONFIGURATION_Handle *
-       cfg)
+       const struct GNUNET_CONFIGURATION_Handle *cfg)
 {
   fprintf (stderr, "0");
-  fflush(stdout);
-  GNUNET_SCHEDULER_add_now(&run, NULL);
+  fflush (stdout);
+  GNUNET_SCHEDULER_add_now (&run, NULL);
 }
 
 
@@ -80,7 +82,8 @@
 int
 main (int argc, char *argv[])
 {
-  static char *const argvn[] = { "test-speedup",
+  static char *const argvn[] = {
+    "test-speedup",
     "-c",  "test_speedup_data.conf",
     NULL
   };

Modified: gnunet/src/vpn/gnunet-service-vpn.c
===================================================================
--- gnunet/src/vpn/gnunet-service-vpn.c 2016-04-30 08:16:14 UTC (rev 37101)
+++ gnunet/src/vpn/gnunet-service-vpn.c 2016-04-30 08:17:37 UTC (rev 37102)
@@ -3099,9 +3099,8 @@
                                       &message_token, NULL, NULL);
   nc = GNUNET_SERVER_notification_context_create (server, 1);
   GNUNET_SERVER_add_handlers (server, service_handlers);
-  GNUNET_SCHEDULER_add_delayed (GNUNET_TIME_UNIT_FOREVER_REL,
-                                &cleanup,
-                                NULL);
+  GNUNET_SCHEDULER_add_shutdown (&cleanup,
+                                NULL);
 }
 
 

Modified: gnunet/src/vpn/gnunet-vpn.c
===================================================================
--- gnunet/src/vpn/gnunet-vpn.c 2016-04-30 08:16:14 UTC (rev 37101)
+++ gnunet/src/vpn/gnunet-vpn.c 2016-04-30 08:17:37 UTC (rev 37102)
@@ -163,7 +163,9 @@
  * @param cfg configuration
  */
 static void
-run (void *cls, char *const *args, const char *cfgfile,
+run (void *cls,
+     char *const *args,
+     const char *cfgfile,
      const struct GNUNET_CONFIGURATION_Handle *cfg)
 {
   int dst_af;
@@ -177,8 +179,7 @@
   struct GNUNET_TIME_Absolute etime;
 
   etime = GNUNET_TIME_relative_to_absolute (duration);
-  GNUNET_SCHEDULER_add_delayed (GNUNET_TIME_UNIT_FOREVER_REL,
-                               &do_disconnect, NULL);
+  GNUNET_SCHEDULER_add_shutdown (&do_disconnect, NULL);
   handle = GNUNET_VPN_connect (cfg);
   if (NULL == handle)
     goto error;

Modified: gnunet-fuse/src/fuse/gfs_download.c
===================================================================
--- gnunet-fuse/src/fuse/gfs_download.c 2016-04-30 08:16:14 UTC (rev 37101)
+++ gnunet-fuse/src/fuse/gfs_download.c 2016-04-30 08:17:37 UTC (rev 37102)
@@ -186,8 +186,7 @@
     ctx->fs = NULL;
     return;
   }
-  GNUNET_SCHEDULER_add_delayed (GNUNET_TIME_UNIT_FOREVER_REL,
-                               &shutdown_task, ctx);
+  GNUNET_SCHEDULER_add_shutdown (&shutdown_task, ctx);
 }
 
 

Modified: gnunet-gtk/src/conversation/gnunet-conversation-gtk.c
===================================================================
--- gnunet-gtk/src/conversation/gnunet-conversation-gtk.c       2016-04-30 
08:16:14 UTC (rev 37101)
+++ gnunet-gtk/src/conversation/gnunet-conversation-gtk.c       2016-04-30 
08:17:37 UTC (rev 37102)
@@ -191,9 +191,8 @@
     gtk_widget_show (main_window);
     gtk_window_present (GTK_WINDOW (main_window));
   }
-  GNUNET_SCHEDULER_add_delayed (GNUNET_TIME_UNIT_FOREVER_REL,
-                                &shutdown_task,
-                                NULL);
+  GNUNET_SCHEDULER_add_shutdown (&shutdown_task,
+                                NULL);
   if (NULL == ego_name)
     ego_name = GNUNET_strdup ("master-zone");
   GCG_HISTORY_init ();

Modified: gnunet-gtk/src/conversation/gnunet-conversation-gtk_import.c
===================================================================
--- gnunet-gtk/src/conversation/gnunet-conversation-gtk_import.c        
2016-04-30 08:16:14 UTC (rev 37101)
+++ gnunet-gtk/src/conversation/gnunet-conversation-gtk_import.c        
2016-04-30 08:17:37 UTC (rev 37102)
@@ -317,11 +317,9 @@
  * Asynchronously disconnect from the namestore.
  *
  * @param cls closure (NULL)
- * @param tc scheduler context
  */
 static void
-async_disconnect (void *cls,
-                  const struct GNUNET_SCHEDULER_TaskContext *tc)
+async_disconnect (void *cls)
 {
   if (NULL != ns)
   {

Modified: gnunet-gtk/src/fs/gnunet-fs-gtk.c
===================================================================
--- gnunet-gtk/src/fs/gnunet-fs-gtk.c   2016-04-30 08:16:14 UTC (rev 37101)
+++ gnunet-gtk/src/fs/gnunet-fs-gtk.c   2016-04-30 08:17:37 UTC (rev 37102)
@@ -337,10 +337,7 @@
    * just to be sure it is dead (if it isn't, application will hang up).
    */
   GNUNET_SCHEDULER_shutdown ();
-
   GNUNET_GTK_tray_icon_destroy ();
-  GNUNET_SCHEDULER_add_with_priority (GNUNET_SCHEDULER_PRIORITY_IDLE,
-                                      &shutdown_task, NULL);
 }
 
 
@@ -842,10 +839,7 @@
                   argv[i]);
       }
   }
-
-
-  GNUNET_SCHEDULER_add_delayed (GNUNET_TIME_UNIT_FOREVER_REL,
-                               &shutdown_task, NULL);
+  GNUNET_SCHEDULER_add_shutdown (&shutdown_task, NULL);
 }
 
 

Modified: gnunet-gtk/src/identity/gnunet-identity-gtk.c
===================================================================
--- gnunet-gtk/src/identity/gnunet-identity-gtk.c       2016-04-30 08:16:14 UTC 
(rev 37101)
+++ gnunet-gtk/src/identity/gnunet-identity-gtk.c       2016-04-30 08:17:37 UTC 
(rev 37102)
@@ -534,8 +534,7 @@
   identity = GNUNET_IDENTITY_connect (GIG_get_configuration (),
                                      &add_ego,
                                      NULL);
-  GNUNET_SCHEDULER_add_delayed (GNUNET_TIME_UNIT_FOREVER_REL,
-                               &shutdown_task, NULL);
+  GNUNET_SCHEDULER_add_shutdown (&shutdown_task, NULL);
 }
 
 

Modified: gnunet-gtk/src/lib/animations.c
===================================================================
--- gnunet-gtk/src/lib/animations.c     2016-04-30 08:16:14 UTC (rev 37101)
+++ gnunet-gtk/src/lib/animations.c     2016-04-30 08:17:37 UTC (rev 37102)
@@ -121,7 +121,7 @@
 /**
  * Task run to update animations.
  */
-static struct GNUNET_SCHEDULER_Task * ticker_task;
+static struct GNUNET_SCHEDULER_Task *ticker_task;
 
 
 /**

Modified: gnunet-gtk/src/lib/eventloop.c
===================================================================
--- gnunet-gtk/src/lib/eventloop.c      2016-04-30 08:16:14 UTC (rev 37101)
+++ gnunet-gtk/src/lib/eventloop.c      2016-04-30 08:17:37 UTC (rev 37102)
@@ -106,7 +106,7 @@
   /**
    * Task we keep around just to keep the event loop running.
    */
-  struct GNUNET_SCHEDULER_Task * dummy_task;
+  struct GNUNET_SCHEDULER_Task *dummy_task;
 
   /**
    * Remaining command-line arguments.
@@ -359,9 +359,9 @@
   struct GNUNET_GTK_MainLoop *ml = cls;
 
   GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Dummy task was scheduled\n");
-  ml->dummy_task =
-      GNUNET_SCHEDULER_add_delayed (GNUNET_TIME_UNIT_FOREVER_REL,
-                                    &keepalive_task, ml);
+  ml->dummy_task
+    = GNUNET_SCHEDULER_add_delayed (GNUNET_TIME_UNIT_FOREVER_REL,
+                                   &keepalive_task, ml);
 }
 
 
@@ -912,7 +912,8 @@
  * @return #GNUNET_OK on success, #GNUNET_SYSERR on error (i.e. bad 
command-line options, etc)
  */
 int
-GNUNET_GTK_main_loop_start (const char *binary_name, const char *binary_help,
+GNUNET_GTK_main_loop_start (const char *binary_name,
+                           const char *binary_help,
                             int argc, char *const *argv,
                             struct GNUNET_GETOPT_CommandLineOption *options,
                             const char *main_window_file,
@@ -925,7 +926,8 @@
   ml.main_window_file = main_window_file;
   ml.main_task = main_task;
   ret =
-      GNUNET_PROGRAM_run (argc, argv, binary_name, binary_help, options,
+      GNUNET_PROGRAM_run (argc, argv, binary_name,
+                         binary_help, options,
                           &run_main_loop, &ml);
   if (NULL != ml.cached_poll_array)
     g_free (ml.cached_poll_array);

Modified: gnunet-gtk/src/main/gnunet-gtk.c
===================================================================
--- gnunet-gtk/src/main/gnunet-gtk.c    2016-04-30 08:16:14 UTC (rev 37101)
+++ gnunet-gtk/src/main/gnunet-gtk.c    2016-04-30 08:17:37 UTC (rev 37102)
@@ -316,8 +316,7 @@
   GNUNET_GTK_set_icon_search_path ();
   GNUNET_GTK_setup_nls ();
   main_window = GTK_WIDGET (get_object ("gnunet_gtk_window"));
-  GNUNET_SCHEDULER_add_delayed (GNUNET_TIME_UNIT_FOREVER_REL,
-                               &cleanup_task, NULL);
+  GNUNET_SCHEDULER_add_shutdown (&cleanup_task, NULL);
 #ifdef GDK_WINDOWING_X11
   plug ("gnunet_statistics_hbox",
         "gnunet-statistics-gtk",

Modified: gnunet-gtk/src/namestore/gnunet-namestore-gtk.c
===================================================================
--- gnunet-gtk/src/namestore/gnunet-namestore-gtk.c     2016-04-30 08:16:14 UTC 
(rev 37101)
+++ gnunet-gtk/src/namestore/gnunet-namestore-gtk.c     2016-04-30 08:17:37 UTC 
(rev 37102)
@@ -2823,8 +2823,7 @@
                                       NULL);
   gtk_widget_show (main_window);
   gtk_window_present (GTK_WINDOW (main_window));
-  GNUNET_SCHEDULER_add_delayed (GNUNET_TIME_UNIT_FOREVER_REL,
-                               &cleanup_task, NULL);
+  GNUNET_SCHEDULER_add_shutdown (&cleanup_task, NULL);
 }
 
 

Modified: gnunet-gtk/src/peerinfo/gnunet-peerinfo-gtk.c
===================================================================
--- gnunet-gtk/src/peerinfo/gnunet-peerinfo-gtk.c       2016-04-30 08:16:14 UTC 
(rev 37101)
+++ gnunet-gtk/src/peerinfo/gnunet-peerinfo-gtk.c       2016-04-30 08:17:37 UTC 
(rev 37102)
@@ -1678,8 +1678,7 @@
     gtk_widget_show (main_window);
     gtk_window_present (GTK_WINDOW (main_window));
   }
-  GNUNET_SCHEDULER_add_delayed (GNUNET_TIME_UNIT_FOREVER_REL,
-                               &shutdown_task, NULL);
+  GNUNET_SCHEDULER_add_shutdown (&shutdown_task, NULL);
 }
 
 

Modified: gnunet-gtk/src/setup/gnunet-setup-namestore-config.c
===================================================================
--- gnunet-gtk/src/setup/gnunet-setup-namestore-config.c        2016-04-30 
08:16:14 UTC (rev 37101)
+++ gnunet-gtk/src/setup/gnunet-setup-namestore-config.c        2016-04-30 
08:17:37 UTC (rev 37102)
@@ -31,7 +31,7 @@
  * Test if the configuration works for the given plugin.
  *
  * @param name name of the plugin to check
- * @return GNUNET_OK on success, GNUNET_SYSERR if the config is wrong
+ * @return #GNUNET_OK on success, #GNUNET_SYSERR if the config is wrong
  */
 static int
 test_config (const char *name)

Modified: gnunet-gtk/src/setup/gnunet-setup.c
===================================================================
--- gnunet-gtk/src/setup/gnunet-setup.c 2016-04-30 08:16:14 UTC (rev 37101)
+++ gnunet-gtk/src/setup/gnunet-setup.c 2016-04-30 08:17:37 UTC (rev 37102)
@@ -663,8 +663,7 @@
                              GNUNET_CONSTANTS_SERVICE_TIMEOUT,
                              &start_identity, NULL);
   load_options ();
-  GNUNET_SCHEDULER_add_delayed (GNUNET_TIME_UNIT_FOREVER_REL,
-                               &cleanup_task, NULL);
+  GNUNET_SCHEDULER_add_shutdown (&cleanup_task, NULL);
   if (do_autoconfig)
   {
     GNUNET_log (GNUNET_ERROR_TYPE_INFO,

Modified: gnunet-gtk/src/statistics/gnunet-statistics-gtk.c
===================================================================
--- gnunet-gtk/src/statistics/gnunet-statistics-gtk.c   2016-04-30 08:16:14 UTC 
(rev 37101)
+++ gnunet-gtk/src/statistics/gnunet-statistics-gtk.c   2016-04-30 08:17:37 UTC 
(rev 37102)
@@ -198,15 +198,13 @@
 }
 
 
-
 /**
  * Task run on shutdown.
  *
  * @param cls unused
- * @param tc scheduler context, unused
  */
 static void
-shutdown_task (void *cls, const struct GNUNET_SCHEDULER_TaskContext *tc)
+shutdown_task (void *cls)
 {
   GNUNET_GTK_tray_icon_destroy ();
   GNUNET_GTK_main_loop_quit (ml);
@@ -280,8 +278,7 @@
     gtk_widget_show (main_window);
     gtk_window_present (GTK_WINDOW (main_window));
   }
-  GNUNET_SCHEDULER_add_delayed (GNUNET_TIME_UNIT_FOREVER_REL,
-                               &shutdown_task, NULL);
+  GNUNET_SCHEDULER_add_shutdown (&shutdown_task, NULL);
 }
 
 




reply via email to

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