aboutsummaryrefslogtreecommitdiff
path: root/src/sensor
diff options
context:
space:
mode:
authorChristian Grothoff <christian@grothoff.org>2014-12-24 01:10:47 +0000
committerChristian Grothoff <christian@grothoff.org>2014-12-24 01:10:47 +0000
commitf1f603c7d0b3f03dca46a4f313472288eb080eb1 (patch)
tree3a29966b02dfb83e0a8a8d5c42b3116380209fb0 /src/sensor
parent53cd5b8eda2fa8db86b0907a62a39598981d008a (diff)
downloadgnunet-f1f603c7d0b3f03dca46a4f313472288eb080eb1.tar.gz
gnunet-f1f603c7d0b3f03dca46a4f313472288eb080eb1.zip
making GNUNET_SCHEDULER_cancel() perform in O(1) instead of O(n) to help or even fully address #3247
Diffstat (limited to 'src/sensor')
-rw-r--r--src/sensor/gnunet-sensor-profiler.c12
-rw-r--r--src/sensor/gnunet-service-sensor_monitoring.c2
-rw-r--r--src/sensor/gnunet-service-sensor_reporting.c18
-rw-r--r--src/sensor/gnunet-service-sensor_update.c8
-rw-r--r--src/sensor/perf_pow_sign.c2
-rw-r--r--src/sensor/sensor_api.c8
-rw-r--r--src/sensor/sensor_util_lib.c6
-rw-r--r--src/sensor/sensor_util_lib_crypto.c8
-rw-r--r--src/sensor/test_gnunet-service-sensor_reporting.c12
-rw-r--r--src/sensor/test_pow_sign.c2
10 files changed, 39 insertions, 39 deletions
diff --git a/src/sensor/gnunet-sensor-profiler.c b/src/sensor/gnunet-sensor-profiler.c
index 21574774d..74b1fa8a2 100644
--- a/src/sensor/gnunet-sensor-profiler.c
+++ b/src/sensor/gnunet-sensor-profiler.c
@@ -87,7 +87,7 @@ static const char *sensor_dst_dir = "/tmp/gnunet-sensor-profiler";
87/** 87/**
88 * Scheduled task to shutdown 88 * Scheduled task to shutdown
89 */ 89 */
90static GNUNET_SCHEDULER_TaskIdentifier shutdown_task = GNUNET_SCHEDULER_NO_TASK; 90static struct GNUNET_SCHEDULER_Task * shutdown_task = NULL;
91 91
92/** 92/**
93 * GNUnet configuration 93 * GNUnet configuration
@@ -157,7 +157,7 @@ static unsigned int sensor_names_size = 0;
157/** 157/**
158 * Task run after any waiting period 158 * Task run after any waiting period
159 */ 159 */
160static GNUNET_SCHEDULER_TaskIdentifier delayed_task = GNUNET_SCHEDULER_NO_TASK; 160static struct GNUNET_SCHEDULER_Task * delayed_task = NULL;
161 161
162 162
163/** 163/**
@@ -180,10 +180,10 @@ do_shutdown (void *cls, const struct GNUNET_SCHEDULER_TaskContext *tc)
180 int i; 180 int i;
181 181
182 GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Shutting down.\n"); 182 GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Shutting down.\n");
183 if (GNUNET_SCHEDULER_NO_TASK != delayed_task) 183 if (NULL != delayed_task)
184 { 184 {
185 GNUNET_SCHEDULER_cancel (delayed_task); 185 GNUNET_SCHEDULER_cancel (delayed_task);
186 delayed_task = GNUNET_SCHEDULER_NO_TASK; 186 delayed_task = NULL;
187 } 187 }
188 for (i = 0; i < num_peers; i++) 188 for (i = 0; i < num_peers; i++)
189 { 189 {
@@ -536,7 +536,7 @@ simulate_anomalies (void *cls, const struct GNUNET_SCHEDULER_TaskContext *tc)
536 uint32_t an_peer; 536 uint32_t an_peer;
537 struct GNUNET_TIME_Relative shutdown_delay; 537 struct GNUNET_TIME_Relative shutdown_delay;
538 538
539 delayed_task = GNUNET_SCHEDULER_NO_TASK; 539 delayed_task = NULL;
540 GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, 540 GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
541 "Training period over, simulating anomalies now.\n"); 541 "Training period over, simulating anomalies now.\n");
542 GNUNET_assert (anomalous_peers <= num_peers); 542 GNUNET_assert (anomalous_peers <= num_peers);
@@ -572,7 +572,7 @@ peers_ready (void *cls, const struct GNUNET_SCHEDULER_TaskContext *tc)
572 unsigned long long int training_points; 572 unsigned long long int training_points;
573 struct GNUNET_TIME_Relative training_period; 573 struct GNUNET_TIME_Relative training_period;
574 574
575 delayed_task = GNUNET_SCHEDULER_NO_TASK; 575 delayed_task = NULL;
576 GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "All peers are ready.\n"); 576 GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "All peers are ready.\n");
577 GNUNET_assert (GNUNET_OK == 577 GNUNET_assert (GNUNET_OK ==
578 GNUNET_CONFIGURATION_get_value_number (cfg, 578 GNUNET_CONFIGURATION_get_value_number (cfg,
diff --git a/src/sensor/gnunet-service-sensor_monitoring.c b/src/sensor/gnunet-service-sensor_monitoring.c
index 4f1f9472a..f473c3a75 100644
--- a/src/sensor/gnunet-service-sensor_monitoring.c
+++ b/src/sensor/gnunet-service-sensor_monitoring.c
@@ -410,7 +410,7 @@ schedule_sensor (void *cls, const struct GNUNET_HashCode *key, void *value)
410 LOG (GNUNET_ERROR_TYPE_DEBUG, 410 LOG (GNUNET_ERROR_TYPE_DEBUG,
411 "Scheduling sensor `%s' to run after %" PRIu64 " microseconds\n", 411 "Scheduling sensor `%s' to run after %" PRIu64 " microseconds\n",
412 sensorinfo->name, sensorinfo->interval.rel_value_us); 412 sensorinfo->name, sensorinfo->interval.rel_value_us);
413 if (GNUNET_SCHEDULER_NO_TASK != sensorinfo->execution_task) 413 if (NULL != sensorinfo->execution_task)
414 { 414 {
415 LOG (GNUNET_ERROR_TYPE_ERROR, 415 LOG (GNUNET_ERROR_TYPE_ERROR,
416 _("Sensor `%s' execution task already set, this should not happen\n"), 416 _("Sensor `%s' execution task already set, this should not happen\n"),
diff --git a/src/sensor/gnunet-service-sensor_reporting.c b/src/sensor/gnunet-service-sensor_reporting.c
index 8d69836a0..d08d67449 100644
--- a/src/sensor/gnunet-service-sensor_reporting.c
+++ b/src/sensor/gnunet-service-sensor_reporting.c
@@ -162,9 +162,9 @@ struct ValueInfo
162 struct GNUNET_PEERSTORE_WatchContext *wc; 162 struct GNUNET_PEERSTORE_WatchContext *wc;
163 163
164 /** 164 /**
165 * Collection point reporting task (or #GNUNET_SCHEDULER_NO_TASK) 165 * Collection point reporting task (or #NULL)
166 */ 166 */
167 GNUNET_SCHEDULER_TaskIdentifier reporting_task; 167 struct GNUNET_SCHEDULER_Task * reporting_task;
168 168
169}; 169};
170 170
@@ -237,7 +237,7 @@ struct CadetPeer
237 /** 237 /**
238 * Task used to try reconnection to collection point after failure 238 * Task used to try reconnection to collection point after failure
239 */ 239 */
240 GNUNET_SCHEDULER_TaskIdentifier reconnect_task; 240 struct GNUNET_SCHEDULER_Task * reconnect_task;
241 241
242 /** 242 /**
243 * Are we currently destroying the channel and its context? 243 * Are we currently destroying the channel and its context?
@@ -400,10 +400,10 @@ destroy_value_info (struct ValueInfo *vi)
400 GNUNET_PEERSTORE_watch_cancel (vi->wc); 400 GNUNET_PEERSTORE_watch_cancel (vi->wc);
401 vi->wc = NULL; 401 vi->wc = NULL;
402 } 402 }
403 if (GNUNET_SCHEDULER_NO_TASK != vi->reporting_task) 403 if (NULL != vi->reporting_task)
404 { 404 {
405 GNUNET_SCHEDULER_cancel (vi->reporting_task); 405 GNUNET_SCHEDULER_cancel (vi->reporting_task);
406 vi->reporting_task = GNUNET_SCHEDULER_NO_TASK; 406 vi->reporting_task = NULL;
407 } 407 }
408 if (NULL != vi->last_value) 408 if (NULL != vi->last_value)
409 { 409 {
@@ -463,10 +463,10 @@ static void
463destroy_cadet_peer (struct CadetPeer *cadetp) 463destroy_cadet_peer (struct CadetPeer *cadetp)
464{ 464{
465 cadetp->destroying = GNUNET_YES; 465 cadetp->destroying = GNUNET_YES;
466 if (GNUNET_SCHEDULER_NO_TASK != cadetp->reconnect_task) 466 if (NULL != cadetp->reconnect_task)
467 { 467 {
468 GNUNET_SCHEDULER_cancel (cadetp->reconnect_task); 468 GNUNET_SCHEDULER_cancel (cadetp->reconnect_task);
469 cadetp->reconnect_task = GNUNET_SCHEDULER_NO_TASK; 469 cadetp->reconnect_task = NULL;
470 } 470 }
471 if (NULL != cadetp->mq) 471 if (NULL != cadetp->mq)
472 { 472 {
@@ -625,7 +625,7 @@ cp_reconnect (void *cls, const struct GNUNET_SCHEDULER_TaskContext *tc)
625 LOG (GNUNET_ERROR_TYPE_INFO, 625 LOG (GNUNET_ERROR_TYPE_INFO,
626 "Retrying connection to collection point `%s'.\n", 626 "Retrying connection to collection point `%s'.\n",
627 GNUNET_i2s (&cadetp->peer_id)); 627 GNUNET_i2s (&cadetp->peer_id));
628 cadetp->reconnect_task = GNUNET_SCHEDULER_NO_TASK; 628 cadetp->reconnect_task = NULL;
629 GNUNET_assert (NULL == cadetp->channel); 629 GNUNET_assert (NULL == cadetp->channel);
630 cadetp->channel = 630 cadetp->channel =
631 GNUNET_CADET_channel_create (cadet, cadetp, &cadetp->peer_id, 631 GNUNET_CADET_channel_create (cadet, cadetp, &cadetp->peer_id,
@@ -740,7 +740,7 @@ get_cadet_peer (struct GNUNET_PeerIdentity pid)
740 GNUNET_APPLICATION_TYPE_SENSORDASHBOARD, 740 GNUNET_APPLICATION_TYPE_SENSORDASHBOARD,
741 GNUNET_CADET_OPTION_RELIABLE); 741 GNUNET_CADET_OPTION_RELIABLE);
742 cadetp->mq = cp_mq_create (cadetp); 742 cadetp->mq = cp_mq_create (cadetp);
743 cadetp->reconnect_task = GNUNET_SCHEDULER_NO_TASK; 743 cadetp->reconnect_task = NULL;
744 GNUNET_CONTAINER_DLL_insert (cadetp_head, cadetp_tail, cadetp); 744 GNUNET_CONTAINER_DLL_insert (cadetp_head, cadetp_tail, cadetp);
745 return cadetp; 745 return cadetp;
746} 746}
diff --git a/src/sensor/gnunet-service-sensor_update.c b/src/sensor/gnunet-service-sensor_update.c
index aa7716f1c..a6390b6dd 100644
--- a/src/sensor/gnunet-service-sensor_update.c
+++ b/src/sensor/gnunet-service-sensor_update.c
@@ -168,7 +168,7 @@ static int updating;
168/** 168/**
169 * GNUnet scheduler task that starts the update check process. 169 * GNUnet scheduler task that starts the update check process.
170 */ 170 */
171static GNUNET_SCHEDULER_TaskIdentifier update_task; 171static struct GNUNET_SCHEDULER_Task * update_task;
172 172
173/** 173/**
174 * Pointer to service reset function called when we have new sensor updates. 174 * Pointer to service reset function called when we have new sensor updates.
@@ -237,10 +237,10 @@ SENSOR_update_stop ()
237 237
238 up_default = NULL; 238 up_default = NULL;
239 up = up_head; 239 up = up_head;
240 if (GNUNET_SCHEDULER_NO_TASK != update_task) 240 if (NULL != update_task)
241 { 241 {
242 GNUNET_SCHEDULER_cancel (update_task); 242 GNUNET_SCHEDULER_cancel (update_task);
243 update_task = GNUNET_SCHEDULER_NO_TASK; 243 update_task = NULL;
244 } 244 }
245 while (NULL != up) 245 while (NULL != up)
246 { 246 {
@@ -390,7 +390,7 @@ check_for_updates (void *cls, const struct GNUNET_SCHEDULER_TaskContext *tc)
390 struct GNUNET_MessageHeader *msg; 390 struct GNUNET_MessageHeader *msg;
391 size_t msg_size; 391 size_t msg_size;
392 392
393 update_task = GNUNET_SCHEDULER_NO_TASK; 393 update_task = NULL;
394 if (0 != (tc->reason & GNUNET_SCHEDULER_REASON_SHUTDOWN)) 394 if (0 != (tc->reason & GNUNET_SCHEDULER_REASON_SHUTDOWN))
395 return; 395 return;
396 if (GNUNET_YES == updating) 396 if (GNUNET_YES == updating)
diff --git a/src/sensor/perf_pow_sign.c b/src/sensor/perf_pow_sign.c
index b55354490..d89fe46ef 100644
--- a/src/sensor/perf_pow_sign.c
+++ b/src/sensor/perf_pow_sign.c
@@ -71,7 +71,7 @@ static int ok = 1;
71/** 71/**
72 * Task used to shutdown / expire the test 72 * Task used to shutdown / expire the test
73 */ 73 */
74static GNUNET_SCHEDULER_TaskIdentifier shutdown_task; 74static struct GNUNET_SCHEDULER_Task * shutdown_task;
75 75
76/** 76/**
77 * Message to be exchanged 77 * Message to be exchanged
diff --git a/src/sensor/sensor_api.c b/src/sensor/sensor_api.c
index 628873f91..8d72d16cb 100644
--- a/src/sensor/sensor_api.c
+++ b/src/sensor/sensor_api.c
@@ -121,7 +121,7 @@ struct GNUNET_SENSOR_IterateContext
121 /** 121 /**
122 * Task responsible for timeout. 122 * Task responsible for timeout.
123 */ 123 */
124 GNUNET_SCHEDULER_TaskIdentifier timeout_task; 124 struct GNUNET_SCHEDULER_Task * timeout_task;
125 125
126}; 126};
127 127
@@ -365,7 +365,7 @@ signal_sensor_iteration_timeout (void *cls,
365 GNUNET_SENSOR_SensorIterateCB cb; 365 GNUNET_SENSOR_SensorIterateCB cb;
366 void *cb_cls; 366 void *cb_cls;
367 367
368 ic->timeout_task = GNUNET_SCHEDULER_NO_TASK; 368 ic->timeout_task = NULL;
369 cb = ic->callback; 369 cb = ic->callback;
370 cb_cls = ic->callback_cls; 370 cb_cls = ic->callback_cls;
371 GNUNET_SENSOR_iterate_cancel (ic); 371 GNUNET_SENSOR_iterate_cancel (ic);
@@ -417,10 +417,10 @@ GNUNET_SENSOR_iterate_cancel (struct GNUNET_SENSOR_IterateContext *ic)
417 ic->callback_cls = NULL; 417 ic->callback_cls = NULL;
418 return; 418 return;
419 } 419 }
420 if (GNUNET_SCHEDULER_NO_TASK != ic->timeout_task) 420 if (NULL != ic->timeout_task)
421 { 421 {
422 GNUNET_SCHEDULER_cancel (ic->timeout_task); 422 GNUNET_SCHEDULER_cancel (ic->timeout_task);
423 ic->timeout_task = GNUNET_SCHEDULER_NO_TASK; 423 ic->timeout_task = NULL;
424 } 424 }
425 GNUNET_CONTAINER_DLL_remove (h->ic_head, h->ic_tail, ic); 425 GNUNET_CONTAINER_DLL_remove (h->ic_head, h->ic_tail, ic);
426 GNUNET_free (ic); 426 GNUNET_free (ic);
diff --git a/src/sensor/sensor_util_lib.c b/src/sensor/sensor_util_lib.c
index fd5337343..381465d22 100644
--- a/src/sensor/sensor_util_lib.c
+++ b/src/sensor/sensor_util_lib.c
@@ -274,7 +274,7 @@ load_sensor_from_cfg (struct GNUNET_CONFIGURATION_Handle *cfg,
274 GNUNET_free (dummy); 274 GNUNET_free (dummy);
275 } 275 }
276 //execution task 276 //execution task
277 sensor->execution_task = GNUNET_SCHEDULER_NO_TASK; 277 sensor->execution_task = NULL;
278 //running 278 //running
279 sensor->running = GNUNET_NO; 279 sensor->running = GNUNET_NO;
280 return sensor; 280 return sensor;
@@ -479,10 +479,10 @@ destroy_sensor (void *cls, const struct GNUNET_HashCode *key, void *value)
479{ 479{
480 struct GNUNET_SENSOR_SensorInfo *sensor = value; 480 struct GNUNET_SENSOR_SensorInfo *sensor = value;
481 481
482 if (GNUNET_SCHEDULER_NO_TASK != sensor->execution_task) 482 if (NULL != sensor->execution_task)
483 { 483 {
484 GNUNET_SCHEDULER_cancel (sensor->execution_task); 484 GNUNET_SCHEDULER_cancel (sensor->execution_task);
485 sensor->execution_task = GNUNET_SCHEDULER_NO_TASK; 485 sensor->execution_task = NULL;
486 } 486 }
487 if (NULL != sensor->gnunet_stat_get_handle) 487 if (NULL != sensor->gnunet_stat_get_handle)
488 { 488 {
diff --git a/src/sensor/sensor_util_lib_crypto.c b/src/sensor/sensor_util_lib_crypto.c
index 41cba1991..154b7667c 100644
--- a/src/sensor/sensor_util_lib_crypto.c
+++ b/src/sensor/sensor_util_lib_crypto.c
@@ -65,7 +65,7 @@ struct GNUNET_SENSOR_crypto_pow_context
65 /** 65 /**
66 * Task that calculates the proof-of-work 66 * Task that calculates the proof-of-work
67 */ 67 */
68 GNUNET_SCHEDULER_TaskIdentifier calculate_pow_task; 68 struct GNUNET_SCHEDULER_Task * calculate_pow_task;
69 69
70 /** 70 /**
71 * Size of msg (allocated after this struct) 71 * Size of msg (allocated after this struct)
@@ -157,7 +157,7 @@ calculate_pow (void *cls, const struct GNUNET_SCHEDULER_TaskContext *tc)
157 cx->matching_bits)) 157 cx->matching_bits))
158 { 158 {
159 LOG (GNUNET_ERROR_TYPE_DEBUG, "Found pow %" PRIu64 ".\n", cx->pow); 159 LOG (GNUNET_ERROR_TYPE_DEBUG, "Found pow %" PRIu64 ".\n", cx->pow);
160 cx->calculate_pow_task = GNUNET_SCHEDULER_NO_TASK; 160 cx->calculate_pow_task = NULL;
161 result_block = 161 result_block =
162 GNUNET_malloc (sizeof (struct GNUNET_SENSOR_crypto_pow_block) + 162 GNUNET_malloc (sizeof (struct GNUNET_SENSOR_crypto_pow_block) +
163 cx->msg_size); 163 cx->msg_size);
@@ -197,10 +197,10 @@ void
197GNUNET_SENSOR_crypto_pow_sign_cancel (struct GNUNET_SENSOR_crypto_pow_context 197GNUNET_SENSOR_crypto_pow_sign_cancel (struct GNUNET_SENSOR_crypto_pow_context
198 *cx) 198 *cx)
199{ 199{
200 if (GNUNET_SCHEDULER_NO_TASK != cx->calculate_pow_task) 200 if (NULL != cx->calculate_pow_task)
201 { 201 {
202 GNUNET_SCHEDULER_cancel (cx->calculate_pow_task); 202 GNUNET_SCHEDULER_cancel (cx->calculate_pow_task);
203 cx->calculate_pow_task = GNUNET_SCHEDULER_NO_TASK; 203 cx->calculate_pow_task = NULL;
204 } 204 }
205 GNUNET_free (cx); 205 GNUNET_free (cx);
206 cx = NULL; 206 cx = NULL;
diff --git a/src/sensor/test_gnunet-service-sensor_reporting.c b/src/sensor/test_gnunet-service-sensor_reporting.c
index 4a58647ad..dd9a2125a 100644
--- a/src/sensor/test_gnunet-service-sensor_reporting.c
+++ b/src/sensor/test_gnunet-service-sensor_reporting.c
@@ -89,7 +89,7 @@ struct TestPeer
89 /** 89 /**
90 * GNUNET scheduler task that forces the anomaly after a stabilization delay 90 * GNUNET scheduler task that forces the anomaly after a stabilization delay
91 */ 91 */
92 GNUNET_SCHEDULER_TaskIdentifier delay_task; 92 struct GNUNET_SCHEDULER_Task * delay_task;
93 93
94}; 94};
95 95
@@ -152,7 +152,7 @@ static struct GNUNET_PEERSTORE_Handle *peerstore;
152/** 152/**
153 * Task used to shutdown / expire the test 153 * Task used to shutdown / expire the test
154 */ 154 */
155static GNUNET_SCHEDULER_TaskIdentifier shutdown_task; 155static struct GNUNET_SCHEDULER_Task * shutdown_task;
156 156
157/** 157/**
158 * Status of the test to be returned by main() 158 * Status of the test to be returned by main()
@@ -163,10 +163,10 @@ static int ok = 1;
163static void 163static void
164destroy_peer (struct TestPeer *peer) 164destroy_peer (struct TestPeer *peer)
165{ 165{
166 if (GNUNET_SCHEDULER_NO_TASK != peer->delay_task) 166 if (NULL != peer->delay_task)
167 { 167 {
168 GNUNET_SCHEDULER_cancel (peer->delay_task); 168 GNUNET_SCHEDULER_cancel (peer->delay_task);
169 peer->delay_task = GNUNET_SCHEDULER_NO_TASK; 169 peer->delay_task = NULL;
170 } 170 }
171 if (NULL != peer->sensor_op) 171 if (NULL != peer->sensor_op)
172 { 172 {
@@ -280,7 +280,7 @@ force_anomaly_task (void *cls, const struct GNUNET_SCHEDULER_TaskContext *tc)
280{ 280{
281 struct TestPeer *peer = cls; 281 struct TestPeer *peer = cls;
282 282
283 peer->delay_task = GNUNET_SCHEDULER_NO_TASK; 283 peer->delay_task = NULL;
284 GNUNET_SENSOR_force_anomaly (peer->sensor, (char *) sensor_name, GNUNET_YES, 284 GNUNET_SENSOR_force_anomaly (peer->sensor, (char *) sensor_name, GNUNET_YES,
285 NULL, NULL); 285 NULL, NULL);
286} 286}
@@ -481,7 +481,7 @@ peer_info_cb (void *cb_cls, struct GNUNET_TESTBED_Operation *op,
481 peer = GNUNET_new (struct TestPeer); 481 peer = GNUNET_new (struct TestPeer);
482 482
483 peer->testbed_peer = testbed_peer; 483 peer->testbed_peer = testbed_peer;
484 peer->delay_task = GNUNET_SCHEDULER_NO_TASK; 484 peer->delay_task = NULL;
485 GNUNET_CRYPTO_get_peer_identity (pinfo->result.cfg, &peer->peer_id); 485 GNUNET_CRYPTO_get_peer_identity (pinfo->result.cfg, &peer->peer_id);
486 if (NULL == peer_head) /* First peer (collection point) */ 486 if (NULL == peer_head) /* First peer (collection point) */
487 { 487 {
diff --git a/src/sensor/test_pow_sign.c b/src/sensor/test_pow_sign.c
index 71ab6af81..b3039ff25 100644
--- a/src/sensor/test_pow_sign.c
+++ b/src/sensor/test_pow_sign.c
@@ -66,7 +66,7 @@ static int ok = 1;
66/** 66/**
67 * Task used to shutdown / expire the test 67 * Task used to shutdown / expire the test
68 */ 68 */
69static GNUNET_SCHEDULER_TaskIdentifier shutdown_task; 69static struct GNUNET_SCHEDULER_Task * shutdown_task;
70 70
71/** 71/**
72 * Message to be exchanged 72 * Message to be exchanged