aboutsummaryrefslogtreecommitdiff
path: root/src/fs/fs_download.c
diff options
context:
space:
mode:
authorChristian Grothoff <christian@grothoff.org>2017-01-25 22:58:01 +0100
committerChristian Grothoff <christian@grothoff.org>2017-01-25 22:58:01 +0100
commit2b33fde2a4f976581695ba6009b0a892caf78b19 (patch)
tree1ee79fee6f1226861f49d207f96c98dbc0b5ce5a /src/fs/fs_download.c
parent8f5f7f7885237771d88cce717d508b97d79f6b6e (diff)
downloadgnunet-2b33fde2a4f976581695ba6009b0a892caf78b19.tar.gz
gnunet-2b33fde2a4f976581695ba6009b0a892caf78b19.zip
do not start download twice
Diffstat (limited to 'src/fs/fs_download.c')
-rw-r--r--src/fs/fs_download.c28
1 files changed, 20 insertions, 8 deletions
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 */
1586static void 1587static void
1587reconstruct_cb (void *cls, const struct ContentHashKey *chk, uint64_t offset, 1588reconstruct_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,