diff options
author | Matthias Wachs <wachs@net.in.tum.de> | 2012-10-17 09:05:29 +0000 |
---|---|---|
committer | Matthias Wachs <wachs@net.in.tum.de> | 2012-10-17 09:05:29 +0000 |
commit | b51a5ef4e7abcf5b69313cacc86983343071ebac (patch) | |
tree | 9eded32f434ec2f0142598c7bd91d15458a275c3 /src/transport/test_plugin_transport.c | |
parent | 5378770fb99cb824c2e85d449ef2067d219ec85c (diff) | |
download | gnunet-b51a5ef4e7abcf5b69313cacc86983343071ebac.tar.gz gnunet-b51a5ef4e7abcf5b69313cacc86983343071ebac.zip |
crash in test due to pending callbacks
Diffstat (limited to 'src/transport/test_plugin_transport.c')
-rw-r--r-- | src/transport/test_plugin_transport.c | 37 |
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 | */ |
99 | static GNUNET_SCHEDULER_TaskIdentifier timeout_task; | 99 | static GNUNET_SCHEDULER_TaskIdentifier timeout_endbadly; |
100 | 100 | ||
101 | /** | 101 | /** |
102 | * Timeout task | 102 | * Timeout task |
@@ -120,6 +120,8 @@ struct AddressWrapper *tail; | |||
120 | 120 | ||
121 | unsigned int addresses_reported; | 121 | unsigned int addresses_reported; |
122 | 122 | ||
123 | unsigned 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 | ||