diff options
author | Christian Grothoff <christian@grothoff.org> | 2017-01-25 22:58:01 +0100 |
---|---|---|
committer | Christian Grothoff <christian@grothoff.org> | 2017-01-25 22:58:01 +0100 |
commit | 2b33fde2a4f976581695ba6009b0a892caf78b19 (patch) | |
tree | 1ee79fee6f1226861f49d207f96c98dbc0b5ce5a /src/fs | |
parent | 8f5f7f7885237771d88cce717d508b97d79f6b6e (diff) | |
download | gnunet-2b33fde2a4f976581695ba6009b0a892caf78b19.tar.gz gnunet-2b33fde2a4f976581695ba6009b0a892caf78b19.zip |
do not start download twice
Diffstat (limited to 'src/fs')
-rw-r--r-- | src/fs/fs_api.c | 31 | ||||
-rw-r--r-- | src/fs/fs_download.c | 28 |
2 files changed, 41 insertions, 18 deletions
diff --git a/src/fs/fs_api.c b/src/fs/fs_api.c index 7e769483b..c1ed9521b 100644 --- a/src/fs/fs_api.c +++ b/src/fs/fs_api.c | |||
@@ -1647,7 +1647,9 @@ deserialize_publish_file (void *cls, | |||
1647 | filename, emsg); | 1647 | filename, emsg); |
1648 | GNUNET_free (emsg); | 1648 | GNUNET_free (emsg); |
1649 | } | 1649 | } |
1650 | pc->top = GNUNET_FS_make_top (h, &GNUNET_FS_publish_signal_suspend_, pc); | 1650 | pc->top = GNUNET_FS_make_top (h, |
1651 | &GNUNET_FS_publish_signal_suspend_, | ||
1652 | pc); | ||
1651 | return GNUNET_OK; | 1653 | return GNUNET_OK; |
1652 | cleanup: | 1654 | cleanup: |
1653 | GNUNET_free_non_null (pc->nid); | 1655 | GNUNET_free_non_null (pc->nid); |
@@ -2278,7 +2280,9 @@ deserialize_unindex_file (void *cls, | |||
2278 | GNUNET_break (0); | 2280 | GNUNET_break (0); |
2279 | goto cleanup; | 2281 | goto cleanup; |
2280 | } | 2282 | } |
2281 | uc->top = GNUNET_FS_make_top (h, &GNUNET_FS_unindex_signal_suspend_, uc); | 2283 | uc->top = GNUNET_FS_make_top (h, |
2284 | &GNUNET_FS_unindex_signal_suspend_, | ||
2285 | uc); | ||
2282 | pi.status = GNUNET_FS_STATUS_UNINDEX_RESUME; | 2286 | pi.status = GNUNET_FS_STATUS_UNINDEX_RESUME; |
2283 | pi.value.unindex.specifics.resume.message = uc->emsg; | 2287 | pi.value.unindex.specifics.resume.message = uc->emsg; |
2284 | GNUNET_FS_unindex_make_status_ (&pi, uc, | 2288 | GNUNET_FS_unindex_make_status_ (&pi, uc, |
@@ -2806,7 +2810,8 @@ deserialize_download (struct GNUNET_FS_Handle *h, | |||
2806 | GNUNET_FS_compute_depth (GNUNET_FS_uri_chk_get_file_size (dc->uri)); | 2810 | GNUNET_FS_compute_depth (GNUNET_FS_uri_chk_get_file_size (dc->uri)); |
2807 | if (GNUNET_FS_uri_test_loc (dc->uri)) | 2811 | if (GNUNET_FS_uri_test_loc (dc->uri)) |
2808 | GNUNET_assert (GNUNET_OK == | 2812 | GNUNET_assert (GNUNET_OK == |
2809 | GNUNET_FS_uri_loc_get_peer_identity (dc->uri, &dc->target)); | 2813 | GNUNET_FS_uri_loc_get_peer_identity (dc->uri, |
2814 | &dc->target)); | ||
2810 | if (NULL == dc->emsg) | 2815 | if (NULL == dc->emsg) |
2811 | { | 2816 | { |
2812 | dc->top_request = read_download_request (rh); | 2817 | dc->top_request = read_download_request (rh); |
@@ -2816,10 +2821,14 @@ deserialize_download (struct GNUNET_FS_Handle *h, | |||
2816 | goto cleanup; | 2821 | goto cleanup; |
2817 | } | 2822 | } |
2818 | } | 2823 | } |
2819 | dn = get_download_sync_filename (dc, dc->serialization, ".dir"); | 2824 | dn = get_download_sync_filename (dc, |
2825 | dc->serialization, | ||
2826 | ".dir"); | ||
2820 | if (NULL != dn) | 2827 | if (NULL != dn) |
2821 | { | 2828 | { |
2822 | if (GNUNET_YES == GNUNET_DISK_directory_test (dn, GNUNET_YES)) | 2829 | if (GNUNET_YES == |
2830 | GNUNET_DISK_directory_test (dn, | ||
2831 | GNUNET_YES)) | ||
2823 | GNUNET_DISK_directory_scan (dn, | 2832 | GNUNET_DISK_directory_scan (dn, |
2824 | &deserialize_subdownload, | 2833 | &deserialize_subdownload, |
2825 | dc); | 2834 | dc); |
@@ -2836,17 +2845,19 @@ deserialize_download (struct GNUNET_FS_Handle *h, | |||
2836 | dc->search = search; | 2845 | dc->search = search; |
2837 | search->download = dc; | 2846 | search->download = dc; |
2838 | } | 2847 | } |
2839 | if ((NULL == parent) && (NULL == search)) | 2848 | if ( (NULL == parent) && |
2849 | (NULL == search) ) | ||
2840 | { | 2850 | { |
2841 | dc->top = | 2851 | dc->top |
2842 | GNUNET_FS_make_top (dc->h, | 2852 | = GNUNET_FS_make_top (dc->h, |
2843 | &GNUNET_FS_download_signal_suspend_, | 2853 | &GNUNET_FS_download_signal_suspend_, |
2844 | dc); | 2854 | dc); |
2845 | signal_download_resume (dc); | 2855 | signal_download_resume (dc); |
2846 | } | 2856 | } |
2847 | GNUNET_free (uris); | 2857 | GNUNET_free (uris); |
2848 | dc->task = GNUNET_SCHEDULER_add_now (&GNUNET_FS_download_start_task_, | 2858 | if (NULL == dc->job_queue) |
2849 | dc); | 2859 | dc->task = GNUNET_SCHEDULER_add_now (&GNUNET_FS_download_start_task_, |
2860 | dc); | ||
2850 | return; | 2861 | return; |
2851 | cleanup: | 2862 | cleanup: |
2852 | GNUNET_free_non_null (uris); | 2863 | GNUNET_free_non_null (uris); |
diff --git a/src/fs/fs_download.c b/src/fs/fs_download.c index 53b836f22..a89a95907 100644 --- a/src/fs/fs_download.c +++ b/src/fs/fs_download.c | |||
@@ -1380,6 +1380,7 @@ try_reconnect (struct GNUNET_FS_DownloadContext *dc) | |||
1380 | "Will try to reconnect in %s\n", | 1380 | "Will try to reconnect in %s\n", |
1381 | GNUNET_STRINGS_relative_time_to_string (dc->reconnect_backoff, | 1381 | GNUNET_STRINGS_relative_time_to_string (dc->reconnect_backoff, |
1382 | GNUNET_YES)); | 1382 | GNUNET_YES)); |
1383 | GNUNET_assert (NULL == dc->job_queue); | ||
1383 | dc->task = | 1384 | dc->task = |
1384 | GNUNET_SCHEDULER_add_delayed (dc->reconnect_backoff, | 1385 | GNUNET_SCHEDULER_add_delayed (dc->reconnect_backoff, |
1385 | &do_reconnect, | 1386 | &do_reconnect, |
@@ -1533,7 +1534,7 @@ reconstruct_cont (void *cls) | |||
1533 | struct GNUNET_FS_DownloadContext *dc = cls; | 1534 | struct GNUNET_FS_DownloadContext *dc = cls; |
1534 | 1535 | ||
1535 | /* clean up state from tree encoder */ | 1536 | /* clean up state from tree encoder */ |
1536 | if (dc->task != NULL) | 1537 | if (NULL != dc->task) |
1537 | { | 1538 | { |
1538 | GNUNET_SCHEDULER_cancel (dc->task); | 1539 | GNUNET_SCHEDULER_cancel (dc->task); |
1539 | dc->task = NULL; | 1540 | dc->task = NULL; |
@@ -1584,9 +1585,13 @@ get_next_block (void *cls) | |||
1584 | * @param block_size size of block (in bytes) | 1585 | * @param block_size size of block (in bytes) |
1585 | */ | 1586 | */ |
1586 | static void | 1587 | static void |
1587 | reconstruct_cb (void *cls, const struct ContentHashKey *chk, uint64_t offset, | 1588 | reconstruct_cb (void *cls, |
1588 | unsigned int depth, enum GNUNET_BLOCK_Type type, | 1589 | const struct ContentHashKey *chk, |
1589 | const void *block, uint16_t block_size) | 1590 | uint64_t offset, |
1591 | unsigned int depth, | ||
1592 | enum GNUNET_BLOCK_Type type, | ||
1593 | const void *block, | ||
1594 | uint16_t block_size) | ||
1590 | { | 1595 | { |
1591 | struct GNUNET_FS_DownloadContext *dc = cls; | 1596 | struct GNUNET_FS_DownloadContext *dc = cls; |
1592 | struct GNUNET_FS_ProgressInfo pi; | 1597 | struct GNUNET_FS_ProgressInfo pi; |
@@ -1607,7 +1612,8 @@ reconstruct_cb (void *cls, const struct ContentHashKey *chk, uint64_t offset, | |||
1607 | "Block %u < %u irrelevant for our range\n", | 1612 | "Block %u < %u irrelevant for our range\n", |
1608 | chld, | 1613 | chld, |
1609 | dr->children[0]->chk_idx); | 1614 | dr->children[0]->chk_idx); |
1610 | dc->task = GNUNET_SCHEDULER_add_now (&get_next_block, dc); | 1615 | dc->task = GNUNET_SCHEDULER_add_now (&get_next_block, |
1616 | dc); | ||
1611 | return; /* irrelevant block */ | 1617 | return; /* irrelevant block */ |
1612 | } | 1618 | } |
1613 | if (chld > dr->children[dr->num_children-1]->chk_idx) | 1619 | if (chld > dr->children[dr->num_children-1]->chk_idx) |
@@ -1701,8 +1707,10 @@ reconstruct_cb (void *cls, const struct ContentHashKey *chk, uint64_t offset, | |||
1701 | GNUNET_assert (0); | 1707 | GNUNET_assert (0); |
1702 | break; | 1708 | break; |
1703 | } | 1709 | } |
1704 | dc->task = GNUNET_SCHEDULER_add_now (&get_next_block, dc); | 1710 | dc->task = GNUNET_SCHEDULER_add_now (&get_next_block, |
1705 | if ((dr == dc->top_request) && (dr->state == BRS_DOWNLOAD_UP)) | 1711 | dc); |
1712 | if ( (dr == dc->top_request) && | ||
1713 | (dr->state == BRS_DOWNLOAD_UP) ) | ||
1706 | check_completed (dc); | 1714 | check_completed (dc); |
1707 | } | 1715 | } |
1708 | 1716 | ||
@@ -1882,7 +1890,8 @@ GNUNET_FS_download_start_task_ (void *cls) | |||
1882 | &reconstruct_cb, | 1890 | &reconstruct_cb, |
1883 | NULL, | 1891 | NULL, |
1884 | &reconstruct_cont); | 1892 | &reconstruct_cont); |
1885 | dc->task = GNUNET_SCHEDULER_add_now (&get_next_block, dc); | 1893 | dc->task = GNUNET_SCHEDULER_add_now (&get_next_block, |
1894 | dc); | ||
1886 | } | 1895 | } |
1887 | else | 1896 | else |
1888 | { | 1897 | { |
@@ -2037,6 +2046,7 @@ create_download_context (struct GNUNET_FS_Handle *h, | |||
2037 | filename, | 2046 | filename, |
2038 | (unsigned long long) length, | 2047 | (unsigned long long) length, |
2039 | dc->treedepth); | 2048 | dc->treedepth); |
2049 | GNUNET_assert (NULL == dc->job_queue); | ||
2040 | dc->task = GNUNET_SCHEDULER_add_now (&GNUNET_FS_download_start_task_, | 2050 | dc->task = GNUNET_SCHEDULER_add_now (&GNUNET_FS_download_start_task_, |
2041 | dc); | 2051 | dc); |
2042 | return dc; | 2052 | return dc; |
@@ -2199,6 +2209,7 @@ GNUNET_FS_download_start_downloading_ (struct GNUNET_FS_DownloadContext *dc) | |||
2199 | if (NULL != dc->mq) | 2209 | if (NULL != dc->mq) |
2200 | return; /* already running */ | 2210 | return; /* already running */ |
2201 | GNUNET_assert (NULL == dc->job_queue); | 2211 | GNUNET_assert (NULL == dc->job_queue); |
2212 | GNUNET_assert (NULL == dc->task); | ||
2202 | GNUNET_assert (NULL != dc->active); | 2213 | GNUNET_assert (NULL != dc->active); |
2203 | dc->job_queue = | 2214 | dc->job_queue = |
2204 | GNUNET_FS_queue_ (dc->h, | 2215 | GNUNET_FS_queue_ (dc->h, |
@@ -2240,6 +2251,7 @@ GNUNET_FS_download_resume (struct GNUNET_FS_DownloadContext *dc) | |||
2240 | pi.status = GNUNET_FS_STATUS_DOWNLOAD_ACTIVE; | 2251 | pi.status = GNUNET_FS_STATUS_DOWNLOAD_ACTIVE; |
2241 | GNUNET_FS_download_make_status_ (&pi, dc); | 2252 | GNUNET_FS_download_make_status_ (&pi, dc); |
2242 | 2253 | ||
2254 | GNUNET_assert (NULL == dc->task); | ||
2243 | dc->job_queue = | 2255 | dc->job_queue = |
2244 | GNUNET_FS_queue_ (dc->h, | 2256 | GNUNET_FS_queue_ (dc->h, |
2245 | &activate_fs_download, | 2257 | &activate_fs_download, |