allow 0 upload slots. added test for allow fast support for sending pieces to choked peers
This commit is contained in:
@@ -66,6 +66,7 @@ release 0.14.5
|
|||||||
* fix to make torrent_status::list_peers more accurate.
|
* fix to make torrent_status::list_peers more accurate.
|
||||||
* fixed memory leak in disk io thread when not using the cache
|
* fixed memory leak in disk io thread when not using the cache
|
||||||
* fixed bug in connect candidate counter
|
* fixed bug in connect candidate counter
|
||||||
|
* allow 0 upload slots
|
||||||
|
|
||||||
release 0.14.4
|
release 0.14.4
|
||||||
|
|
||||||
|
@@ -241,7 +241,7 @@ can use the service simultaneously. This is controlled by
|
|||||||
|
|
||||||
In order to always unchoke peers, turn off automatic unchoke
|
In order to always unchoke peers, turn off automatic unchoke
|
||||||
``session_settings::auto_upload_slots`` and set the number of upload slots to a large
|
``session_settings::auto_upload_slots`` and set the number of upload slots to a large
|
||||||
number via ``session::set_max_uploads()``.
|
number via ``session::set_max_uploads()``, or use -1 (which means infinite).
|
||||||
|
|
||||||
torrent limits
|
torrent limits
|
||||||
--------------
|
--------------
|
||||||
|
@@ -2648,7 +2648,7 @@ namespace aux {
|
|||||||
|
|
||||||
INVARIANT_CHECK;
|
INVARIANT_CHECK;
|
||||||
|
|
||||||
if (limit <= 0) limit = (std::numeric_limits<int>::max)();
|
if (limit < 0) limit = (std::numeric_limits<int>::max)();
|
||||||
if (m_max_uploads == limit) return;
|
if (m_max_uploads == limit) return;
|
||||||
m_max_uploads = limit;
|
m_max_uploads = limit;
|
||||||
m_allowed_upload_slots = limit;
|
m_allowed_upload_slots = limit;
|
||||||
@@ -2952,7 +2952,7 @@ namespace aux {
|
|||||||
|
|
||||||
std::set<peer_connection*> unique_peers;
|
std::set<peer_connection*> unique_peers;
|
||||||
TORRENT_ASSERT(m_max_connections > 0);
|
TORRENT_ASSERT(m_max_connections > 0);
|
||||||
TORRENT_ASSERT(m_max_uploads > 0);
|
TORRENT_ASSERT(m_max_uploads >= 0);
|
||||||
if (!m_settings.auto_upload_slots_rate_based || !m_settings.auto_upload_slots)
|
if (!m_settings.auto_upload_slots_rate_based || !m_settings.auto_upload_slots)
|
||||||
TORRENT_ASSERT(m_allowed_upload_slots >= m_max_uploads);
|
TORRENT_ASSERT(m_allowed_upload_slots >= m_max_uploads);
|
||||||
int unchokes = 0;
|
int unchokes = 0;
|
||||||
|
@@ -51,6 +51,12 @@ using boost::tuples::ignore;
|
|||||||
// test the maximum transfer rate
|
// test the maximum transfer rate
|
||||||
void test_rate()
|
void test_rate()
|
||||||
{
|
{
|
||||||
|
// in case the previous run was terminated
|
||||||
|
try { remove_all("./tmp1_transfer"); } catch (std::exception&) {}
|
||||||
|
try { remove_all("./tmp2_transfer"); } catch (std::exception&) {}
|
||||||
|
try { remove_all("./tmp1_transfer_moved"); } catch (std::exception&) {}
|
||||||
|
try { remove_all("./tmp2_transfer_moved"); } catch (std::exception&) {}
|
||||||
|
|
||||||
session ses1(fingerprint("LT", 0, 1, 0, 0), std::make_pair(48575, 49000), "0.0.0.0", 0);
|
session ses1(fingerprint("LT", 0, 1, 0, 0), std::make_pair(48575, 49000), "0.0.0.0", 0);
|
||||||
session ses2(fingerprint("LT", 0, 1, 0, 0), std::make_pair(49575, 50000), "0.0.0.0", 0);
|
session ses2(fingerprint("LT", 0, 1, 0, 0), std::make_pair(49575, 50000), "0.0.0.0", 0);
|
||||||
|
|
||||||
@@ -203,11 +209,25 @@ storage_interface* test_storage_constructor(file_storage const& fs
|
|||||||
return new test_storage(fs, path, fp);
|
return new test_storage(fs, path, fp);
|
||||||
}
|
}
|
||||||
|
|
||||||
void test_transfer(bool test_disk_full = false)
|
void test_transfer(bool test_disk_full = false, bool test_allowed_fast = false)
|
||||||
{
|
{
|
||||||
|
// in case the previous run was terminated
|
||||||
|
try { remove_all("./tmp1_transfer"); } catch (std::exception&) {}
|
||||||
|
try { remove_all("./tmp2_transfer"); } catch (std::exception&) {}
|
||||||
|
try { remove_all("./tmp1_transfer_moved"); } catch (std::exception&) {}
|
||||||
|
try { remove_all("./tmp2_transfer_moved"); } catch (std::exception&) {}
|
||||||
|
|
||||||
session ses1(fingerprint("LT", 0, 1, 0, 0), std::make_pair(48075, 49000), "0.0.0.0", 0);
|
session ses1(fingerprint("LT", 0, 1, 0, 0), std::make_pair(48075, 49000), "0.0.0.0", 0);
|
||||||
session ses2(fingerprint("LT", 0, 1, 0, 0), std::make_pair(49075, 50000), "0.0.0.0", 0);
|
session ses2(fingerprint("LT", 0, 1, 0, 0), std::make_pair(49075, 50000), "0.0.0.0", 0);
|
||||||
|
|
||||||
|
if (test_allowed_fast)
|
||||||
|
{
|
||||||
|
session_settings sett;
|
||||||
|
sett.allowed_fast_set_size = 2000;
|
||||||
|
ses1.set_max_uploads(0);
|
||||||
|
ses1.set_settings(sett);
|
||||||
|
}
|
||||||
|
|
||||||
#ifndef TORRENT_DISABLE_ENCRYPTION
|
#ifndef TORRENT_DISABLE_ENCRYPTION
|
||||||
pe_settings pes;
|
pe_settings pes;
|
||||||
pes.out_enc_policy = pe_settings::forced;
|
pes.out_enc_policy = pe_settings::forced;
|
||||||
@@ -435,33 +455,19 @@ int test_main()
|
|||||||
using namespace libtorrent;
|
using namespace libtorrent;
|
||||||
using namespace boost::filesystem;
|
using namespace boost::filesystem;
|
||||||
|
|
||||||
// in case the previous run was terminated
|
|
||||||
try { remove_all("./tmp1_transfer"); } catch (std::exception&) {}
|
|
||||||
try { remove_all("./tmp2_transfer"); } catch (std::exception&) {}
|
|
||||||
try { remove_all("./tmp1_transfer_moved"); } catch (std::exception&) {}
|
|
||||||
try { remove_all("./tmp2_transfer_moved"); } catch (std::exception&) {}
|
|
||||||
|
|
||||||
// test with a (simulated) full disk
|
|
||||||
test_transfer(true);
|
|
||||||
return 0;
|
|
||||||
|
|
||||||
try { remove_all("./tmp1_transfer"); } catch (std::exception&) {}
|
|
||||||
try { remove_all("./tmp2_transfer"); } catch (std::exception&) {}
|
|
||||||
try { remove_all("./tmp1_transfer_moved"); } catch (std::exception&) {}
|
|
||||||
try { remove_all("./tmp2_transfer_moved"); } catch (std::exception&) {}
|
|
||||||
|
|
||||||
#ifdef NDEBUG
|
#ifdef NDEBUG
|
||||||
// test rate only makes sense in release mode
|
// test rate only makes sense in release mode
|
||||||
test_rate();
|
test_rate();
|
||||||
|
|
||||||
try { remove_all("./tmp1_transfer"); } catch (std::exception&) {}
|
|
||||||
try { remove_all("./tmp2_transfer"); } catch (std::exception&) {}
|
|
||||||
try { remove_all("./tmp1_transfer_moved"); } catch (std::exception&) {}
|
|
||||||
try { remove_all("./tmp2_transfer_moved"); } catch (std::exception&) {}
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
test_transfer();
|
test_transfer();
|
||||||
|
|
||||||
|
// test with a (simulated) full disk
|
||||||
|
test_transfer(true);
|
||||||
|
|
||||||
|
// test allowed fast
|
||||||
|
test_transfer(false, true);
|
||||||
|
|
||||||
try { remove_all("./tmp1_transfer"); } catch (std::exception&) {}
|
try { remove_all("./tmp1_transfer"); } catch (std::exception&) {}
|
||||||
try { remove_all("./tmp2_transfer"); } catch (std::exception&) {}
|
try { remove_all("./tmp2_transfer"); } catch (std::exception&) {}
|
||||||
try { remove_all("./tmp1_transfer_moved"); } catch (std::exception&) {}
|
try { remove_all("./tmp1_transfer_moved"); } catch (std::exception&) {}
|
||||||
|
Reference in New Issue
Block a user