aboutsummaryrefslogtreecommitdiff
path: root/src/lib/util/test_scheduler_hogging_cancel.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/lib/util/test_scheduler_hogging_cancel.c')
-rw-r--r--src/lib/util/test_scheduler_hogging_cancel.c51
1 files changed, 51 insertions, 0 deletions
diff --git a/src/lib/util/test_scheduler_hogging_cancel.c b/src/lib/util/test_scheduler_hogging_cancel.c
new file mode 100644
index 000000000..7611338b3
--- /dev/null
+++ b/src/lib/util/test_scheduler_hogging_cancel.c
@@ -0,0 +1,51 @@
1#include "gnunet_util_lib.h"
2#include <unistd.h>
3
4static int count = 0;
5static int final_count;
6static struct GNUNET_SCHEDULER_Task *t4;
7
8static void end (void *cls)
9{
10 final_count = count;
11 count = 5000;
12 GNUNET_SCHEDULER_shutdown ();
13}
14
15static void self_rescheduling (void *cls)
16{
17 if (0 == count)
18 {
19 GNUNET_SCHEDULER_cancel (t4);
20 GNUNET_SCHEDULER_add_delayed_with_priority (GNUNET_TIME_UNIT_MILLISECONDS,
21 GNUNET_SCHEDULER_PRIORITY_URGENT,
22 &end,
23 NULL);
24 sleep (1);
25 /* end should be added to ready queue on next scheduler pass for certain
26 now */
27 }
28 if (++count < 5000)
29 {
30 GNUNET_SCHEDULER_add_now (&self_rescheduling, NULL);
31 }
32}
33
34static void to_be_canceled (void *cls)
35{
36 /* Don't run me! */
37}
38
39
40static void init (void *cls)
41{
42 GNUNET_SCHEDULER_add_now (&self_rescheduling, NULL);
43 t4 = GNUNET_SCHEDULER_add_now (&to_be_canceled, NULL);
44}
45
46
47int main (int argc, char **argv)
48{
49 GNUNET_SCHEDULER_run (&init, NULL);
50 return final_count < 5000 ? 0 : 1;
51}