@@ -245,7 +245,7 @@ namespace libtorrent
245
245
if (file_index < int (m_storage.m_file_priority .size ())
246
246
&& m_storage.m_file_priority [file_index] == 0 )
247
247
{
248
- m_storage.need_partfile ( );
248
+ TORRENT_ASSERT ( m_storage.m_part_file );
249
249
250
250
error_code e;
251
251
peer_request map = m_storage.files ().map_file (file_index
@@ -335,7 +335,7 @@ namespace libtorrent
335
335
if (file_index < int (m_storage.m_file_priority .size ())
336
336
&& m_storage.m_file_priority [file_index] == 0 )
337
337
{
338
- m_storage.need_partfile ( );
338
+ TORRENT_ASSERT ( m_storage.m_part_file );
339
339
340
340
error_code e;
341
341
peer_request map = m_storage.files ().map_file (file_index
@@ -412,6 +412,16 @@ namespace libtorrent
412
412
m_part_file_name = " ." + (params.info
413
413
? to_hex (params.info ->info_hash ().to_string ())
414
414
: params.files ->name ()) + " .parts" ;
415
+
416
+ file_storage const & fs = files ();
417
+ for (int i = 0 ; i < m_file_priority.size (); ++i)
418
+ {
419
+ if (m_file_priority[i] == 0 && !fs.pad_file_at (i))
420
+ {
421
+ need_partfile ();
422
+ break ;
423
+ }
424
+ }
415
425
}
416
426
417
427
default_storage::~default_storage ()
@@ -498,6 +508,9 @@ namespace libtorrent
498
508
}
499
509
ec.ec .clear ();
500
510
m_file_priority[i] = new_prio;
511
+
512
+ if (m_file_priority[i] == 0 && !fs.pad_file_at (i))
513
+ need_partfile ();
501
514
}
502
515
if (m_part_file) m_part_file->flush_metadata (ec.ec );
503
516
if (ec)
@@ -747,7 +760,6 @@ namespace libtorrent
747
760
{
748
761
error_code ignore;
749
762
m_part_file->flush_metadata (ignore);
750
- m_part_file.reset ();
751
763
}
752
764
753
765
// make sure we don't have the files open
0 commit comments