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/fs/fs_search.c | |
parent | 7217c601ad30760872823193d62307e7a335d226 (diff) | |
download | gnunet-75a33a1499cf60ea4364c9aa673816629a6c1413.tar.gz gnunet-75a33a1499cf60ea4364c9aa673816629a6c1413.zip |
big scheduler refactoring, expect some issues
Diffstat (limited to 'src/fs/fs_search.c')
-rw-r--r-- | src/fs/fs_search.c | 52 |
1 files changed, 16 insertions, 36 deletions
diff --git a/src/fs/fs_search.c b/src/fs/fs_search.c index 16e1dd1d5..1ffd681aa 100644 --- a/src/fs/fs_search.c +++ b/src/fs/fs_search.c | |||
@@ -279,32 +279,27 @@ GNUNET_FS_search_probe_progress_ (void *cls, | |||
279 | case GNUNET_FS_STATUS_DOWNLOAD_ERROR: | 279 | case GNUNET_FS_STATUS_DOWNLOAD_ERROR: |
280 | if (sr->probe_cancel_task != GNUNET_SCHEDULER_NO_TASK) | 280 | if (sr->probe_cancel_task != GNUNET_SCHEDULER_NO_TASK) |
281 | { | 281 | { |
282 | GNUNET_SCHEDULER_cancel (sr->sc->h->sched, | 282 | GNUNET_SCHEDULER_cancel (sr->probe_cancel_task); |
283 | sr->probe_cancel_task); | ||
284 | sr->probe_cancel_task = GNUNET_SCHEDULER_NO_TASK; | 283 | sr->probe_cancel_task = GNUNET_SCHEDULER_NO_TASK; |
285 | } | 284 | } |
286 | sr->probe_cancel_task = GNUNET_SCHEDULER_add_delayed (sr->sc->h->sched, | 285 | sr->probe_cancel_task = GNUNET_SCHEDULER_add_delayed (sr->remaining_probe_time, |
287 | sr->remaining_probe_time, | ||
288 | &probe_failure_handler, | 286 | &probe_failure_handler, |
289 | sr); | 287 | sr); |
290 | break; | 288 | break; |
291 | case GNUNET_FS_STATUS_DOWNLOAD_COMPLETED: | 289 | case GNUNET_FS_STATUS_DOWNLOAD_COMPLETED: |
292 | if (sr->probe_cancel_task != GNUNET_SCHEDULER_NO_TASK) | 290 | if (sr->probe_cancel_task != GNUNET_SCHEDULER_NO_TASK) |
293 | { | 291 | { |
294 | GNUNET_SCHEDULER_cancel (sr->sc->h->sched, | 292 | GNUNET_SCHEDULER_cancel (sr->probe_cancel_task); |
295 | sr->probe_cancel_task); | ||
296 | sr->probe_cancel_task = GNUNET_SCHEDULER_NO_TASK; | 293 | sr->probe_cancel_task = GNUNET_SCHEDULER_NO_TASK; |
297 | } | 294 | } |
298 | sr->probe_cancel_task = GNUNET_SCHEDULER_add_delayed (sr->sc->h->sched, | 295 | sr->probe_cancel_task = GNUNET_SCHEDULER_add_delayed (sr->remaining_probe_time, |
299 | sr->remaining_probe_time, | ||
300 | &probe_success_handler, | 296 | &probe_success_handler, |
301 | sr); | 297 | sr); |
302 | break; | 298 | break; |
303 | case GNUNET_FS_STATUS_DOWNLOAD_STOPPED: | 299 | case GNUNET_FS_STATUS_DOWNLOAD_STOPPED: |
304 | if (sr->probe_cancel_task != GNUNET_SCHEDULER_NO_TASK) | 300 | if (sr->probe_cancel_task != GNUNET_SCHEDULER_NO_TASK) |
305 | { | 301 | { |
306 | GNUNET_SCHEDULER_cancel (sr->sc->h->sched, | 302 | GNUNET_SCHEDULER_cancel (sr->probe_cancel_task); |
307 | sr->probe_cancel_task); | ||
308 | sr->probe_cancel_task = GNUNET_SCHEDULER_NO_TASK; | 303 | sr->probe_cancel_task = GNUNET_SCHEDULER_NO_TASK; |
309 | } | 304 | } |
310 | sr = NULL; | 305 | sr = NULL; |
@@ -312,16 +307,14 @@ GNUNET_FS_search_probe_progress_ (void *cls, | |||
312 | case GNUNET_FS_STATUS_DOWNLOAD_ACTIVE: | 307 | case GNUNET_FS_STATUS_DOWNLOAD_ACTIVE: |
313 | GNUNET_assert (sr->probe_cancel_task == GNUNET_SCHEDULER_NO_TASK); | 308 | GNUNET_assert (sr->probe_cancel_task == GNUNET_SCHEDULER_NO_TASK); |
314 | sr->probe_active_time = GNUNET_TIME_absolute_get (); | 309 | sr->probe_active_time = GNUNET_TIME_absolute_get (); |
315 | sr->probe_cancel_task = GNUNET_SCHEDULER_add_delayed (sr->sc->h->sched, | 310 | sr->probe_cancel_task = GNUNET_SCHEDULER_add_delayed (sr->remaining_probe_time, |
316 | sr->remaining_probe_time, | ||
317 | &probe_failure_handler, | 311 | &probe_failure_handler, |
318 | sr); | 312 | sr); |
319 | break; | 313 | break; |
320 | case GNUNET_FS_STATUS_DOWNLOAD_INACTIVE: | 314 | case GNUNET_FS_STATUS_DOWNLOAD_INACTIVE: |
321 | if (sr->probe_cancel_task != GNUNET_SCHEDULER_NO_TASK) | 315 | if (sr->probe_cancel_task != GNUNET_SCHEDULER_NO_TASK) |
322 | { | 316 | { |
323 | GNUNET_SCHEDULER_cancel (sr->sc->h->sched, | 317 | GNUNET_SCHEDULER_cancel (sr->probe_cancel_task); |
324 | sr->probe_cancel_task); | ||
325 | sr->probe_cancel_task = GNUNET_SCHEDULER_NO_TASK; | 318 | sr->probe_cancel_task = GNUNET_SCHEDULER_NO_TASK; |
326 | } | 319 | } |
327 | dur = GNUNET_TIME_absolute_get_duration (sr->probe_active_time); | 320 | dur = GNUNET_TIME_absolute_get_duration (sr->probe_active_time); |
@@ -1022,8 +1015,7 @@ do_reconnect (void *cls, | |||
1022 | size_t size; | 1015 | size_t size; |
1023 | 1016 | ||
1024 | sc->task = GNUNET_SCHEDULER_NO_TASK; | 1017 | sc->task = GNUNET_SCHEDULER_NO_TASK; |
1025 | client = GNUNET_CLIENT_connect (sc->h->sched, | 1018 | client = GNUNET_CLIENT_connect ("fs", |
1026 | "fs", | ||
1027 | sc->h->cfg); | 1019 | sc->h->cfg); |
1028 | if (NULL == client) | 1020 | if (NULL == client) |
1029 | { | 1021 | { |
@@ -1060,8 +1052,7 @@ try_reconnect (struct GNUNET_FS_SearchContext *sc) | |||
1060 | sc->client = NULL; | 1052 | sc->client = NULL; |
1061 | } | 1053 | } |
1062 | sc->task | 1054 | sc->task |
1063 | = GNUNET_SCHEDULER_add_delayed (sc->h->sched, | 1055 | = GNUNET_SCHEDULER_add_delayed (GNUNET_TIME_UNIT_SECONDS, |
1064 | GNUNET_TIME_UNIT_SECONDS, | ||
1065 | &do_reconnect, | 1056 | &do_reconnect, |
1066 | sc); | 1057 | sc); |
1067 | } | 1058 | } |
@@ -1176,8 +1167,7 @@ GNUNET_FS_search_start_searching_ (struct GNUNET_FS_SearchContext *sc) | |||
1176 | &sc->requests[i].key); | 1167 | &sc->requests[i].key); |
1177 | } | 1168 | } |
1178 | } | 1169 | } |
1179 | sc->client = GNUNET_CLIENT_connect (sc->h->sched, | 1170 | sc->client = GNUNET_CLIENT_connect ("fs", |
1180 | "fs", | ||
1181 | sc->h->cfg); | 1171 | sc->h->cfg); |
1182 | if (NULL == sc->client) | 1172 | if (NULL == sc->client) |
1183 | return GNUNET_SYSERR; | 1173 | return GNUNET_SYSERR; |
@@ -1204,8 +1194,6 @@ search_result_freeze_probes (void *cls, | |||
1204 | const GNUNET_HashCode * key, | 1194 | const GNUNET_HashCode * key, |
1205 | void *value) | 1195 | void *value) |
1206 | { | 1196 | { |
1207 | struct GNUNET_FS_SearchContext *sc = cls; | ||
1208 | struct GNUNET_FS_Handle *h = sc->h; | ||
1209 | struct GNUNET_FS_SearchResult *sr = value; | 1197 | struct GNUNET_FS_SearchResult *sr = value; |
1210 | 1198 | ||
1211 | if (sr->probe_ctx != NULL) | 1199 | if (sr->probe_ctx != NULL) |
@@ -1215,8 +1203,7 @@ search_result_freeze_probes (void *cls, | |||
1215 | } | 1203 | } |
1216 | if (sr->probe_cancel_task != GNUNET_SCHEDULER_NO_TASK) | 1204 | if (sr->probe_cancel_task != GNUNET_SCHEDULER_NO_TASK) |
1217 | { | 1205 | { |
1218 | GNUNET_SCHEDULER_cancel (h->sched, | 1206 | GNUNET_SCHEDULER_cancel (sr->probe_cancel_task); |
1219 | sr->probe_cancel_task); | ||
1220 | sr->probe_cancel_task = GNUNET_SCHEDULER_NO_TASK; | 1207 | sr->probe_cancel_task = GNUNET_SCHEDULER_NO_TASK; |
1221 | } | 1208 | } |
1222 | if (sr->update_search != NULL) | 1209 | if (sr->update_search != NULL) |
@@ -1261,7 +1248,6 @@ search_result_suspend (void *cls, | |||
1261 | void *value) | 1248 | void *value) |
1262 | { | 1249 | { |
1263 | struct GNUNET_FS_SearchContext *sc = cls; | 1250 | struct GNUNET_FS_SearchContext *sc = cls; |
1264 | struct GNUNET_FS_Handle *h = sc->h; | ||
1265 | struct GNUNET_FS_SearchResult *sr = value; | 1251 | struct GNUNET_FS_SearchResult *sr = value; |
1266 | struct GNUNET_FS_ProgressInfo pi; | 1252 | struct GNUNET_FS_ProgressInfo pi; |
1267 | 1253 | ||
@@ -1281,8 +1267,7 @@ search_result_suspend (void *cls, | |||
1281 | if (sr->probe_ctx != NULL) | 1267 | if (sr->probe_ctx != NULL) |
1282 | GNUNET_FS_download_stop (sr->probe_ctx, GNUNET_YES); | 1268 | GNUNET_FS_download_stop (sr->probe_ctx, GNUNET_YES); |
1283 | if (sr->probe_cancel_task != GNUNET_SCHEDULER_NO_TASK) | 1269 | if (sr->probe_cancel_task != GNUNET_SCHEDULER_NO_TASK) |
1284 | GNUNET_SCHEDULER_cancel (h->sched, | 1270 | GNUNET_SCHEDULER_cancel (sr->probe_cancel_task); |
1285 | sr->probe_cancel_task); | ||
1286 | GNUNET_free (sr); | 1271 | GNUNET_free (sr); |
1287 | return GNUNET_OK; | 1272 | return GNUNET_OK; |
1288 | } | 1273 | } |
@@ -1309,8 +1294,7 @@ GNUNET_FS_search_signal_suspend_ (void *cls) | |||
1309 | sc->client_info = GNUNET_FS_search_make_status_ (&pi, sc); | 1294 | sc->client_info = GNUNET_FS_search_make_status_ (&pi, sc); |
1310 | GNUNET_break (NULL == sc->client_info); | 1295 | GNUNET_break (NULL == sc->client_info); |
1311 | if (sc->task != GNUNET_SCHEDULER_NO_TASK) | 1296 | if (sc->task != GNUNET_SCHEDULER_NO_TASK) |
1312 | GNUNET_SCHEDULER_cancel (sc->h->sched, | 1297 | GNUNET_SCHEDULER_cancel (sc->task); |
1313 | sc->task); | ||
1314 | if (NULL != sc->client) | 1298 | if (NULL != sc->client) |
1315 | GNUNET_CLIENT_disconnect (sc->client, GNUNET_NO); | 1299 | GNUNET_CLIENT_disconnect (sc->client, GNUNET_NO); |
1316 | GNUNET_CONTAINER_multihashmap_destroy (sc->master_result_map); | 1300 | GNUNET_CONTAINER_multihashmap_destroy (sc->master_result_map); |
@@ -1366,8 +1350,7 @@ GNUNET_FS_search_pause (struct GNUNET_FS_SearchContext *sc) | |||
1366 | struct GNUNET_FS_ProgressInfo pi; | 1350 | struct GNUNET_FS_ProgressInfo pi; |
1367 | 1351 | ||
1368 | if (sc->task != GNUNET_SCHEDULER_NO_TASK) | 1352 | if (sc->task != GNUNET_SCHEDULER_NO_TASK) |
1369 | GNUNET_SCHEDULER_cancel (sc->h->sched, | 1353 | GNUNET_SCHEDULER_cancel (sc->task); |
1370 | sc->task); | ||
1371 | sc->task = GNUNET_SCHEDULER_NO_TASK; | 1354 | sc->task = GNUNET_SCHEDULER_NO_TASK; |
1372 | if (NULL != sc->client) | 1355 | if (NULL != sc->client) |
1373 | GNUNET_CLIENT_disconnect (sc->client, GNUNET_NO); | 1356 | GNUNET_CLIENT_disconnect (sc->client, GNUNET_NO); |
@@ -1417,7 +1400,6 @@ search_result_free (void *cls, | |||
1417 | void *value) | 1400 | void *value) |
1418 | { | 1401 | { |
1419 | struct GNUNET_FS_SearchContext *sc = cls; | 1402 | struct GNUNET_FS_SearchContext *sc = cls; |
1420 | struct GNUNET_FS_Handle *h = sc->h; | ||
1421 | struct GNUNET_FS_SearchResult *sr = value; | 1403 | struct GNUNET_FS_SearchResult *sr = value; |
1422 | struct GNUNET_FS_ProgressInfo pi; | 1404 | struct GNUNET_FS_ProgressInfo pi; |
1423 | 1405 | ||
@@ -1458,8 +1440,7 @@ search_result_free (void *cls, | |||
1458 | if (sr->probe_ctx != NULL) | 1440 | if (sr->probe_ctx != NULL) |
1459 | GNUNET_FS_download_stop (sr->probe_ctx, GNUNET_YES); | 1441 | GNUNET_FS_download_stop (sr->probe_ctx, GNUNET_YES); |
1460 | if (sr->probe_cancel_task != GNUNET_SCHEDULER_NO_TASK) | 1442 | if (sr->probe_cancel_task != GNUNET_SCHEDULER_NO_TASK) |
1461 | GNUNET_SCHEDULER_cancel (h->sched, | 1443 | GNUNET_SCHEDULER_cancel (sr->probe_cancel_task); |
1462 | sr->probe_cancel_task); | ||
1463 | GNUNET_free (sr); | 1444 | GNUNET_free (sr); |
1464 | return GNUNET_OK; | 1445 | return GNUNET_OK; |
1465 | } | 1446 | } |
@@ -1501,8 +1482,7 @@ GNUNET_FS_search_stop (struct GNUNET_FS_SearchContext *sc) | |||
1501 | sc->client_info = GNUNET_FS_search_make_status_ (&pi, sc); | 1482 | sc->client_info = GNUNET_FS_search_make_status_ (&pi, sc); |
1502 | GNUNET_break (NULL == sc->client_info); | 1483 | GNUNET_break (NULL == sc->client_info); |
1503 | if (sc->task != GNUNET_SCHEDULER_NO_TASK) | 1484 | if (sc->task != GNUNET_SCHEDULER_NO_TASK) |
1504 | GNUNET_SCHEDULER_cancel (sc->h->sched, | 1485 | GNUNET_SCHEDULER_cancel (sc->task); |
1505 | sc->task); | ||
1506 | if (NULL != sc->client) | 1486 | if (NULL != sc->client) |
1507 | GNUNET_CLIENT_disconnect (sc->client, GNUNET_NO); | 1487 | GNUNET_CLIENT_disconnect (sc->client, GNUNET_NO); |
1508 | GNUNET_CONTAINER_multihashmap_destroy (sc->master_result_map); | 1488 | GNUNET_CONTAINER_multihashmap_destroy (sc->master_result_map); |