aboutsummaryrefslogtreecommitdiff
path: root/src/fs/fs_search.c
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/fs/fs_search.c
parent7217c601ad30760872823193d62307e7a335d226 (diff)
downloadgnunet-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.c52
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);