diff options
author | Nathan S. Evans <evans@in.tum.de> | 2010-11-05 18:21:50 +0000 |
---|---|---|
committer | Nathan S. Evans <evans@in.tum.de> | 2010-11-05 18:21:50 +0000 |
commit | 75a33a1499cf60ea4364c9aa673816629a6c1413 (patch) | |
tree | 0620da4312bb04de4d7b65074fdd3b0c3dd6cc0e /src/topology | |
parent | 7217c601ad30760872823193d62307e7a335d226 (diff) | |
download | gnunet-75a33a1499cf60ea4364c9aa673816629a6c1413.tar.gz gnunet-75a33a1499cf60ea4364c9aa673816629a6c1413.zip |
big scheduler refactoring, expect some issues
Diffstat (limited to 'src/topology')
-rw-r--r-- | src/topology/gnunet-daemon-topology.c | 61 | ||||
-rw-r--r-- | src/topology/test_gnunet_daemon_topology.c | 9 |
2 files changed, 22 insertions, 48 deletions
diff --git a/src/topology/gnunet-daemon-topology.c b/src/topology/gnunet-daemon-topology.c index dc7face2d..b8bad46a6 100644 --- a/src/topology/gnunet-daemon-topology.c +++ b/src/topology/gnunet-daemon-topology.c | |||
@@ -157,11 +157,6 @@ struct Peer | |||
157 | static struct GNUNET_PEERINFO_NotifyContext *peerinfo_notify; | 157 | static struct GNUNET_PEERINFO_NotifyContext *peerinfo_notify; |
158 | 158 | ||
159 | /** | 159 | /** |
160 | * Our scheduler. | ||
161 | */ | ||
162 | static struct GNUNET_SCHEDULER_Handle *sched; | ||
163 | |||
164 | /** | ||
165 | * Our configuration. | 160 | * Our configuration. |
166 | */ | 161 | */ |
167 | static const struct GNUNET_CONFIGURATION_Handle *cfg; | 162 | static const struct GNUNET_CONFIGURATION_Handle *cfg; |
@@ -347,11 +342,9 @@ free_peer (void *cls, | |||
347 | if (pos->connect_req != NULL) | 342 | if (pos->connect_req != NULL) |
348 | GNUNET_CORE_peer_request_connect_cancel (pos->connect_req); | 343 | GNUNET_CORE_peer_request_connect_cancel (pos->connect_req); |
349 | if (pos->hello_delay_task != GNUNET_SCHEDULER_NO_TASK) | 344 | if (pos->hello_delay_task != GNUNET_SCHEDULER_NO_TASK) |
350 | GNUNET_SCHEDULER_cancel (sched, | 345 | GNUNET_SCHEDULER_cancel (pos->hello_delay_task); |
351 | pos->hello_delay_task); | ||
352 | if (pos->greylist_clean_task != GNUNET_SCHEDULER_NO_TASK) | 346 | if (pos->greylist_clean_task != GNUNET_SCHEDULER_NO_TASK) |
353 | GNUNET_SCHEDULER_cancel (sched, | 347 | GNUNET_SCHEDULER_cancel (pos->greylist_clean_task); |
354 | pos->greylist_clean_task); | ||
355 | GNUNET_free_non_null (pos->hello); | 348 | GNUNET_free_non_null (pos->hello); |
356 | if (pos->filter != NULL) | 349 | if (pos->filter != NULL) |
357 | GNUNET_CONTAINER_bloomfilter_free (pos->filter); | 350 | GNUNET_CONTAINER_bloomfilter_free (pos->filter); |
@@ -406,11 +399,9 @@ attempt_connect (struct Peer *pos) | |||
406 | GREYLIST_AFTER_ATTEMPT_MAX); | 399 | GREYLIST_AFTER_ATTEMPT_MAX); |
407 | pos->greylisted_until = GNUNET_TIME_relative_to_absolute (rem); | 400 | pos->greylisted_until = GNUNET_TIME_relative_to_absolute (rem); |
408 | if (pos->greylist_clean_task != GNUNET_SCHEDULER_NO_TASK) | 401 | if (pos->greylist_clean_task != GNUNET_SCHEDULER_NO_TASK) |
409 | GNUNET_SCHEDULER_cancel (sched, | 402 | GNUNET_SCHEDULER_cancel (pos->greylist_clean_task); |
410 | pos->greylist_clean_task); | ||
411 | pos->greylist_clean_task | 403 | pos->greylist_clean_task |
412 | = GNUNET_SCHEDULER_add_delayed (sched, | 404 | = GNUNET_SCHEDULER_add_delayed (rem, |
413 | rem, | ||
414 | &remove_from_greylist, | 405 | &remove_from_greylist, |
415 | pos); | 406 | pos); |
416 | #if DEBUG_TOPOLOGY | 407 | #if DEBUG_TOPOLOGY |
@@ -422,7 +413,7 @@ attempt_connect (struct Peer *pos) | |||
422 | gettext_noop ("# connect requests issued to core"), | 413 | gettext_noop ("# connect requests issued to core"), |
423 | 1, | 414 | 1, |
424 | GNUNET_NO); | 415 | GNUNET_NO); |
425 | pos->connect_req = GNUNET_CORE_peer_request_connect (sched, cfg, | 416 | pos->connect_req = GNUNET_CORE_peer_request_connect (cfg, |
426 | GNUNET_TIME_UNIT_MINUTES, | 417 | GNUNET_TIME_UNIT_MINUTES, |
427 | &pos->pid, | 418 | &pos->pid, |
428 | &connect_completed_callback, | 419 | &connect_completed_callback, |
@@ -453,8 +444,7 @@ remove_from_greylist (void *cls, | |||
453 | else | 444 | else |
454 | { | 445 | { |
455 | pos->greylist_clean_task | 446 | pos->greylist_clean_task |
456 | = GNUNET_SCHEDULER_add_delayed (sched, | 447 | = GNUNET_SCHEDULER_add_delayed (rem, |
457 | rem, | ||
458 | &remove_from_greylist, | 448 | &remove_from_greylist, |
459 | pos); | 449 | pos); |
460 | } | 450 | } |
@@ -635,8 +625,7 @@ schedule_next_hello (void *cls, | |||
635 | &find_advertisable_hello, | 625 | &find_advertisable_hello, |
636 | &fah); | 626 | &fah); |
637 | pl->hello_delay_task | 627 | pl->hello_delay_task |
638 | = GNUNET_SCHEDULER_add_delayed (sched, | 628 | = GNUNET_SCHEDULER_add_delayed (fah.next_adv, |
639 | fah.next_adv, | ||
640 | &schedule_next_hello, | 629 | &schedule_next_hello, |
641 | pl); | 630 | pl); |
642 | if (fah.result == NULL) | 631 | if (fah.result == NULL) |
@@ -685,13 +674,11 @@ reschedule_hellos (void *cls, | |||
685 | } | 674 | } |
686 | if (peer->hello_delay_task != GNUNET_SCHEDULER_NO_TASK) | 675 | if (peer->hello_delay_task != GNUNET_SCHEDULER_NO_TASK) |
687 | { | 676 | { |
688 | GNUNET_SCHEDULER_cancel (sched, | 677 | GNUNET_SCHEDULER_cancel (peer->hello_delay_task); |
689 | peer->hello_delay_task); | ||
690 | peer->hello_delay_task = GNUNET_SCHEDULER_NO_TASK; | 678 | peer->hello_delay_task = GNUNET_SCHEDULER_NO_TASK; |
691 | } | 679 | } |
692 | peer->hello_delay_task | 680 | peer->hello_delay_task |
693 | = GNUNET_SCHEDULER_add_now (sched, | 681 | = GNUNET_SCHEDULER_add_now (&schedule_next_hello, |
694 | &schedule_next_hello, | ||
695 | peer); | 682 | peer); |
696 | return GNUNET_YES; | 683 | return GNUNET_YES; |
697 | } | 684 | } |
@@ -822,7 +809,7 @@ disconnect_notify (void *cls, | |||
822 | NULL); | 809 | NULL); |
823 | if ( (friend_count < minimum_friend_count) && | 810 | if ( (friend_count < minimum_friend_count) && |
824 | (blacklist == NULL) ) | 811 | (blacklist == NULL) ) |
825 | blacklist = GNUNET_TRANSPORT_blacklist (sched, cfg, | 812 | blacklist = GNUNET_TRANSPORT_blacklist (cfg, |
826 | &blacklist_check, NULL); | 813 | &blacklist_check, NULL); |
827 | } | 814 | } |
828 | 815 | ||
@@ -1021,7 +1008,7 @@ core_init (void *cls, | |||
1021 | { | 1008 | { |
1022 | GNUNET_log (GNUNET_ERROR_TYPE_ERROR, | 1009 | GNUNET_log (GNUNET_ERROR_TYPE_ERROR, |
1023 | _("Failed to connect to core service, can not manage topology!\n")); | 1010 | _("Failed to connect to core service, can not manage topology!\n")); |
1024 | GNUNET_SCHEDULER_shutdown (sched); | 1011 | GNUNET_SCHEDULER_shutdown (); |
1025 | return; | 1012 | return; |
1026 | } | 1013 | } |
1027 | handle = server; | 1014 | handle = server; |
@@ -1031,8 +1018,7 @@ core_init (void *cls, | |||
1031 | "I am peer `%s'\n", | 1018 | "I am peer `%s'\n", |
1032 | GNUNET_i2s (my_id)); | 1019 | GNUNET_i2s (my_id)); |
1033 | #endif | 1020 | #endif |
1034 | peerinfo_notify = GNUNET_PEERINFO_notify (cfg, sched, | 1021 | peerinfo_notify = GNUNET_PEERINFO_notify (cfg, &process_peer, |
1035 | &process_peer, | ||
1036 | NULL); | 1022 | NULL); |
1037 | } | 1023 | } |
1038 | 1024 | ||
@@ -1285,8 +1271,7 @@ hello_advertising_ready (void *cls, | |||
1285 | } | 1271 | } |
1286 | pl->next_hello_allowed = GNUNET_TIME_relative_to_absolute (HELLO_ADVERTISEMENT_MIN_FREQUENCY); | 1272 | pl->next_hello_allowed = GNUNET_TIME_relative_to_absolute (HELLO_ADVERTISEMENT_MIN_FREQUENCY); |
1287 | pl->hello_delay_task | 1273 | pl->hello_delay_task |
1288 | = GNUNET_SCHEDULER_add_now (sched, | 1274 | = GNUNET_SCHEDULER_add_now (&schedule_next_hello, |
1289 | &schedule_next_hello, | ||
1290 | pl); | 1275 | pl); |
1291 | return want; | 1276 | return want; |
1292 | } | 1277 | } |
@@ -1332,14 +1317,12 @@ cleaning_task (void *cls, | |||
1332 | * Main function that will be run. | 1317 | * Main function that will be run. |
1333 | * | 1318 | * |
1334 | * @param cls closure | 1319 | * @param cls closure |
1335 | * @param s the scheduler to use | ||
1336 | * @param args remaining command-line arguments | 1320 | * @param args remaining command-line arguments |
1337 | * @param cfgfile name of the configuration file used (for saving, can be NULL!) | 1321 | * @param cfgfile name of the configuration file used (for saving, can be NULL!) |
1338 | * @param c configuration | 1322 | * @param c configuration |
1339 | */ | 1323 | */ |
1340 | static void | 1324 | static void |
1341 | run (void *cls, | 1325 | run (void *cls, |
1342 | struct GNUNET_SCHEDULER_Handle * s, | ||
1343 | char *const *args, | 1326 | char *const *args, |
1344 | const char *cfgfile, | 1327 | const char *cfgfile, |
1345 | const struct GNUNET_CONFIGURATION_Handle * c) | 1328 | const struct GNUNET_CONFIGURATION_Handle * c) |
@@ -1351,9 +1334,8 @@ run (void *cls, | |||
1351 | }; | 1334 | }; |
1352 | unsigned long long opt; | 1335 | unsigned long long opt; |
1353 | 1336 | ||
1354 | sched = s; | ||
1355 | cfg = c; | 1337 | cfg = c; |
1356 | stats = GNUNET_STATISTICS_create (sched, "topology", cfg); | 1338 | stats = GNUNET_STATISTICS_create ("topology", cfg); |
1357 | autoconnect = GNUNET_CONFIGURATION_get_value_yesno (cfg, | 1339 | autoconnect = GNUNET_CONFIGURATION_get_value_yesno (cfg, |
1358 | "TOPOLOGY", | 1340 | "TOPOLOGY", |
1359 | "AUTOCONNECT"); | 1341 | "AUTOCONNECT"); |
@@ -1387,17 +1369,15 @@ run (void *cls, | |||
1387 | autoconnect ? "autoconnect enabled" : "autoconnect disabled"); | 1369 | autoconnect ? "autoconnect enabled" : "autoconnect disabled"); |
1388 | #endif | 1370 | #endif |
1389 | if (friend_count < minimum_friend_count) | 1371 | if (friend_count < minimum_friend_count) |
1390 | blacklist = GNUNET_TRANSPORT_blacklist (sched, cfg, | 1372 | blacklist = GNUNET_TRANSPORT_blacklist (cfg, |
1391 | &blacklist_check, NULL); | 1373 | &blacklist_check, NULL); |
1392 | transport = GNUNET_TRANSPORT_connect (sched, | 1374 | transport = GNUNET_TRANSPORT_connect (cfg, |
1393 | cfg, | ||
1394 | NULL, | 1375 | NULL, |
1395 | NULL, | 1376 | NULL, |
1396 | NULL, | 1377 | NULL, |
1397 | NULL, | 1378 | NULL, |
1398 | NULL); | 1379 | NULL); |
1399 | handle = GNUNET_CORE_connect (sched, | 1380 | handle = GNUNET_CORE_connect (cfg, |
1400 | cfg, | ||
1401 | GNUNET_TIME_UNIT_FOREVER_REL, | 1381 | GNUNET_TIME_UNIT_FOREVER_REL, |
1402 | NULL, | 1382 | NULL, |
1403 | &core_init, | 1383 | &core_init, |
@@ -1407,15 +1387,14 @@ run (void *cls, | |||
1407 | NULL, GNUNET_NO, | 1387 | NULL, GNUNET_NO, |
1408 | NULL, GNUNET_NO, | 1388 | NULL, GNUNET_NO, |
1409 | handlers); | 1389 | handlers); |
1410 | GNUNET_SCHEDULER_add_delayed (sched, | 1390 | GNUNET_SCHEDULER_add_delayed (GNUNET_TIME_UNIT_FOREVER_REL, |
1411 | GNUNET_TIME_UNIT_FOREVER_REL, | ||
1412 | &cleaning_task, NULL); | 1391 | &cleaning_task, NULL); |
1413 | if (NULL == transport) | 1392 | if (NULL == transport) |
1414 | { | 1393 | { |
1415 | GNUNET_log (GNUNET_ERROR_TYPE_ERROR, | 1394 | GNUNET_log (GNUNET_ERROR_TYPE_ERROR, |
1416 | _("Failed to connect to `%s' service.\n"), | 1395 | _("Failed to connect to `%s' service.\n"), |
1417 | "transport"); | 1396 | "transport"); |
1418 | GNUNET_SCHEDULER_shutdown (sched); | 1397 | GNUNET_SCHEDULER_shutdown (); |
1419 | return; | 1398 | return; |
1420 | } | 1399 | } |
1421 | if (NULL == handle) | 1400 | if (NULL == handle) |
@@ -1423,7 +1402,7 @@ run (void *cls, | |||
1423 | GNUNET_log (GNUNET_ERROR_TYPE_ERROR, | 1402 | GNUNET_log (GNUNET_ERROR_TYPE_ERROR, |
1424 | _("Failed to connect to `%s' service.\n"), | 1403 | _("Failed to connect to `%s' service.\n"), |
1425 | "core"); | 1404 | "core"); |
1426 | GNUNET_SCHEDULER_shutdown (sched); | 1405 | GNUNET_SCHEDULER_shutdown (); |
1427 | return; | 1406 | return; |
1428 | } | 1407 | } |
1429 | } | 1408 | } |
diff --git a/src/topology/test_gnunet_daemon_topology.c b/src/topology/test_gnunet_daemon_topology.c index f6b671dc0..529496f11 100644 --- a/src/topology/test_gnunet_daemon_topology.c +++ b/src/topology/test_gnunet_daemon_topology.c | |||
@@ -48,8 +48,6 @@ static struct GNUNET_TESTING_Daemon *first; | |||
48 | 48 | ||
49 | static struct GNUNET_TESTING_Daemon *last; | 49 | static struct GNUNET_TESTING_Daemon *last; |
50 | 50 | ||
51 | static struct GNUNET_SCHEDULER_Handle *sched; | ||
52 | |||
53 | /** | 51 | /** |
54 | * Check whether peers successfully shut down. | 52 | * Check whether peers successfully shut down. |
55 | */ | 53 | */ |
@@ -108,8 +106,7 @@ notify_connect_complete(void *cls, | |||
108 | { | 106 | { |
109 | /* FIXME: check that topology adds a few more links | 107 | /* FIXME: check that topology adds a few more links |
110 | in addition to those that were seeded */ | 108 | in addition to those that were seeded */ |
111 | GNUNET_SCHEDULER_add_now (sched, | 109 | GNUNET_SCHEDULER_add_now (&clean_up_task, |
112 | &clean_up_task, | ||
113 | NULL); | 110 | NULL); |
114 | } | 111 | } |
115 | } | 112 | } |
@@ -145,19 +142,17 @@ static void my_cb(void *cls, | |||
145 | 142 | ||
146 | static void | 143 | static void |
147 | run (void *cls, | 144 | run (void *cls, |
148 | struct GNUNET_SCHEDULER_Handle *s, | ||
149 | char *const *args, | 145 | char *const *args, |
150 | const char *cfgfile, | 146 | const char *cfgfile, |
151 | const struct GNUNET_CONFIGURATION_Handle *cfg) | 147 | const struct GNUNET_CONFIGURATION_Handle *cfg) |
152 | { | 148 | { |
153 | sched = s; | ||
154 | ok = 1; | 149 | ok = 1; |
155 | #if VERBOSE | 150 | #if VERBOSE |
156 | GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, | 151 | GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, |
157 | "Starting daemons.\n"); | 152 | "Starting daemons.\n"); |
158 | #endif | 153 | #endif |
159 | peers_left = NUM_PEERS; | 154 | peers_left = NUM_PEERS; |
160 | pg = GNUNET_TESTING_daemons_start (sched, cfg, | 155 | pg = GNUNET_TESTING_daemons_start (cfg, |
161 | peers_left, | 156 | peers_left, |
162 | TIMEOUT, | 157 | TIMEOUT, |
163 | NULL, NULL, | 158 | NULL, NULL, |