aboutsummaryrefslogtreecommitdiff
path: root/src/topology
diff options
context:
space:
mode:
authorNathan S. Evans <evans@in.tum.de>2010-11-05 18:21:50 +0000
committerNathan S. Evans <evans@in.tum.de>2010-11-05 18:21:50 +0000
commit75a33a1499cf60ea4364c9aa673816629a6c1413 (patch)
tree0620da4312bb04de4d7b65074fdd3b0c3dd6cc0e /src/topology
parent7217c601ad30760872823193d62307e7a335d226 (diff)
downloadgnunet-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.c61
-rw-r--r--src/topology/test_gnunet_daemon_topology.c9
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
157static struct GNUNET_PEERINFO_NotifyContext *peerinfo_notify; 157static struct GNUNET_PEERINFO_NotifyContext *peerinfo_notify;
158 158
159/** 159/**
160 * Our scheduler.
161 */
162static struct GNUNET_SCHEDULER_Handle *sched;
163
164/**
165 * Our configuration. 160 * Our configuration.
166 */ 161 */
167static const struct GNUNET_CONFIGURATION_Handle *cfg; 162static 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 */
1340static void 1324static void
1341run (void *cls, 1325run (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
49static struct GNUNET_TESTING_Daemon *last; 49static struct GNUNET_TESTING_Daemon *last;
50 50
51static 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
146static void 143static void
147run (void *cls, 144run (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,