aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMatthias Wachs <wachs@net.in.tum.de>2012-10-17 09:05:29 +0000
committerMatthias Wachs <wachs@net.in.tum.de>2012-10-17 09:05:29 +0000
commitb51a5ef4e7abcf5b69313cacc86983343071ebac (patch)
tree9eded32f434ec2f0142598c7bd91d15458a275c3
parent5378770fb99cb824c2e85d449ef2067d219ec85c (diff)
downloadgnunet-b51a5ef4e7abcf5b69313cacc86983343071ebac.tar.gz
gnunet-b51a5ef4e7abcf5b69313cacc86983343071ebac.zip
crash in test due to pending callbacks
-rw-r--r--src/transport/test_plugin_transport.c37
1 files changed, 26 insertions, 11 deletions
diff --git a/src/transport/test_plugin_transport.c b/src/transport/test_plugin_transport.c
index 6882f919c..647a7ad9e 100644
--- a/src/transport/test_plugin_transport.c
+++ b/src/transport/test_plugin_transport.c
@@ -96,7 +96,7 @@ struct GNUNET_HELPER_Handle *suid_helper;
96/** 96/**
97 * Timeout task 97 * Timeout task
98 */ 98 */
99static GNUNET_SCHEDULER_TaskIdentifier timeout_task; 99static GNUNET_SCHEDULER_TaskIdentifier timeout_endbadly;
100 100
101/** 101/**
102 * Timeout task 102 * Timeout task
@@ -120,6 +120,8 @@ struct AddressWrapper *tail;
120 120
121unsigned int addresses_reported; 121unsigned int addresses_reported;
122 122
123unsigned int pretty_printers_running;
124
123/** 125/**
124 * Did the test pass or fail? 126 * Did the test pass or fail?
125 */ 127 */
@@ -147,10 +149,10 @@ end ()
147 int c = 0; 149 int c = 0;
148 ok = 0; 150 ok = 0;
149 151
150 if (GNUNET_SCHEDULER_NO_TASK != timeout_task) 152 if (GNUNET_SCHEDULER_NO_TASK != timeout_endbadly)
151 { 153 {
152 GNUNET_SCHEDULER_cancel (timeout_task); 154 GNUNET_SCHEDULER_cancel (timeout_endbadly);
153 timeout_task = GNUNET_SCHEDULER_NO_TASK; 155 timeout_endbadly = GNUNET_SCHEDULER_NO_TASK;
154 } 156 }
155 if (NULL != api) 157 if (NULL != api)
156 GNUNET_PLUGIN_unload (libname, api); 158 GNUNET_PLUGIN_unload (libname, api);
@@ -193,13 +195,21 @@ end_badly (void *cls, const struct GNUNET_SCHEDULER_TaskContext *tc)
193{ 195{
194 struct AddressWrapper *w; 196 struct AddressWrapper *w;
195 int c = 0; 197 int c = 0;
196 timeout_task = GNUNET_SCHEDULER_NO_TASK; 198 timeout_endbadly = GNUNET_SCHEDULER_NO_TASK;
197 if (GNUNET_SCHEDULER_NO_TASK != timeout_wait) 199 if (GNUNET_SCHEDULER_NO_TASK != timeout_wait)
198 { 200 {
199 GNUNET_SCHEDULER_cancel (timeout_wait); 201 GNUNET_SCHEDULER_cancel (timeout_wait);
200 timeout_wait = GNUNET_SCHEDULER_NO_TASK; 202 timeout_wait = GNUNET_SCHEDULER_NO_TASK;
201 } 203 }
202 204
205 if (pretty_printers_running > 0)
206 {
207 timeout_endbadly = GNUNET_SCHEDULER_add_delayed(GNUNET_TIME_UNIT_SECONDS, &end_badly, NULL);
208 GNUNET_log (GNUNET_ERROR_TYPE_INFO,
209 _("Have pending calls to pretty_printer ... deferring shutdown\n"));
210 return;
211 }
212
203 if (NULL != cls) 213 if (NULL != cls)
204 { 214 {
205 GNUNET_log (GNUNET_ERROR_TYPE_ERROR, 215 GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
@@ -267,12 +277,12 @@ end_badly_now ()
267 GNUNET_SCHEDULER_cancel (timeout_wait); 277 GNUNET_SCHEDULER_cancel (timeout_wait);
268 timeout_wait = GNUNET_SCHEDULER_NO_TASK; 278 timeout_wait = GNUNET_SCHEDULER_NO_TASK;
269 } 279 }
270 if (GNUNET_SCHEDULER_NO_TASK != timeout_task) 280 if (GNUNET_SCHEDULER_NO_TASK != timeout_endbadly)
271 { 281 {
272 GNUNET_SCHEDULER_cancel (timeout_task); 282 GNUNET_SCHEDULER_cancel (timeout_endbadly);
273 timeout_task = GNUNET_SCHEDULER_NO_TASK; 283 timeout_endbadly = GNUNET_SCHEDULER_NO_TASK;
274 } 284 }
275 timeout_task = GNUNET_SCHEDULER_add_now (&end_badly, NULL); 285 timeout_endbadly = GNUNET_SCHEDULER_add_now (&end_badly, NULL);
276} 286}
277 287
278 288
@@ -309,11 +319,13 @@ address_pretty_printer_cb (void *cls, const char *buf)
309 got_reply = GNUNET_YES; 319 got_reply = GNUNET_YES;
310 GNUNET_log (GNUNET_ERROR_TYPE_INFO, 320 GNUNET_log (GNUNET_ERROR_TYPE_INFO,
311 "Pretty address : `%s'\n", buf); 321 "Pretty address : `%s'\n", buf);
322 pretty_printers_running --;
312 } 323 }
313 else 324 else
314 { 325 {
315 if (GNUNET_NO == got_reply) 326 if (GNUNET_NO == got_reply)
316 { 327 {
328 pretty_printers_running --;
317 GNUNET_break (0); 329 GNUNET_break (0);
318 end_badly_now (); 330 end_badly_now ();
319 } 331 }
@@ -345,6 +357,7 @@ env_notify_address (void *cls,
345 memcpy (w->addr, addr, addrlen); 357 memcpy (w->addr, addr, addrlen);
346 GNUNET_CONTAINER_DLL_insert(head, tail, w); 358 GNUNET_CONTAINER_DLL_insert(head, tail, w);
347 got_reply = GNUNET_NO; 359 got_reply = GNUNET_NO;
360 pretty_printers_running ++;
348 api->address_pretty_printer (api->cls, plugin, addr, addrlen, 361 api->address_pretty_printer (api->cls, plugin, addr, addrlen,
349 GNUNET_YES, GNUNET_TIME_UNIT_MINUTES, 362 GNUNET_YES, GNUNET_TIME_UNIT_MINUTES,
350 &address_pretty_printer_cb, 363 &address_pretty_printer_cb,
@@ -398,7 +411,9 @@ env_notify_address (void *cls,
398 GNUNET_SCHEDULER_cancel (timeout_wait); 411 GNUNET_SCHEDULER_cancel (timeout_wait);
399 timeout_wait = GNUNET_SCHEDULER_NO_TASK; 412 timeout_wait = GNUNET_SCHEDULER_NO_TASK;
400 } 413 }
414
401 timeout_wait = GNUNET_SCHEDULER_add_delayed (WAIT, &wait_end, NULL); 415 timeout_wait = GNUNET_SCHEDULER_add_delayed (WAIT, &wait_end, NULL);
416
402 } 417 }
403 else if (GNUNET_NO == add_remove) 418 else if (GNUNET_NO == add_remove)
404 { 419 {
@@ -507,7 +522,7 @@ run (void *cls, char *const *args, const char *cfgfile,
507 char *plugin; 522 char *plugin;
508 char *sep; 523 char *sep;
509 524
510 timeout_task = GNUNET_SCHEDULER_add_delayed (TIMEOUT, end_badly, &ok); 525 timeout_endbadly = GNUNET_SCHEDULER_add_delayed (TIMEOUT, end_badly, &ok);
511 526
512 cfg = c; 527 cfg = c;
513 /* parse configuration */ 528 /* parse configuration */
@@ -580,7 +595,6 @@ run (void *cls, char *const *args, const char *cfgfile,
580 NULL); 595 NULL);
581 } 596 }
582 597
583
584 /* Loading plugin */ 598 /* Loading plugin */
585 GNUNET_log (GNUNET_ERROR_TYPE_INFO, _("Loading transport plugin %s\n"), plugin); 599 GNUNET_log (GNUNET_ERROR_TYPE_INFO, _("Loading transport plugin %s\n"), plugin);
586 GNUNET_asprintf (&libname, "libgnunet_plugin_transport_%s", plugin); 600 GNUNET_asprintf (&libname, "libgnunet_plugin_transport_%s", plugin);
@@ -641,6 +655,7 @@ run (void *cls, char *const *args, const char *cfgfile,
641 end_badly_now (); 655 end_badly_now ();
642 return; 656 return;
643 } 657 }
658
644} 659}
645 660
646 661