libtorrent-commits Mailing List for libtorrent (Page 177)
Brought to you by:
arvidn
You can subscribe to this list here.
2011 |
Jan
|
Feb
|
Mar
|
Apr
|
May
|
Jun
|
Jul
|
Aug
|
Sep
|
Oct
|
Nov
(76) |
Dec
(45) |
---|---|---|---|---|---|---|---|---|---|---|---|---|
2012 |
Jan
(129) |
Feb
(82) |
Mar
(99) |
Apr
(173) |
May
(138) |
Jun
(169) |
Jul
(161) |
Aug
(114) |
Sep
(109) |
Oct
(126) |
Nov
(105) |
Dec
(64) |
2013 |
Jan
(177) |
Feb
(115) |
Mar
(164) |
Apr
(106) |
May
(83) |
Jun
(139) |
Jul
(144) |
Aug
(165) |
Sep
(134) |
Oct
(227) |
Nov
(124) |
Dec
(127) |
2014 |
Jan
(159) |
Feb
(87) |
Mar
(115) |
Apr
(50) |
May
(71) |
Jun
(74) |
Jul
(113) |
Aug
(85) |
Sep
(91) |
Oct
(106) |
Nov
(118) |
Dec
(85) |
2015 |
Jan
(103) |
Feb
(52) |
Mar
(104) |
Apr
(107) |
May
(106) |
Jun
(13) |
Jul
|
Aug
|
Sep
|
Oct
|
Nov
|
Dec
|
From: <ar...@us...> - 2012-04-16 00:02:05
|
Revision: 6726 http://libtorrent.svn.sourceforge.net/libtorrent/?rev=6726&view=rev Author: arvidn Date: 2012-04-16 00:01:59 +0000 (Mon, 16 Apr 2012) Log Message: ----------- fix build with new setting Modified Paths: -------------- branches/libtorrent_aio_settings/include/libtorrent/settings_pack.hpp branches/libtorrent_aio_settings/src/policy.cpp branches/libtorrent_aio_settings/src/session_impl.cpp Modified: branches/libtorrent_aio_settings/include/libtorrent/settings_pack.hpp =================================================================== --- branches/libtorrent_aio_settings/include/libtorrent/settings_pack.hpp 2012-04-15 23:56:38 UTC (rev 6725) +++ branches/libtorrent_aio_settings/include/libtorrent/settings_pack.hpp 2012-04-16 00:01:59 UTC (rev 6726) @@ -130,6 +130,7 @@ use_disk_read_ahead, lock_files, contiguous_recv_buffer, + ban_web_seeds, max_bool_setting_internal, num_bool_settings = max_bool_setting_internal - bool_type_base Modified: branches/libtorrent_aio_settings/src/policy.cpp =================================================================== --- branches/libtorrent_aio_settings/src/policy.cpp 2012-04-15 23:56:38 UTC (rev 6725) +++ branches/libtorrent_aio_settings/src/policy.cpp 2012-04-16 00:01:59 UTC (rev 6726) @@ -569,7 +569,7 @@ TORRENT_ASSERT(p->in_use); - if (!m_torrent->settings().ban_web_seeds && p->web_seed) + if (!m_torrent->settings().get_bool(settings_pack::ban_web_seeds) && p->web_seed) return; if (is_connect_candidate(*p, m_finished)) Modified: branches/libtorrent_aio_settings/src/session_impl.cpp =================================================================== --- branches/libtorrent_aio_settings/src/session_impl.cpp 2012-04-15 23:56:38 UTC (rev 6725) +++ branches/libtorrent_aio_settings/src/session_impl.cpp 2012-04-16 00:01:59 UTC (rev 6726) @@ -552,6 +552,7 @@ SET(use_disk_read_ahead, true, 0), SET(lock_files, false, 0), SET(contiguous_recv_buffer, true, 0), + SET(ban_web_seeds, true, 0), }; int_setting_entry_t int_settings[settings_pack::num_int_settings] = This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ar...@us...> - 2012-04-15 23:56:48
|
Revision: 6725 http://libtorrent.svn.sourceforge.net/libtorrent/?rev=6725&view=rev Author: arvidn Date: 2012-04-15 23:56:38 +0000 (Sun, 15 Apr 2012) Log Message: ----------- merged changes from libtorrent_aio Modified Paths: -------------- branches/libtorrent_aio_settings/ChangeLog branches/libtorrent_aio_settings/Jamfile branches/libtorrent_aio_settings/configure.ac branches/libtorrent_aio_settings/docs/manual.html branches/libtorrent_aio_settings/docs/manual.rst branches/libtorrent_aio_settings/include/libtorrent/Makefile.am branches/libtorrent_aio_settings/include/libtorrent/alloca.hpp branches/libtorrent_aio_settings/include/libtorrent/config.hpp branches/libtorrent_aio_settings/include/libtorrent/piece_picker.hpp branches/libtorrent_aio_settings/include/libtorrent/session_settings.hpp branches/libtorrent_aio_settings/parse_session_stats.py branches/libtorrent_aio_settings/src/Makefile.am branches/libtorrent_aio_settings/src/asio.cpp branches/libtorrent_aio_settings/src/asio_ssl.cpp branches/libtorrent_aio_settings/src/disk_io_thread.cpp branches/libtorrent_aio_settings/src/peer_connection.cpp branches/libtorrent_aio_settings/src/piece_picker.cpp branches/libtorrent_aio_settings/src/policy.cpp branches/libtorrent_aio_settings/src/session.cpp branches/libtorrent_aio_settings/src/session_impl.cpp branches/libtorrent_aio_settings/src/socket_type.cpp branches/libtorrent_aio_settings/src/torrent.cpp branches/libtorrent_aio_settings/src/web_peer_connection.cpp branches/libtorrent_aio_settings/test/test_piece_picker.cpp Added Paths: ----------- branches/libtorrent_aio_settings/tools/Jamfile Property Changed: ---------------- branches/libtorrent_aio_settings/ branches/libtorrent_aio_settings/examples/connection_tester.cpp Property changes on: branches/libtorrent_aio_settings ___________________________________________________________________ Modified: svn:mergeinfo - /branches/RC_0_16:6640,6657,6662,6665,6669,6673-6675,6678 /branches/libtorrent_aio_arc:6324-6529 /branches/libtorrent_utp:3973-5057 /branches/ssl:6336-6361 /trunk:4468-6679 + /branches/RC_0_16:6640,6657,6662,6665,6669,6673-6675,6678,6684,6686,6688,6690,6692,6694-6695,6698,6700,6715 /branches/libtorrent_aio:6709-6724 /branches/libtorrent_aio_arc:6324-6529 /branches/libtorrent_utp:3973-5057 /branches/ssl:6336-6361 /trunk:4468-6723 Modified: branches/libtorrent_aio_settings/ChangeLog =================================================================== --- branches/libtorrent_aio_settings/ChangeLog 2012-04-15 23:42:55 UTC (rev 6724) +++ branches/libtorrent_aio_settings/ChangeLog 2012-04-15 23:56:38 UTC (rev 6725) @@ -11,6 +11,13 @@ * almost completely changed the storage interface (for custom storage) * added support for hashing pieces in multiple threads + * change default of rate_limit_utp to true + * fixed DLL export issue on windows (when building a shared library linking statically against boost) + * fixed FreeBSD build + * fixed web seed performance issue whith pieces > 1 MiB + * fixed unchoke logic when using web seeds + * fixed compatibility with older versions of boost (down to boost 1.40) + 0.16 release * support torrents with more than 262000 pieces Modified: branches/libtorrent_aio_settings/Jamfile =================================================================== --- branches/libtorrent_aio_settings/Jamfile 2012-04-15 23:42:55 UTC (rev 6724) +++ branches/libtorrent_aio_settings/Jamfile 2012-04-15 23:56:38 UTC (rev 6725) @@ -612,6 +612,13 @@ <define>BOOST_THREAD_USE_LIB <threading>multi <link>shared:<define>TORRENT_BUILDING_SHARED + + # on windows, when linking statically against asio + # but producing a DLL, everything inside the DLL needs + # to declare the symbol as being exported + <link>shared,<boost-link>static:<define>BOOST_ASIO_SOURCE + <link>shared,<boost-link>static:<define>BOOST_SYSTEM_SOURCE + <dht-support>on:<source>src/kademlia/$(KADEMLIA_SOURCES).cpp <dht-support>logging:<source>src/kademlia/$(KADEMLIA_SOURCES).cpp <conditional>@building Modified: branches/libtorrent_aio_settings/configure.ac =================================================================== --- branches/libtorrent_aio_settings/configure.ac 2012-04-15 23:42:55 UTC (rev 6724) +++ branches/libtorrent_aio_settings/configure.ac 2012-04-15 23:56:38 UTC (rev 6725) @@ -636,6 +636,7 @@ [include/libtorrent/Makefile] [examples/Makefile] [test/Makefile] + [tools/Makefile] [bindings/Makefile] [bindings/python/Makefile] [bindings/python/setup.py] Modified: branches/libtorrent_aio_settings/docs/manual.html =================================================================== --- branches/libtorrent_aio_settings/docs/manual.html 2012-04-15 23:42:55 UTC (rev 6724) +++ branches/libtorrent_aio_settings/docs/manual.html 2012-04-15 23:56:38 UTC (rev 6725) @@ -4407,6 +4407,8 @@ int ssl_listen; int tracker_backoff; + + bool ban_web_seeds; }; </pre> <p><tt class="docutils literal"><span class="pre">version</span></tt> is automatically set to the libtorrent version you're using @@ -5191,6 +5193,8 @@ <p>It defaults to 250.</p> <p>This setting may be useful to make libtorrent more or less aggressive in hitting trackers.</p> +<p><tt class="docutils literal"><span class="pre">ban_web_seeds</span></tt> enables banning web seeds. By default, web seeds that send +corrupt data are banned.</p> </div> </div> <div class="section" id="pe-settings"> Modified: branches/libtorrent_aio_settings/docs/manual.rst =================================================================== --- branches/libtorrent_aio_settings/docs/manual.rst 2012-04-15 23:42:55 UTC (rev 6724) +++ branches/libtorrent_aio_settings/docs/manual.rst 2012-04-15 23:56:38 UTC (rev 6725) @@ -4665,6 +4665,8 @@ int ssl_listen; int tracker_backoff; + + bool ban_web_seeds; }; ``version`` is automatically set to the libtorrent version you're using @@ -5466,7 +5468,7 @@ the global rate limiter (which they aren't by default). ``rate_limit_utp`` determines if uTP connections should be throttled by the global rate -limiter or not. By default they are not, since uTP manages its own rate. +limiter or not. By default they are. ``listen_queue_size`` is the value passed in to listen() for the listen socket. It is the number of outstanding incoming connections to queue up while we're not @@ -5595,6 +5597,9 @@ This setting may be useful to make libtorrent more or less aggressive in hitting trackers. +``ban_web_seeds`` enables banning web seeds. By default, web seeds that send +corrupt data are banned. + pe_settings =========== Property changes on: branches/libtorrent_aio_settings/examples/connection_tester.cpp ___________________________________________________________________ Modified: svn:mergeinfo - /branches/RC_0_16/examples/connection_tester.cpp:6678 + /branches/RC_0_16/examples/connection_tester.cpp:6678 /branches/libtorrent_aio/examples/connection_tester.cpp:6709-6724 Modified: branches/libtorrent_aio_settings/include/libtorrent/Makefile.am =================================================================== --- branches/libtorrent_aio_settings/include/libtorrent/Makefile.am 2012-04-15 23:42:55 UTC (rev 6724) +++ branches/libtorrent_aio_settings/include/libtorrent/Makefile.am 2012-04-15 23:56:38 UTC (rev 6725) @@ -126,6 +126,9 @@ xml_parse.hpp \ \ $(GEOIP_H) \ + tommath.h \ + tommath_class.h \ + tommath_superclass.h \ \ aux_/session_impl.hpp \ aux_/internal_session_settings.hpp\ Modified: branches/libtorrent_aio_settings/include/libtorrent/alloca.hpp =================================================================== --- branches/libtorrent_aio_settings/include/libtorrent/alloca.hpp 2012-04-15 23:42:55 UTC (rev 6724) +++ branches/libtorrent_aio_settings/include/libtorrent/alloca.hpp 2012-04-15 23:56:38 UTC (rev 6725) @@ -34,15 +34,19 @@ #include "libtorrent/config.hpp" -#ifdef TORRENT_WINDOWS +#if defined TORRENT_WINDOWS #include <malloc.h> #define TORRENT_ALLOCA(t, n) static_cast<t*>(_alloca(sizeof(t) * (n))) +#elif defined TORRENT_BSD + +#include <stdlib.h> +#define TORRENT_ALLOCA(t, n) static_cast<t*>(alloca(sizeof(t) * (n))) + #else #include <alloca.h> - #define TORRENT_ALLOCA(t, n) static_cast<t*>(alloca(sizeof(t) * (n))) #endif Modified: branches/libtorrent_aio_settings/include/libtorrent/config.hpp =================================================================== --- branches/libtorrent_aio_settings/include/libtorrent/config.hpp 2012-04-15 23:42:55 UTC (rev 6724) +++ branches/libtorrent_aio_settings/include/libtorrent/config.hpp 2012-04-15 23:56:38 UTC (rev 6725) @@ -116,6 +116,20 @@ #define TORRENT_USE_DEFAULT_IO 0 #endif +// backwards compatibility with older versions of boost +#if !defined BOOST_SYMBOL_EXPORT && !defined BOOST_SYMBOL_IMPORT +# if defined _MSC_VER || defined __MINGW32__ +# define BOOST_SYMBOL_EXPORT __declspec(dllexport) +# define BOOST_SYMBOL_IMPORT __declspec(dllimport) +# elif __GNU__ >= 4 +# define BOOST_SYMBOL_EXPORT __attribute__((visibility("default"))) +# define BOOST_SYMBOL_IMPORT __attribute__((visibility("default"))) +# else +# define BOOST_SYMBOL_EXPORT +# define BOOST_SYMBOL_IMPORT +# endif +#endif + #if defined TORRENT_BUILDING_SHARED # define TORRENT_EXPORT BOOST_SYMBOL_EXPORT #elif defined TORRENT_LINKING_SHARED @@ -209,6 +223,8 @@ # endif # define TORRENT_USE_MACH_SEMAPHORE 1 #else // __APPLE__ +// FreeBSD has a reasonable iconv signature +# define TORRENT_ICONV_ARG (const char**) # define TORRENT_USE_POSIX_SEMAPHORE 1 #endif // __APPLE__ Modified: branches/libtorrent_aio_settings/include/libtorrent/piece_picker.hpp =================================================================== --- branches/libtorrent_aio_settings/include/libtorrent/piece_picker.hpp 2012-04-15 23:42:55 UTC (rev 6724) +++ branches/libtorrent_aio_settings/include/libtorrent/piece_picker.hpp 2012-04-15 23:56:38 UTC (rev 6725) @@ -119,6 +119,10 @@ // the state of this block enum { state_none, state_requested, state_writing, state_finished }; unsigned state:2; +#if defined TORRENT_DEBUG || TORRENT_RELEASE_ASSERTS + // to allow verifying the invariant of blocks belonging to the right piece + int piece_index; +#endif }; // the peers that are downloading this piece Modified: branches/libtorrent_aio_settings/include/libtorrent/session_settings.hpp =================================================================== --- branches/libtorrent_aio_settings/include/libtorrent/session_settings.hpp 2012-04-15 23:42:55 UTC (rev 6724) +++ branches/libtorrent_aio_settings/include/libtorrent/session_settings.hpp 2012-04-15 23:56:38 UTC (rev 6725) @@ -972,6 +972,9 @@ // determines how fast the back-off happens. Default // is 250 int tracker_backoff; + + // when true, web seeds sending bad data will be banned + bool ban_web_seeds; }; #endif Modified: branches/libtorrent_aio_settings/parse_session_stats.py =================================================================== --- branches/libtorrent_aio_settings/parse_session_stats.py 2012-04-15 23:42:55 UTC (rev 6724) +++ branches/libtorrent_aio_settings/parse_session_stats.py 2012-04-15 23:56:38 UTC (rev 6725) @@ -203,7 +203,8 @@ ('overall_rates', 'rate', 'B/s', 'download and upload rates', ['uploaded bytes', 'downloaded bytes', 'upload rate', 'download rate', 'smooth upload rate', 'smooth download rate']), ('disk_write_queue', 'Bytes', 'B', 'bytes queued up by peers, to be written to disk', ['disk write queued bytes']), ('peers_requests', 'num', '', 'incoming piece request rate', ['piece requests', 'piece rejects', 'max piece requests', 'invalid piece requests', 'choked piece requests', 'cancelled piece requests']), - ('peers_upload', 'num', '', 'number of peers by state wrt. uploading', ['peers up interested', 'peers up unchoked', 'peers up requests', 'peers disk-up', 'peers up send buffer', 'peers bw-up', 'max unchoked']), + ('peers_upload_max', 'num', '', 'number of peers by state wrt. uploading', ['peers up interested', 'peers up unchoked', 'peers up requests', 'peers disk-up', 'peers up send buffer', 'peers bw-up', 'max unchoked']), + ('peers_upload', 'num', '', 'number of peers by state wrt. uploading', ['peers up interested', 'peers up unchoked', 'peers up requests', 'peers disk-up', 'peers up send buffer', 'peers bw-up']), ('peers_download', 'num', '', 'number of peers by state wrt. downloading', ['peers down interesting', 'peers down unchoked', 'peers down requests', 'peers disk-down', 'peers bw-down','num end-game peers']), ('peer_errors', 'num', '', 'number of peers by error that disconnected them', ['error peers', 'peer disconnects', 'peers eof', 'peers connection reset', 'connect timeouts', 'uninteresting peers disconnect', 'banned for hash failure', 'no memory peer errors', 'too many peers', 'transport timeout peers', 'connection refused peers', 'connection aborted peers', 'permission denied peers', 'no buffer peers', 'host unreachable peers', 'broken pipe peers', 'address in use peers', 'access denied peers', 'invalid argument peers', 'operation aborted peers']), ('peer_errors_incoming', 'num', '', 'number of peers by incoming or outgoing connection', ['error incoming peers', 'error outgoing peers']), @@ -260,8 +261,8 @@ ('piece_picker', 'blocks', '', '', ['piece picks', 'reject piece picks', 'unchoke piece picks', 'incoming redundant piece picks', 'incoming piece picks', 'end game piece picks', 'snubbed piece picks'], {'type':stacked}), ('piece_picker_loops', 'num checked pieces', '', '', ['piece picker loops']), ('picker_partials', 'pieces', '', '', ['num partial pieces', 'num downloading partial pieces', 'num full partial pieces', 'num finished partial pieces']), - ('picker_full_partials_distribution', 'full pieces', 'count', '', ['num full partial pieces'], {'type': 'histogram', 'binwidth': 5, 'numbins': 120}), - ('picker_partials_distribution', 'partial pieces', 'count', '', ['num downloading partial pieces'], {'type': 'histogram', 'binwidth': 5, 'numbins': 120}) + ('picker_full_partials_distribution', 'full pieces', '', '', ['num full partial pieces'], {'type': 'histogram', 'binwidth': 5, 'numbins': 120}), + ('picker_partials_distribution', 'partial pieces', '', '', ['num downloading partial pieces'], {'type': 'histogram', 'binwidth': 5, 'numbins': 120}) ] print 'generating graphs' Modified: branches/libtorrent_aio_settings/src/Makefile.am =================================================================== --- branches/libtorrent_aio_settings/src/Makefile.am 2012-04-15 23:42:55 UTC (rev 6724) +++ branches/libtorrent_aio_settings/src/Makefile.am 2012-04-15 23:56:38 UTC (rev 6725) @@ -66,6 +66,7 @@ lt_trackers.cpp \ magnet_uri.cpp \ metadata_transfer.cpp \ + mpi.c \ natpmp.cpp \ parse_url.cpp \ pe_crypto.cpp \ Modified: branches/libtorrent_aio_settings/src/asio.cpp =================================================================== --- branches/libtorrent_aio_settings/src/asio.cpp 2012-04-15 23:42:55 UTC (rev 6724) +++ branches/libtorrent_aio_settings/src/asio.cpp 2012-04-15 23:56:38 UTC (rev 6725) @@ -1,3 +1,7 @@ // builds all boost.asio source as a separate compilation unit +#include <boost/version.hpp> + +#if BOOST_VERSION >= 104500 #include <boost/asio/impl/src.hpp> +#endif Modified: branches/libtorrent_aio_settings/src/asio_ssl.cpp =================================================================== --- branches/libtorrent_aio_settings/src/asio_ssl.cpp 2012-04-15 23:42:55 UTC (rev 6724) +++ branches/libtorrent_aio_settings/src/asio_ssl.cpp 2012-04-15 23:56:38 UTC (rev 6725) @@ -1,3 +1,7 @@ // builds all boost.asio SSL source as a separate compilation unit +#include <boost/version.hpp> + +#if BOOST_VERSION >= 104610 #include <boost/asio/ssl/impl/src.hpp> +#endif Modified: branches/libtorrent_aio_settings/src/disk_io_thread.cpp =================================================================== --- branches/libtorrent_aio_settings/src/disk_io_thread.cpp 2012-04-15 23:42:55 UTC (rev 6724) +++ branches/libtorrent_aio_settings/src/disk_io_thread.cpp 2012-04-15 23:56:38 UTC (rev 6725) @@ -2375,7 +2375,14 @@ // sizing the disk cache size when it's set to // automatic. #ifdef TORRENT_BSD +#ifdef HW_MEMSIZE int mib[2] = { CTL_HW, HW_MEMSIZE }; +#else + // not entirely sure this sysctl supports 64 + // bit return values, but it's probably better + // than not building + int mib[2] = { CTL_HW, HW_PHYSMEM }; +#endif size_t len = sizeof(m_physical_ram); if (sysctl(mib, 2, &m_physical_ram, &len, NULL, 0) != 0) m_physical_ram = 0; Modified: branches/libtorrent_aio_settings/src/peer_connection.cpp =================================================================== --- branches/libtorrent_aio_settings/src/peer_connection.cpp 2012-04-15 23:42:55 UTC (rev 6724) +++ branches/libtorrent_aio_settings/src/peer_connection.cpp 2012-04-15 23:56:38 UTC (rev 6725) @@ -353,6 +353,7 @@ , m_holepunch_mode(false) , m_ignore_stats(false) , m_corked(false) + , m_has_metadata(true) #if defined TORRENT_DEBUG || TORRENT_RELEASE_ASSERTS , m_in_constructor(true) , m_disconnect_started(false) @@ -3925,13 +3926,14 @@ if (peer_info_struct()) { policy::peer* pi = peer_info_struct(); + TORRENT_ASSERT(pi->in_use); p.source = pi->source; p.failcount = pi->failcount; p.num_hashfails = pi->hashfails; p.flags |= pi->on_parole ? peer_info::on_parole : 0; p.flags |= pi->optimistically_unchoked ? peer_info::optimistic_unchoke : 0; #ifndef TORRENT_DISABLE_GEO_IP - p.inet_as = pi->inet_as->first; + p.inet_as = pi->inet_as ? pi->inet_as->first : 0xffff; #endif } else Modified: branches/libtorrent_aio_settings/src/piece_picker.cpp =================================================================== --- branches/libtorrent_aio_settings/src/piece_picker.cpp 2012-04-15 23:42:55 UTC (rev 6724) +++ branches/libtorrent_aio_settings/src/piece_picker.cpp 2012-04-15 23:56:38 UTC (rev 6725) @@ -48,6 +48,7 @@ #ifdef TORRENT_DEBUG #include "libtorrent/peer_connection.hpp" #include "libtorrent/torrent.hpp" +#include "libtorrent/policy.hpp" // for policy::peer #endif #include "libtorrent/invariant_check.hpp" @@ -196,6 +197,9 @@ ret.info[i].num_peers = 0; ret.info[i].state = block_info::state_none; ret.info[i].peer = 0; +#if defined TORRENT_DEBUG || TORRENT_RELEASE_ASSERTS + ret.info[i].piece_index = piece; +#endif } return ret; } @@ -363,6 +367,8 @@ int num_writing = 0; for (int k = 0; k < num_blocks; ++k) { + TORRENT_ASSERT(i->info[k].piece_index == i->index); + TORRENT_ASSERT(i->info[k].peer == 0 || static_cast<policy::peer*>(i->info[k].peer)->in_use); if (i->info[k].state == block_info::state_finished) { ++num_finished; @@ -918,6 +924,15 @@ std::vector<downloading_piece>::iterator i = find_dl_piece(state - 1, index); TORRENT_ASSERT(i != m_downloads[state - 1].end()); +#ifdef TORRENT_DEBUG + int num_blocks = blocks_in_piece(i->index); + for (int k = 0; k < num_blocks; ++k) + { + TORRENT_ASSERT(i->info[k].piece_index == index); + TORRENT_ASSERT(i->info[k].state == block_info::state_finished); + TORRENT_ASSERT(i->info[k].num_peers == 0); + } +#endif piece_pos& p = m_piece_map[index]; int prev_priority = p.priority(this); @@ -1561,6 +1576,9 @@ #else #define TORRENT_INC_LOOP_COUNTER #endif + + TORRENT_ASSERT(peer == 0 || static_cast<policy::peer*>(peer)->in_use); + // prevent the number of partial pieces to grow indefinitely // make this scale by the number of peers we have. For large // scale clients, we would have more peers, and allow a higher @@ -1832,6 +1850,8 @@ for (int j = 0; j < num_blocks_in_piece; ++j) { block_info const& info = dp.info[j]; + TORRENT_ASSERT(info.peer == 0 || static_cast<policy::peer*>(info.peer)->in_use); + TORRENT_ASSERT(info.piece_index == dp.index); if (info.state != block_info::state_requested || info.peer == peer) continue; @@ -1861,6 +1881,7 @@ for (int j = 0; j < num_blocks_in_piece; ++j) { block_info const& info = i->info[j]; + TORRENT_ASSERT(info.piece_index == i->index); if (info.state != block_info::state_none) continue; std::vector<piece_block>::iterator k = std::find( interesting_blocks.begin(), interesting_blocks.end() @@ -1907,6 +1928,7 @@ for (int j = 0; j < num_blocks_in_piece; ++j) { block_info const& info = k->info[j]; + TORRENT_ASSERT(info.piece_index == k->index); if (info.state == block_info::state_finished) continue; TORRENT_ASSERT(info.peer != 0); } @@ -1956,7 +1978,10 @@ { for (std::vector<block_info>::iterator i = m_block_info.begin() , end(m_block_info.end()); i != end; ++i) + { + TORRENT_ASSERT(i->peer == 0 || static_cast<policy::peer*>(i->peer)->in_use); if (i->peer == peer) i->peer = 0; + } } namespace @@ -1973,6 +1998,8 @@ for (int j = 0; j < num_blocks_in_piece; ++j) { piece_picker::block_info const& info = p.info[j]; + TORRENT_ASSERT(info.peer == 0 || static_cast<policy::peer*>(info.peer)->in_use); + TORRENT_ASSERT(info.piece_index == p.index); if (info.state != piece_picker::block_info::state_none && info.peer != peer) { @@ -2094,6 +2121,7 @@ { // ignore completed blocks and already requested blocks block_info const& info = dp.info[j]; + TORRENT_ASSERT(info.piece_index == dp.index); if (info.state != block_info::state_none) continue; backup_blocks2.push_back(piece_block(dp.index, j)); } @@ -2104,6 +2132,7 @@ { // ignore completed blocks and already requested blocks block_info const& info = dp.info[j]; + TORRENT_ASSERT(info.piece_index == dp.index); if (info.state != block_info::state_none) continue; // if the piece is fast and the peer is slow, or vice versa, @@ -2203,6 +2232,7 @@ #ifdef TORRENT_DEBUG for (int k = 0; k < max_blocks; ++k) { + TORRENT_ASSERT(i->info[k].piece_index == index); TORRENT_ASSERT(i->info[k].state == block_info::state_finished || i->info[k].state == block_info::state_writing); } @@ -2344,6 +2374,7 @@ std::vector<downloading_piece>::const_iterator i = find_dl_piece(state - 1, block.piece_index); TORRENT_ASSERT(i != m_downloads[state - 1].end()); + TORRENT_ASSERT(i->info[block.block_index].piece_index == block.piece_index); return i->info[block.block_index].state == block_info::state_requested; } @@ -2358,6 +2389,7 @@ if (state == piece_pos::piece_open) return false; std::vector<downloading_piece>::const_iterator i = find_dl_piece(state - 1, block.piece_index); TORRENT_ASSERT(i != m_downloads[state-1].end()); + TORRENT_ASSERT(i->info[block.block_index].piece_index == block.piece_index); return i->info[block.block_index].state == block_info::state_finished || i->info[block.block_index].state == block_info::state_writing; } @@ -2373,6 +2405,7 @@ if (state == piece_pos::piece_open) return false; std::vector<downloading_piece>::const_iterator i = find_dl_piece(state - 1, block.piece_index); TORRENT_ASSERT(i != m_downloads[state - 1].end()); + TORRENT_ASSERT(i->info[block.block_index].piece_index == block.piece_index); return i->info[block.block_index].state == block_info::state_finished; } @@ -2383,6 +2416,7 @@ std::cerr << "mark_as_downloading( {" << block.piece_index << ", " << block.block_index << "} )" << std::endl; #endif + TORRENT_ASSERT(peer == 0 || static_cast<policy::peer*>(peer)->in_use); TORRENT_ASSERT(state != piece_picker::none); TORRENT_ASSERT(block.piece_index >= 0); TORRENT_ASSERT(block.block_index >= 0); @@ -2405,6 +2439,7 @@ downloading_piece& dp = add_download_piece(block.piece_index); dp.state = state; block_info& info = dp.info[block.block_index]; + TORRENT_ASSERT(info.piece_index == block.piece_index); info.state = block_info::state_requested; info.peer = peer; info.num_peers = 1; @@ -2423,6 +2458,7 @@ std::vector<downloading_piece>::iterator i = find_dl_piece(p.state - 1, block.piece_index); TORRENT_ASSERT(i != m_downloads[p.state - 1].end()); block_info& info = i->info[block.block_index]; + TORRENT_ASSERT(info.piece_index == block.piece_index); if (info.state == block_info::state_writing || info.state == block_info::state_finished) { @@ -2458,6 +2494,7 @@ TORRENT_ASSERT(i != m_downloads[p.state - 1].end()); block_info const& info = i->info[block.block_index]; + TORRENT_ASSERT(info.piece_index == block.piece_index); return info.num_peers; } @@ -2489,6 +2526,8 @@ std::cerr << "mark_as_writing( {" << block.piece_index << ", " << block.block_index << "} )" << std::endl; #endif + TORRENT_ASSERT(peer == 0 || static_cast<policy::peer*>(peer)->in_use); + TORRENT_ASSERT(block.piece_index >= 0); TORRENT_ASSERT(block.block_index >= 0); TORRENT_ASSERT(block.piece_index < m_piece_map.size()); @@ -2516,6 +2555,7 @@ downloading_piece& dp = add_download_piece(block.piece_index); dp.state = none; block_info& info = dp.info[block.block_index]; + TORRENT_ASSERT(info.piece_index == block.piece_index); info.state = block_info::state_writing; info.peer = peer; info.num_peers = 0; @@ -2531,6 +2571,8 @@ TORRENT_ASSERT(i != m_downloads[p.state - 1].end()); block_info& info = i->info[block.block_index]; + TORRENT_ASSERT(info.piece_index == block.piece_index); + info.peer = peer; if (info.state == block_info::state_requested) --i->requested; TORRENT_ASSERT(i->requested >= 0); @@ -2540,6 +2582,7 @@ ++i->writing; info.state = block_info::state_writing; + TORRENT_ASSERT(info.piece_index == block.piece_index); // all other requests for this block should have been // cancelled now @@ -2571,6 +2614,7 @@ if (i == m_downloads[state - 1].end()) return; block_info& info = i->info[block.block_index]; + TORRENT_ASSERT(info.piece_index == block.piece_index); TORRENT_ASSERT(info.state == block_info::state_writing); TORRENT_ASSERT(info.num_peers == 0); @@ -2660,6 +2704,7 @@ std::cerr << "mark_as_finished( {" << block.piece_index << ", " << block.block_index << "} )" << std::endl; #endif + TORRENT_ASSERT(peer == 0 || static_cast<policy::peer*>(peer)->in_use); TORRENT_ASSERT(block.piece_index >= 0); TORRENT_ASSERT(block.block_index >= 0); TORRENT_ASSERT(block.piece_index < m_piece_map.size()); @@ -2686,6 +2731,7 @@ downloading_piece& dp = add_download_piece(block.piece_index); dp.state = none; block_info& info = dp.info[block.block_index]; + TORRENT_ASSERT(info.piece_index == block.piece_index); info.peer = peer; TORRENT_ASSERT(info.state == block_info::state_none); TORRENT_ASSERT(info.num_peers == 0); @@ -2703,6 +2749,7 @@ std::vector<downloading_piece>::iterator i = find_dl_piece(p.state - 1, block.piece_index); TORRENT_ASSERT(i != m_downloads[p.state - 1].end()); block_info& info = i->info[block.block_index]; + TORRENT_ASSERT(info.piece_index == block.piece_index); if (info.state == block_info::state_finished) return; @@ -2785,6 +2832,7 @@ TORRENT_ASSERT(i != m_downloads[state - 1].end()); for (int j = 0, end(blocks_in_piece(index)); j != end; ++j) { + TORRENT_ASSERT(i->info[j].peer == 0 || static_cast<policy::peer*>(i->info[j].peer)->in_use); d.push_back(i->info[j].peer); } } @@ -2797,10 +2845,13 @@ std::vector<downloading_piece>::const_iterator i = find_dl_piece(state - 1, block.piece_index); TORRENT_ASSERT(block.block_index >= 0); + TORRENT_ASSERT(i->info[block.block_index].piece_index == block.piece_index); if (i->info[block.block_index].state == block_info::state_none) return 0; - return i->info[block.block_index].peer; + void* peer = i->info[block.block_index].peer; + TORRENT_ASSERT(peer == 0 || static_cast<policy::peer*>(peer)->in_use); + return peer; } // this is called when a request is rejected or when @@ -2814,6 +2865,8 @@ #ifdef TORRENT_PICKER_LOG std::cerr << "abort_download( {" << block.piece_index << ", " << block.block_index << "} )" << std::endl; #endif + TORRENT_ASSERT(peer == 0 || static_cast<policy::peer*>(peer)->in_use); + TORRENT_ASSERT(block.piece_index >= 0); TORRENT_ASSERT(block.block_index >= 0); TORRENT_ASSERT(block.piece_index < m_piece_map.size()); @@ -2826,6 +2879,8 @@ TORRENT_ASSERT(i != m_downloads[state - 1].end()); block_info& info = i->info[block.block_index]; + TORRENT_ASSERT(info.peer == 0 || static_cast<policy::peer*>(info.peer)->in_use); + TORRENT_ASSERT(info.piece_index == block.piece_index); TORRENT_ASSERT(info.state != block_info::state_none); Modified: branches/libtorrent_aio_settings/src/policy.cpp =================================================================== --- branches/libtorrent_aio_settings/src/policy.cpp 2012-04-15 23:42:55 UTC (rev 6724) +++ branches/libtorrent_aio_settings/src/policy.cpp 2012-04-15 23:56:38 UTC (rev 6725) @@ -568,6 +568,10 @@ INVARIANT_CHECK; TORRENT_ASSERT(p->in_use); + + if (!m_torrent->settings().ban_web_seeds && p->web_seed) + return; + if (is_connect_candidate(*p, m_finished)) --m_num_connect_candidates; @@ -699,8 +703,8 @@ { if (erase_candidate > current) --erase_candidate; if (candidate > current) --candidate; - --m_round_robin; erase_peer(m_peers.begin() + current); + continue; } else { @@ -941,8 +945,6 @@ (peer*)m_torrent->session().m_ipv4_peer_pool.malloc(); if (p == 0) return false; - TORRENT_ASSERT(p->in_use == false); - #if TORRENT_USE_IPV6 if (is_v6) m_torrent->session().m_ipv6_peer_pool.set_next_size(500); @@ -1248,7 +1250,7 @@ p->in_use = false; #endif - m_torrent->session().m_i2p_peer_pool.free((i2p_peer*)p); + m_torrent->session().m_i2p_peer_pool.destroy((i2p_peer*)p); return 0; } } @@ -1375,10 +1377,10 @@ p->in_use = false; #endif #if TORRENT_USE_IPV6 - if (is_v6) m_torrent->session().m_ipv6_peer_pool.free((ipv6_peer*)p); + if (is_v6) m_torrent->session().m_ipv6_peer_pool.destroy((ipv6_peer*)p); else #endif - m_torrent->session().m_ipv4_peer_pool.free((ipv4_peer*)p); + m_torrent->session().m_ipv4_peer_pool.destroy((ipv4_peer*)p); return 0; } #ifndef TORRENT_DISABLE_EXTENSIONS @@ -1763,10 +1765,6 @@ if (lhs.connectable != rhs.connectable) return lhs.connectable < rhs.connectable; - // prefer peers with higher failcount - if (lhs.failcount != rhs.failcount) - return lhs.failcount > rhs.failcount; - return lhs.trust_points < rhs.trust_points; } Modified: branches/libtorrent_aio_settings/src/session.cpp =================================================================== --- branches/libtorrent_aio_settings/src/session.cpp 2012-04-15 23:42:55 UTC (rev 6724) +++ branches/libtorrent_aio_settings/src/session.cpp 2012-04-15 23:56:38 UTC (rev 6725) @@ -1333,7 +1333,7 @@ , utp_dynamic_sock_buf(true) , utp_loss_multiplier(50) // specified in percent , mixed_mode_algorithm(peer_proportional) - , rate_limit_utp(false) + , rate_limit_utp(true) , listen_queue_size(5) , announce_double_nat(false) , torrent_connect_boost(10) @@ -1356,6 +1356,7 @@ , network_threads(0) , ssl_listen(4433) , tracker_backoff(250) + , ban_web_seeds(true) {} session_settings::~session_settings() {} Modified: branches/libtorrent_aio_settings/src/session_impl.cpp =================================================================== --- branches/libtorrent_aio_settings/src/session_impl.cpp 2012-04-15 23:42:55 UTC (rev 6724) +++ branches/libtorrent_aio_settings/src/session_impl.cpp 2012-04-15 23:56:38 UTC (rev 6725) @@ -4573,6 +4573,7 @@ TORRENT_ASSERT(p); policy::peer* pi = p->peer_info_struct(); if (!pi) continue; + if (pi->web_seed) continue; torrent* t = p->associated_torrent().lock().get(); if (!t) continue; if (t->is_paused()) continue; @@ -4670,7 +4671,8 @@ torrent* t = p->associated_torrent().lock().get(); policy::peer* pi = p->peer_info_struct(); - if (p->ignore_unchoke_slots() || t == 0 || pi == 0 || t->is_paused()) continue; + if (p->ignore_unchoke_slots() || t == 0 || pi == 0 || pi->web_seed || t->is_paused()) + continue; if (m_settings.get_int(settings_pack::choking_algorithm) == settings_pack::bittyrant_choker) { Modified: branches/libtorrent_aio_settings/src/socket_type.cpp =================================================================== --- branches/libtorrent_aio_settings/src/socket_type.cpp 2012-04-15 23:42:55 UTC (rev 6724) +++ branches/libtorrent_aio_settings/src/socket_type.cpp 2012-04-15 23:56:38 UTC (rev 6725) @@ -30,6 +30,7 @@ */ +#include "libtorrent/config.hpp" #include "libtorrent/socket_type.hpp" #ifdef TORRENT_USE_OPENSSL @@ -41,6 +42,10 @@ #endif +#if defined TORRENT_ASIO_DEBUGGING +#include "libtorrent/debug.hpp" +#endif + namespace libtorrent { Modified: branches/libtorrent_aio_settings/src/torrent.cpp =================================================================== --- branches/libtorrent_aio_settings/src/torrent.cpp 2012-04-15 23:42:55 UTC (rev 6724) +++ branches/libtorrent_aio_settings/src/torrent.cpp 2012-04-15 23:56:38 UTC (rev 6725) @@ -4659,6 +4659,14 @@ web->removed = true; return; } + peer_connection * peer = web->peer_info.connection; + if (peer) { + TORRENT_ASSERT(peer->m_in_use == 1337); + peer->set_peer_info(0); + } + if (has_picker()) picker().clear_peer(&web->peer_info); + + m_web_seeds.erase(web); } @@ -4844,6 +4852,14 @@ if (m_ses.is_aborted()) return; +#ifndef TORRENT_DISABLE_GEO_IP + int as = m_ses.as_for_ip(host->endpoint().address()); +#ifdef TORRENT_DEBUG + web->peer_info.inet_as_num = as; +#endif + web->peer_info.inet_as = m_ses.lookup_as(as); +#endif + if (int(m_connections.size()) >= m_max_connections || m_ses.num_connections() >= m_ses.settings().get_int(settings_pack::connections_limit)) return; @@ -5704,6 +5720,7 @@ i != end(); ++i) { peer_connection* peer = *i; + TORRENT_ASSERT(peer->m_in_use == 1337); // incoming peers that haven't finished the handshake should // not be included in this list @@ -8194,6 +8211,8 @@ , (boost::bind(&policy::peer::connection, boost::bind(&web_seed_entry::peer_info, _1)) == p)); TORRENT_ASSERT(i != m_web_seeds.end()); if (i == m_web_seeds.end()) return; + p->set_peer_info(0); + if (has_picker()) picker().clear_peer(&i->peer_info); m_web_seeds.erase(i); } Modified: branches/libtorrent_aio_settings/src/web_peer_connection.cpp =================================================================== --- branches/libtorrent_aio_settings/src/web_peer_connection.cpp 2012-04-15 23:42:55 UTC (rev 6724) +++ branches/libtorrent_aio_settings/src/web_peer_connection.cpp 2012-04-15 23:56:38 UTC (rev 6725) @@ -84,9 +84,10 @@ shared_ptr<torrent> tor = t.lock(); TORRENT_ASSERT(tor); - // we always prefer downloading 1 MB chunks - // from web seeds - prefer_whole_pieces((1024 * 1024) / tor->torrent_file().piece_length()); + // we always prefer downloading 1 MiB chunks + // from web seeds, or whole pieces if pieces + // are larger than a MiB + prefer_whole_pieces((std::min)((1024 * 1024) / tor->torrent_file().piece_length(), 1)); // we want large blocks as well, so // we can request more bytes at once Modified: branches/libtorrent_aio_settings/test/test_piece_picker.cpp =================================================================== --- branches/libtorrent_aio_settings/test/test_piece_picker.cpp 2012-04-15 23:42:55 UTC (rev 6724) +++ branches/libtorrent_aio_settings/test/test_piece_picker.cpp 2012-04-15 23:56:38 UTC (rev 6725) @@ -56,6 +56,8 @@ return have; } +policy::ipv4_peer* tmp_peer = 0; + // availability is a string where each character is the // availability of that piece, '1', '2' etc. // have_str is a string where each character represents a @@ -101,16 +103,16 @@ TEST_CHECK(!p->is_finished(piece_block(i, j))); if ((blocks & (1 << j)) == 0) continue; ++counter; - bool ret = p->mark_as_downloading(piece_block(i, j), (void*)1, piece_picker::slow); + bool ret = p->mark_as_downloading(piece_block(i, j), (void*)tmp_peer, piece_picker::slow); TEST_CHECK(ret == true); TEST_CHECK(p->is_requested(piece_block(i, j)) == bool(blocks & (1 << j))); - p->mark_as_writing(piece_block(i, j), (void*)1); + p->mark_as_writing(piece_block(i, j), (void*)tmp_peer); TEST_CHECK(!p->is_finished(piece_block(i, j))); // trying to mark a block as requested after it has been completed // should fail (return false) - ret = p->mark_as_downloading(piece_block(i, j), (void*)1, piece_picker::slow); + ret = p->mark_as_downloading(piece_block(i, j), (void*)tmp_peer, piece_picker::slow); TEST_CHECK(ret == false); - p->mark_as_finished(piece_block(i, j), (void*)1); + p->mark_as_finished(piece_block(i, j), (void*)tmp_peer); TEST_CHECK(p->is_downloaded(piece_block(i, j)) == bool(blocks & (1 << j))); TEST_CHECK(p->is_finished(piece_block(i, j)) == bool(blocks & (1 << j))); @@ -226,13 +228,19 @@ int test_main() { - - int tmp1; - int tmp2; - int tmp3; tcp::endpoint endp; piece_picker::downloading_piece st; + policy::ipv4_peer tmp1(endp, false, 0); + policy::ipv4_peer tmp2(endp, false, 0); + policy::ipv4_peer tmp3(endp, false, 0); policy::ipv4_peer peer_struct(endp, true, 0); +#if defined TORRENT_DEBUG || TORRENT_RELEASE_ASSERTS + tmp1.in_use = true; + tmp2.in_use = true; + tmp3.in_use = true; + peer_struct.in_use = true; +#endif + tmp_peer = &tmp1; std::vector<piece_block> picked; boost::shared_ptr<piece_picker> p; const std::vector<int> empty_vector; @@ -309,23 +317,23 @@ TEST_CHECK(p->is_requested(piece_block(0, 0)) == false); TEST_CHECK(std::find(picked.begin(), picked.end(), piece_block(0,0)) != picked.end()); - p->mark_as_downloading(piece_block(0, 2), (void*)1337, piece_picker::fast); - p->mark_as_writing(piece_block(0, 2), (void*)1337); - p->abort_download(piece_block(0, 2), (void*)1337); - p->mark_as_downloading(piece_block(0, 2), (void*)7, piece_picker::fast); - p->mark_as_writing(piece_block(0, 2), (void*)7); + p->mark_as_downloading(piece_block(0, 2), &tmp1, piece_picker::fast); + p->mark_as_writing(piece_block(0, 2), &tmp1); + p->abort_download(piece_block(0, 2), &tmp1); + p->mark_as_downloading(piece_block(0, 2), &tmp2, piece_picker::fast); + p->mark_as_writing(piece_block(0, 2), &tmp2); std::vector<void*> d; p->get_downloaders(d, 0); - TEST_CHECK(d[2] == (void*)7); + TEST_CHECK(d[2] == &tmp2); - p->mark_as_downloading(piece_block(0, 3), (void*)1337, piece_picker::fast); - p->abort_download(piece_block(0, 3), (void*)1337); - p->mark_as_downloading(piece_block(0, 3), (void*)7, piece_picker::fast); - p->mark_as_writing(piece_block(0, 3), (void*)7); + p->mark_as_downloading(piece_block(0, 3), &tmp1, piece_picker::fast); + p->abort_download(piece_block(0, 3), &tmp1); + p->mark_as_downloading(piece_block(0, 3), &tmp2, piece_picker::fast); + p->mark_as_writing(piece_block(0, 3), &tmp2); p->get_downloaders(d, 0); - TEST_CHECK(d[3] == (void*)7); + TEST_CHECK(d[3] == &tmp2); // ======================================================== @@ -851,9 +859,9 @@ print_title("test unverified blocks"); p = setup_picker("1111111", " ", "", "0300700"); TEST_CHECK(p->unverified_blocks() == 2 + 3); - TEST_CHECK(p->get_downloader(piece_block(4, 0)) == (void*)1); - TEST_CHECK(p->get_downloader(piece_block(4, 1)) == (void*)1); - TEST_CHECK(p->get_downloader(piece_block(4, 2)) == (void*)1); + TEST_CHECK(p->get_downloader(piece_block(4, 0)) == (void*)tmp_peer); + TEST_CHECK(p->get_downloader(piece_block(4, 1)) == (void*)tmp_peer); + TEST_CHECK(p->get_downloader(piece_block(4, 2)) == (void*)tmp_peer); TEST_CHECK(p->get_downloader(piece_block(4, 3)) == 0); p->mark_as_downloading(piece_block(4, 3), &peer_struct, piece_picker::fast); TEST_CHECK(p->get_downloader(piece_block(4, 3)) == &peer_struct); Copied: branches/libtorrent_aio_settings/tools/Jamfile (from rev 6724, branches/libtorrent_aio/tools/Jamfile) =================================================================== --- branches/libtorrent_aio_settings/tools/Jamfile (rev 0) +++ branches/libtorrent_aio_settings/tools/Jamfile 2012-04-15 23:56:38 UTC (rev 6725) @@ -0,0 +1,20 @@ +import modules ; + +BOOST_ROOT = [ modules.peek : BOOST_ROOT ] ; + +use-project /torrent : .. ; + +if $(BOOST_ROOT) +{ + use-project /boost : $(BOOST_ROOT) ; +} + +project tools + : requirements + <threading>multi <library>/torrent//torrent + : default-build + <link>static + ; + +exe parse_hash_fails : parse_hash_fails.cpp ; + This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ar...@us...> - 2012-04-15 23:43:05
|
Revision: 6724 http://libtorrent.svn.sourceforge.net/libtorrent/?rev=6724&view=rev Author: arvidn Date: 2012-04-15 23:42:55 +0000 (Sun, 15 Apr 2012) Log Message: ----------- merged changes from trunk Modified Paths: -------------- branches/libtorrent_aio/ChangeLog branches/libtorrent_aio/Jamfile branches/libtorrent_aio/configure.ac branches/libtorrent_aio/docs/manual.html branches/libtorrent_aio/docs/manual.rst branches/libtorrent_aio/include/libtorrent/Makefile.am branches/libtorrent_aio/include/libtorrent/alloca.hpp branches/libtorrent_aio/include/libtorrent/config.hpp branches/libtorrent_aio/include/libtorrent/piece_picker.hpp branches/libtorrent_aio/include/libtorrent/session_settings.hpp branches/libtorrent_aio/src/Makefile.am branches/libtorrent_aio/src/asio.cpp branches/libtorrent_aio/src/asio_ssl.cpp branches/libtorrent_aio/src/disk_io_thread.cpp branches/libtorrent_aio/src/peer_connection.cpp branches/libtorrent_aio/src/piece_picker.cpp branches/libtorrent_aio/src/policy.cpp branches/libtorrent_aio/src/session.cpp branches/libtorrent_aio/src/session_impl.cpp branches/libtorrent_aio/src/torrent.cpp branches/libtorrent_aio/src/web_peer_connection.cpp branches/libtorrent_aio/test/test_piece_picker.cpp Added Paths: ----------- branches/libtorrent_aio/tools/Jamfile Property Changed: ---------------- branches/libtorrent_aio/ Property changes on: branches/libtorrent_aio ___________________________________________________________________ Modified: svn:mergeinfo - /branches/RC_0_16:6640,6657,6662,6665,6669,6673-6675,6678 /branches/libtorrent_aio_arc:6324-6529 /branches/libtorrent_utp:3973-5057 /branches/ssl:6336-6361 /trunk:4468-6679 + /branches/RC_0_16:6640,6657,6662,6665,6669,6673-6675,6678,6684,6686,6688,6690,6692,6694-6695,6698,6700,6715 /branches/libtorrent_aio_arc:6324-6529 /branches/libtorrent_utp:3973-5057 /branches/ssl:6336-6361 /trunk:4468-6723 Modified: branches/libtorrent_aio/ChangeLog =================================================================== --- branches/libtorrent_aio/ChangeLog 2012-04-15 21:58:41 UTC (rev 6723) +++ branches/libtorrent_aio/ChangeLog 2012-04-15 23:42:55 UTC (rev 6724) @@ -11,6 +11,13 @@ * almost completely changed the storage interface (for custom storage) * added support for hashing pieces in multiple threads + * change default of rate_limit_utp to true + * fixed DLL export issue on windows (when building a shared library linking statically against boost) + * fixed FreeBSD build + * fixed web seed performance issue whith pieces > 1 MiB + * fixed unchoke logic when using web seeds + * fixed compatibility with older versions of boost (down to boost 1.40) + 0.16 release * support torrents with more than 262000 pieces Modified: branches/libtorrent_aio/Jamfile =================================================================== --- branches/libtorrent_aio/Jamfile 2012-04-15 21:58:41 UTC (rev 6723) +++ branches/libtorrent_aio/Jamfile 2012-04-15 23:42:55 UTC (rev 6724) @@ -611,6 +611,13 @@ <define>BOOST_THREAD_USE_LIB <threading>multi <link>shared:<define>TORRENT_BUILDING_SHARED + + # on windows, when linking statically against asio + # but producing a DLL, everything inside the DLL needs + # to declare the symbol as being exported + <link>shared,<boost-link>static:<define>BOOST_ASIO_SOURCE + <link>shared,<boost-link>static:<define>BOOST_SYSTEM_SOURCE + <dht-support>on:<source>src/kademlia/$(KADEMLIA_SOURCES).cpp <dht-support>logging:<source>src/kademlia/$(KADEMLIA_SOURCES).cpp <conditional>@building Modified: branches/libtorrent_aio/configure.ac =================================================================== --- branches/libtorrent_aio/configure.ac 2012-04-15 21:58:41 UTC (rev 6723) +++ branches/libtorrent_aio/configure.ac 2012-04-15 23:42:55 UTC (rev 6724) @@ -636,6 +636,7 @@ [include/libtorrent/Makefile] [examples/Makefile] [test/Makefile] + [tools/Makefile] [bindings/Makefile] [bindings/python/Makefile] [bindings/python/setup.py] Modified: branches/libtorrent_aio/docs/manual.html =================================================================== --- branches/libtorrent_aio/docs/manual.html 2012-04-15 21:58:41 UTC (rev 6723) +++ branches/libtorrent_aio/docs/manual.html 2012-04-15 23:42:55 UTC (rev 6724) @@ -4407,6 +4407,8 @@ int ssl_listen; int tracker_backoff; + + bool ban_web_seeds; }; </pre> <p><tt class="docutils literal"><span class="pre">version</span></tt> is automatically set to the libtorrent version you're using @@ -5191,6 +5193,8 @@ <p>It defaults to 250.</p> <p>This setting may be useful to make libtorrent more or less aggressive in hitting trackers.</p> +<p><tt class="docutils literal"><span class="pre">ban_web_seeds</span></tt> enables banning web seeds. By default, web seeds that send +corrupt data are banned.</p> </div> </div> <div class="section" id="pe-settings"> Modified: branches/libtorrent_aio/docs/manual.rst =================================================================== --- branches/libtorrent_aio/docs/manual.rst 2012-04-15 21:58:41 UTC (rev 6723) +++ branches/libtorrent_aio/docs/manual.rst 2012-04-15 23:42:55 UTC (rev 6724) @@ -4670,6 +4670,8 @@ int ssl_listen; int tracker_backoff; + + bool ban_web_seeds; }; ``version`` is automatically set to the libtorrent version you're using @@ -5482,7 +5484,7 @@ the global rate limiter (which they aren't by default). ``rate_limit_utp`` determines if uTP connections should be throttled by the global rate -limiter or not. By default they are not, since uTP manages its own rate. +limiter or not. By default they are. ``listen_queue_size`` is the value passed in to listen() for the listen socket. It is the number of outstanding incoming connections to queue up while we're not @@ -5611,6 +5613,9 @@ This setting may be useful to make libtorrent more or less aggressive in hitting trackers. +``ban_web_seeds`` enables banning web seeds. By default, web seeds that send +corrupt data are banned. + pe_settings =========== Modified: branches/libtorrent_aio/include/libtorrent/Makefile.am =================================================================== --- branches/libtorrent_aio/include/libtorrent/Makefile.am 2012-04-15 21:58:41 UTC (rev 6723) +++ branches/libtorrent_aio/include/libtorrent/Makefile.am 2012-04-15 23:42:55 UTC (rev 6724) @@ -126,6 +126,9 @@ xml_parse.hpp \ \ $(GEOIP_H) \ + tommath.h \ + tommath_class.h \ + tommath_superclass.h \ \ aux_/session_impl.hpp \ \ Modified: branches/libtorrent_aio/include/libtorrent/alloca.hpp =================================================================== --- branches/libtorrent_aio/include/libtorrent/alloca.hpp 2012-04-15 21:58:41 UTC (rev 6723) +++ branches/libtorrent_aio/include/libtorrent/alloca.hpp 2012-04-15 23:42:55 UTC (rev 6724) @@ -34,15 +34,19 @@ #include "libtorrent/config.hpp" -#ifdef TORRENT_WINDOWS +#if defined TORRENT_WINDOWS #include <malloc.h> #define TORRENT_ALLOCA(t, n) static_cast<t*>(_alloca(sizeof(t) * (n))) +#elif defined TORRENT_BSD + +#include <stdlib.h> +#define TORRENT_ALLOCA(t, n) static_cast<t*>(alloca(sizeof(t) * (n))) + #else #include <alloca.h> - #define TORRENT_ALLOCA(t, n) static_cast<t*>(alloca(sizeof(t) * (n))) #endif Modified: branches/libtorrent_aio/include/libtorrent/config.hpp =================================================================== --- branches/libtorrent_aio/include/libtorrent/config.hpp 2012-04-15 21:58:41 UTC (rev 6723) +++ branches/libtorrent_aio/include/libtorrent/config.hpp 2012-04-15 23:42:55 UTC (rev 6724) @@ -116,6 +116,20 @@ #define TORRENT_USE_DEFAULT_IO 0 #endif +// backwards compatibility with older versions of boost +#if !defined BOOST_SYMBOL_EXPORT && !defined BOOST_SYMBOL_IMPORT +# if defined _MSC_VER || defined __MINGW32__ +# define BOOST_SYMBOL_EXPORT __declspec(dllexport) +# define BOOST_SYMBOL_IMPORT __declspec(dllimport) +# elif __GNU__ >= 4 +# define BOOST_SYMBOL_EXPORT __attribute__((visibility("default"))) +# define BOOST_SYMBOL_IMPORT __attribute__((visibility("default"))) +# else +# define BOOST_SYMBOL_EXPORT +# define BOOST_SYMBOL_IMPORT +# endif +#endif + #if defined TORRENT_BUILDING_SHARED # define TORRENT_EXPORT BOOST_SYMBOL_EXPORT #elif defined TORRENT_LINKING_SHARED @@ -209,6 +223,8 @@ # endif # define TORRENT_USE_MACH_SEMAPHORE 1 #else // __APPLE__ +// FreeBSD has a reasonable iconv signature +# define TORRENT_ICONV_ARG (const char**) # define TORRENT_USE_POSIX_SEMAPHORE 1 #endif // __APPLE__ Modified: branches/libtorrent_aio/include/libtorrent/piece_picker.hpp =================================================================== --- branches/libtorrent_aio/include/libtorrent/piece_picker.hpp 2012-04-15 21:58:41 UTC (rev 6723) +++ branches/libtorrent_aio/include/libtorrent/piece_picker.hpp 2012-04-15 23:42:55 UTC (rev 6724) @@ -119,6 +119,10 @@ // the state of this block enum { state_none, state_requested, state_writing, state_finished }; unsigned state:2; +#if defined TORRENT_DEBUG || TORRENT_RELEASE_ASSERTS + // to allow verifying the invariant of blocks belonging to the right piece + int piece_index; +#endif }; // the peers that are downloading this piece Modified: branches/libtorrent_aio/include/libtorrent/session_settings.hpp =================================================================== --- branches/libtorrent_aio/include/libtorrent/session_settings.hpp 2012-04-15 21:58:41 UTC (rev 6723) +++ branches/libtorrent_aio/include/libtorrent/session_settings.hpp 2012-04-15 23:42:55 UTC (rev 6724) @@ -972,6 +972,9 @@ // determines how fast the back-off happens. Default // is 250 int tracker_backoff; + + // when true, web seeds sending bad data will be banned + bool ban_web_seeds; }; #ifndef TORRENT_DISABLE_DHT Modified: branches/libtorrent_aio/src/Makefile.am =================================================================== --- branches/libtorrent_aio/src/Makefile.am 2012-04-15 21:58:41 UTC (rev 6723) +++ branches/libtorrent_aio/src/Makefile.am 2012-04-15 23:42:55 UTC (rev 6724) @@ -66,6 +66,7 @@ lt_trackers.cpp \ magnet_uri.cpp \ metadata_transfer.cpp \ + mpi.c \ natpmp.cpp \ parse_url.cpp \ pe_crypto.cpp \ Modified: branches/libtorrent_aio/src/asio.cpp =================================================================== --- branches/libtorrent_aio/src/asio.cpp 2012-04-15 21:58:41 UTC (rev 6723) +++ branches/libtorrent_aio/src/asio.cpp 2012-04-15 23:42:55 UTC (rev 6724) @@ -1,3 +1,7 @@ // builds all boost.asio source as a separate compilation unit +#include <boost/version.hpp> + +#if BOOST_VERSION >= 104500 #include <boost/asio/impl/src.hpp> +#endif Modified: branches/libtorrent_aio/src/asio_ssl.cpp =================================================================== --- branches/libtorrent_aio/src/asio_ssl.cpp 2012-04-15 21:58:41 UTC (rev 6723) +++ branches/libtorrent_aio/src/asio_ssl.cpp 2012-04-15 23:42:55 UTC (rev 6724) @@ -1,3 +1,7 @@ // builds all boost.asio SSL source as a separate compilation unit +#include <boost/version.hpp> + +#if BOOST_VERSION >= 104610 #include <boost/asio/ssl/impl/src.hpp> +#endif Modified: branches/libtorrent_aio/src/disk_io_thread.cpp =================================================================== --- branches/libtorrent_aio/src/disk_io_thread.cpp 2012-04-15 21:58:41 UTC (rev 6723) +++ branches/libtorrent_aio/src/disk_io_thread.cpp 2012-04-15 23:42:55 UTC (rev 6724) @@ -2332,7 +2332,14 @@ // sizing the disk cache size when it's set to // automatic. #ifdef TORRENT_BSD +#ifdef HW_MEMSIZE int mib[2] = { CTL_HW, HW_MEMSIZE }; +#else + // not entirely sure this sysctl supports 64 + // bit return values, but it's probably better + // than not building + int mib[2] = { CTL_HW, HW_PHYSMEM }; +#endif size_t len = sizeof(m_physical_ram); if (sysctl(mib, 2, &m_physical_ram, &len, NULL, 0) != 0) m_physical_ram = 0; Modified: branches/libtorrent_aio/src/peer_connection.cpp =================================================================== --- branches/libtorrent_aio/src/peer_connection.cpp 2012-04-15 21:58:41 UTC (rev 6723) +++ branches/libtorrent_aio/src/peer_connection.cpp 2012-04-15 23:42:55 UTC (rev 6724) @@ -353,6 +353,7 @@ , m_holepunch_mode(false) , m_ignore_stats(false) , m_corked(false) + , m_has_metadata(true) #if defined TORRENT_DEBUG || TORRENT_RELEASE_ASSERTS , m_in_constructor(true) , m_disconnect_started(false) @@ -3918,13 +3919,14 @@ if (peer_info_struct()) { policy::peer* pi = peer_info_struct(); + TORRENT_ASSERT(pi->in_use); p.source = pi->source; p.failcount = pi->failcount; p.num_hashfails = pi->hashfails; p.flags |= pi->on_parole ? peer_info::on_parole : 0; p.flags |= pi->optimistically_unchoked ? peer_info::optimistic_unchoke : 0; #ifndef TORRENT_DISABLE_GEO_IP - p.inet_as = pi->inet_as->first; + p.inet_as = pi->inet_as ? pi->inet_as->first : 0xffff; #endif } else Modified: branches/libtorrent_aio/src/piece_picker.cpp =================================================================== --- branches/libtorrent_aio/src/piece_picker.cpp 2012-04-15 21:58:41 UTC (rev 6723) +++ branches/libtorrent_aio/src/piece_picker.cpp 2012-04-15 23:42:55 UTC (rev 6724) @@ -48,6 +48,7 @@ #ifdef TORRENT_DEBUG #include "libtorrent/peer_connection.hpp" #include "libtorrent/torrent.hpp" +#include "libtorrent/policy.hpp" // for policy::peer #endif #include "libtorrent/invariant_check.hpp" @@ -196,6 +197,9 @@ ret.info[i].num_peers = 0; ret.info[i].state = block_info::state_none; ret.info[i].peer = 0; +#if defined TORRENT_DEBUG || TORRENT_RELEASE_ASSERTS + ret.info[i].piece_index = piece; +#endif } return ret; } @@ -363,6 +367,8 @@ int num_writing = 0; for (int k = 0; k < num_blocks; ++k) { + TORRENT_ASSERT(i->info[k].piece_index == i->index); + TORRENT_ASSERT(i->info[k].peer == 0 || static_cast<policy::peer*>(i->info[k].peer)->in_use); if (i->info[k].state == block_info::state_finished) { ++num_finished; @@ -918,6 +924,15 @@ std::vector<downloading_piece>::iterator i = find_dl_piece(state - 1, index); TORRENT_ASSERT(i != m_downloads[state - 1].end()); +#ifdef TORRENT_DEBUG + int num_blocks = blocks_in_piece(i->index); + for (int k = 0; k < num_blocks; ++k) + { + TORRENT_ASSERT(i->info[k].piece_index == index); + TORRENT_ASSERT(i->info[k].state == block_info::state_finished); + TORRENT_ASSERT(i->info[k].num_peers == 0); + } +#endif piece_pos& p = m_piece_map[index]; int prev_priority = p.priority(this); @@ -1561,6 +1576,9 @@ #else #define TORRENT_INC_LOOP_COUNTER #endif + + TORRENT_ASSERT(peer == 0 || static_cast<policy::peer*>(peer)->in_use); + // prevent the number of partial pieces to grow indefinitely // make this scale by the number of peers we have. For large // scale clients, we would have more peers, and allow a higher @@ -1832,6 +1850,8 @@ for (int j = 0; j < num_blocks_in_piece; ++j) { block_info const& info = dp.info[j]; + TORRENT_ASSERT(info.peer == 0 || static_cast<policy::peer*>(info.peer)->in_use); + TORRENT_ASSERT(info.piece_index == dp.index); if (info.state != block_info::state_requested || info.peer == peer) continue; @@ -1861,6 +1881,7 @@ for (int j = 0; j < num_blocks_in_piece; ++j) { block_info const& info = i->info[j]; + TORRENT_ASSERT(info.piece_index == i->index); if (info.state != block_info::state_none) continue; std::vector<piece_block>::iterator k = std::find( interesting_blocks.begin(), interesting_blocks.end() @@ -1907,6 +1928,7 @@ for (int j = 0; j < num_blocks_in_piece; ++j) { block_info const& info = k->info[j]; + TORRENT_ASSERT(info.piece_index == k->index); if (info.state == block_info::state_finished) continue; TORRENT_ASSERT(info.peer != 0); } @@ -1956,7 +1978,10 @@ { for (std::vector<block_info>::iterator i = m_block_info.begin() , end(m_block_info.end()); i != end; ++i) + { + TORRENT_ASSERT(i->peer == 0 || static_cast<policy::peer*>(i->peer)->in_use); if (i->peer == peer) i->peer = 0; + } } namespace @@ -1973,6 +1998,8 @@ for (int j = 0; j < num_blocks_in_piece; ++j) { piece_picker::block_info const& info = p.info[j]; + TORRENT_ASSERT(info.peer == 0 || static_cast<policy::peer*>(info.peer)->in_use); + TORRENT_ASSERT(info.piece_index == p.index); if (info.state != piece_picker::block_info::state_none && info.peer != peer) { @@ -2094,6 +2121,7 @@ { // ignore completed blocks and already requested blocks block_info const& info = dp.info[j]; + TORRENT_ASSERT(info.piece_index == dp.index); if (info.state != block_info::state_none) continue; backup_blocks2.push_back(piece_block(dp.index, j)); } @@ -2104,6 +2132,7 @@ { // ignore completed blocks and already requested blocks block_info const& info = dp.info[j]; + TORRENT_ASSERT(info.piece_index == dp.index); if (info.state != block_info::state_none) continue; // if the piece is fast and the peer is slow, or vice versa, @@ -2203,6 +2232,7 @@ #ifdef TORRENT_DEBUG for (int k = 0; k < max_blocks; ++k) { + TORRENT_ASSERT(i->info[k].piece_index == index); TORRENT_ASSERT(i->info[k].state == block_info::state_finished || i->info[k].state == block_info::state_writing); } @@ -2344,6 +2374,7 @@ std::vector<downloading_piece>::const_iterator i = find_dl_piece(state - 1, block.piece_index); TORRENT_ASSERT(i != m_downloads[state - 1].end()); + TORRENT_ASSERT(i->info[block.block_index].piece_index == block.piece_index); return i->info[block.block_index].state == block_info::state_requested; } @@ -2358,6 +2389,7 @@ if (state == piece_pos::piece_open) return false; std::vector<downloading_piece>::const_iterator i = find_dl_piece(state - 1, block.piece_index); TORRENT_ASSERT(i != m_downloads[state-1].end()); + TORRENT_ASSERT(i->info[block.block_index].piece_index == block.piece_index); return i->info[block.block_index].state == block_info::state_finished || i->info[block.block_index].state == block_info::state_writing; } @@ -2373,6 +2405,7 @@ if (state == piece_pos::piece_open) return false; std::vector<downloading_piece>::const_iterator i = find_dl_piece(state - 1, block.piece_index); TORRENT_ASSERT(i != m_downloads[state - 1].end()); + TORRENT_ASSERT(i->info[block.block_index].piece_index == block.piece_index); return i->info[block.block_index].state == block_info::state_finished; } @@ -2383,6 +2416,7 @@ std::cerr << "mark_as_downloading( {" << block.piece_index << ", " << block.block_index << "} )" << std::endl; #endif + TORRENT_ASSERT(peer == 0 || static_cast<policy::peer*>(peer)->in_use); TORRENT_ASSERT(state != piece_picker::none); TORRENT_ASSERT(block.piece_index >= 0); TORRENT_ASSERT(block.block_index >= 0); @@ -2405,6 +2439,7 @@ downloading_piece& dp = add_download_piece(block.piece_index); dp.state = state; block_info& info = dp.info[block.block_index]; + TORRENT_ASSERT(info.piece_index == block.piece_index); info.state = block_info::state_requested; info.peer = peer; info.num_peers = 1; @@ -2423,6 +2458,7 @@ std::vector<downloading_piece>::iterator i = find_dl_piece(p.state - 1, block.piece_index); TORRENT_ASSERT(i != m_downloads[p.state - 1].end()); block_info& info = i->info[block.block_index]; + TORRENT_ASSERT(info.piece_index == block.piece_index); if (info.state == block_info::state_writing || info.state == block_info::state_finished) { @@ -2458,6 +2494,7 @@ TORRENT_ASSERT(i != m_downloads[p.state - 1].end()); block_info const& info = i->info[block.block_index]; + TORRENT_ASSERT(info.piece_index == block.piece_index); return info.num_peers; } @@ -2489,6 +2526,8 @@ std::cerr << "mark_as_writing( {" << block.piece_index << ", " << block.block_index << "} )" << std::endl; #endif + TORRENT_ASSERT(peer == 0 || static_cast<policy::peer*>(peer)->in_use); + TORRENT_ASSERT(block.piece_index >= 0); TORRENT_ASSERT(block.block_index >= 0); TORRENT_ASSERT(block.piece_index < m_piece_map.size()); @@ -2516,6 +2555,7 @@ downloading_piece& dp = add_download_piece(block.piece_index); dp.state = none; block_info& info = dp.info[block.block_index]; + TORRENT_ASSERT(info.piece_index == block.piece_index); info.state = block_info::state_writing; info.peer = peer; info.num_peers = 0; @@ -2531,6 +2571,8 @@ TORRENT_ASSERT(i != m_downloads[p.state - 1].end()); block_info& info = i->info[block.block_index]; + TORRENT_ASSERT(info.piece_index == block.piece_index); + info.peer = peer; if (info.state == block_info::state_requested) --i->requested; TORRENT_ASSERT(i->requested >= 0); @@ -2540,6 +2582,7 @@ ++i->writing; info.state = block_info::state_writing; + TORRENT_ASSERT(info.piece_index == block.piece_index); // all other requests for this block should have been // cancelled now @@ -2571,6 +2614,7 @@ if (i == m_downloads[state - 1].end()) return; block_info& info = i->info[block.block_index]; + TORRENT_ASSERT(info.piece_index == block.piece_index); TORRENT_ASSERT(info.state == block_info::state_writing); TORRENT_ASSERT(info.num_peers == 0); @@ -2660,6 +2704,7 @@ std::cerr << "mark_as_finished( {" << block.piece_index << ", " << block.block_index << "} )" << std::endl; #endif + TORRENT_ASSERT(peer == 0 || static_cast<policy::peer*>(peer)->in_use); TORRENT_ASSERT(block.piece_index >= 0); TORRENT_ASSERT(block.block_index >= 0); TORRENT_ASSERT(block.piece_index < m_piece_map.size()); @@ -2686,6 +2731,7 @@ downloading_piece& dp = add_download_piece(block.piece_index); dp.state = none; block_info& info = dp.info[block.block_index]; + TORRENT_ASSERT(info.piece_index == block.piece_index); info.peer = peer; TORRENT_ASSERT(info.state == block_info::state_none); TORRENT_ASSERT(info.num_peers == 0); @@ -2703,6 +2749,7 @@ std::vector<downloading_piece>::iterator i = find_dl_piece(p.state - 1, block.piece_index); TORRENT_ASSERT(i != m_downloads[p.state - 1].end()); block_info& info = i->info[block.block_index]; + TORRENT_ASSERT(info.piece_index == block.piece_index); if (info.state == block_info::state_finished) return; @@ -2785,6 +2832,7 @@ TORRENT_ASSERT(i != m_downloads[state - 1].end()); for (int j = 0, end(blocks_in_piece(index)); j != end; ++j) { + TORRENT_ASSERT(i->info[j].peer == 0 || static_cast<policy::peer*>(i->info[j].peer)->in_use); d.push_back(i->info[j].peer); } } @@ -2797,10 +2845,13 @@ std::vector<downloading_piece>::const_iterator i = find_dl_piece(state - 1, block.piece_index); TORRENT_ASSERT(block.block_index >= 0); + TORRENT_ASSERT(i->info[block.block_index].piece_index == block.piece_index); if (i->info[block.block_index].state == block_info::state_none) return 0; - return i->info[block.block_index].peer; + void* peer = i->info[block.block_index].peer; + TORRENT_ASSERT(peer == 0 || static_cast<policy::peer*>(peer)->in_use); + return peer; } // this is called when a request is rejected or when @@ -2814,6 +2865,8 @@ #ifdef TORRENT_PICKER_LOG std::cerr << "abort_download( {" << block.piece_index << ", " << block.block_index << "} )" << std::endl; #endif + TORRENT_ASSERT(peer == 0 || static_cast<policy::peer*>(peer)->in_use); + TORRENT_ASSERT(block.piece_index >= 0); TORRENT_ASSERT(block.block_index >= 0); TORRENT_ASSERT(block.piece_index < m_piece_map.size()); @@ -2826,6 +2879,8 @@ TORRENT_ASSERT(i != m_downloads[state - 1].end()); block_info& info = i->info[block.block_index]; + TORRENT_ASSERT(info.peer == 0 || static_cast<policy::peer*>(info.peer)->in_use); + TORRENT_ASSERT(info.piece_index == block.piece_index); TORRENT_ASSERT(info.state != block_info::state_none); Modified: branches/libtorrent_aio/src/policy.cpp =================================================================== --- branches/libtorrent_aio/src/policy.cpp 2012-04-15 21:58:41 UTC (rev 6723) +++ branches/libtorrent_aio/src/policy.cpp 2012-04-15 23:42:55 UTC (rev 6724) @@ -568,6 +568,10 @@ INVARIANT_CHECK; TORRENT_ASSERT(p->in_use); + + if (!m_torrent->settings().ban_web_seeds && p->web_seed) + return; + if (is_connect_candidate(*p, m_finished)) --m_num_connect_candidates; @@ -699,8 +703,8 @@ { if (erase_candidate > current) --erase_candidate; if (candidate > current) --candidate; - --m_round_robin; erase_peer(m_peers.begin() + current); + continue; } else { @@ -941,8 +945,6 @@ (peer*)m_torrent->session().m_ipv4_peer_pool.malloc(); if (p == 0) return false; - TORRENT_ASSERT(p->in_use == false); - #if TORRENT_USE_IPV6 if (is_v6) m_torrent->session().m_ipv6_peer_pool.set_next_size(500); @@ -1248,7 +1250,7 @@ p->in_use = false; #endif - m_torrent->session().m_i2p_peer_pool.free((i2p_peer*)p); + m_torrent->session().m_i2p_peer_pool.destroy((i2p_peer*)p); return 0; } } @@ -1373,10 +1375,10 @@ p->in_use = false; #endif #if TORRENT_USE_IPV6 - if (is_v6) m_torrent->session().m_ipv6_peer_pool.free((ipv6_peer*)p); + if (is_v6) m_torrent->session().m_ipv6_peer_pool.destroy((ipv6_peer*)p); else #endif - m_torrent->session().m_ipv4_peer_pool.free((ipv4_peer*)p); + m_torrent->session().m_ipv4_peer_pool.destroy((ipv4_peer*)p); return 0; } #ifndef TORRENT_DISABLE_EXTENSIONS @@ -1761,10 +1763,6 @@ if (lhs.connectable != rhs.connectable) return lhs.connectable < rhs.connectable; - // prefer peers with higher failcount - if (lhs.failcount != rhs.failcount) - return lhs.failcount > rhs.failcount; - return lhs.trust_points < rhs.trust_points; } Modified: branches/libtorrent_aio/src/session.cpp =================================================================== --- branches/libtorrent_aio/src/session.cpp 2012-04-15 21:58:41 UTC (rev 6723) +++ branches/libtorrent_aio/src/session.cpp 2012-04-15 23:42:55 UTC (rev 6724) @@ -1320,7 +1320,7 @@ , utp_dynamic_sock_buf(true) , utp_loss_multiplier(50) // specified in percent , mixed_mode_algorithm(peer_proportional) - , rate_limit_utp(false) + , rate_limit_utp(true) , listen_queue_size(5) , announce_double_nat(false) , torrent_connect_boost(10) @@ -1343,6 +1343,7 @@ , network_threads(0) , ssl_listen(4433) , tracker_backoff(250) + , ban_web_seeds(true) {} session_settings::~session_settings() {} Modified: branches/libtorrent_aio/src/session_impl.cpp =================================================================== --- branches/libtorrent_aio/src/session_impl.cpp 2012-04-15 21:58:41 UTC (rev 6723) +++ branches/libtorrent_aio/src/session_impl.cpp 2012-04-15 23:42:55 UTC (rev 6724) @@ -4476,6 +4476,7 @@ TORRENT_ASSERT(p); policy::peer* pi = p->peer_info_struct(); if (!pi) continue; + if (pi->web_seed) continue; torrent* t = p->associated_torrent().lock().get(); if (!t) continue; if (t->is_paused()) continue; @@ -4573,7 +4574,8 @@ torrent* t = p->associated_torrent().lock().get(); policy::peer* pi = p->peer_info_struct(); - if (p->ignore_unchoke_slots() || t == 0 || pi == 0 || t->is_paused()) continue; + if (p->ignore_unchoke_slots() || t == 0 || pi == 0 || pi->web_seed || t->is_paused()) + continue; if (m_settings.choking_algorithm == session_settings::bittyrant_choker) { Modified: branches/libtorrent_aio/src/torrent.cpp =================================================================== --- branches/libtorrent_aio/src/torrent.cpp 2012-04-15 21:58:41 UTC (rev 6723) +++ branches/libtorrent_aio/src/torrent.cpp 2012-04-15 23:42:55 UTC (rev 6724) @@ -4654,6 +4654,14 @@ web->removed = true; return; } + peer_connection * peer = web->peer_info.connection; + if (peer) { + TORRENT_ASSERT(peer->m_in_use == 1337); + peer->set_peer_info(0); + } + if (has_picker()) picker().clear_peer(&web->peer_info); + + m_web_seeds.erase(web); } @@ -4839,6 +4847,14 @@ if (m_ses.is_aborted()) return; +#ifndef TORRENT_DISABLE_GEO_IP + int as = m_ses.as_for_ip(host->endpoint().address()); +#ifdef TORRENT_DEBUG + web->peer_info.inet_as_num = as; +#endif + web->peer_info.inet_as = m_ses.lookup_as(as); +#endif + if (int(m_connections.size()) >= m_max_connections || m_ses.num_connections() >= m_ses.settings().connections_limit) return; @@ -5699,6 +5715,7 @@ i != end(); ++i) { peer_connection* peer = *i; + TORRENT_ASSERT(peer->m_in_use == 1337); // incoming peers that haven't finished the handshake should // not be included in this list @@ -8187,6 +8204,8 @@ , (boost::bind(&policy::peer::connection, boost::bind(&web_seed_entry::peer_info, _1)) == p)); TORRENT_ASSERT(i != m_web_seeds.end()); if (i == m_web_seeds.end()) return; + p->set_peer_info(0); + if (has_picker()) picker().clear_peer(&i->peer_info); m_web_seeds.erase(i); } Modified: branches/libtorrent_aio/src/web_peer_connection.cpp =================================================================== --- branches/libtorrent_aio/src/web_peer_connection.cpp 2012-04-15 21:58:41 UTC (rev 6723) +++ branches/libtorrent_aio/src/web_peer_connection.cpp 2012-04-15 23:42:55 UTC (rev 6724) @@ -84,9 +84,10 @@ shared_ptr<torrent> tor = t.lock(); TORRENT_ASSERT(tor); - // we always prefer downloading 1 MB chunks - // from web seeds - prefer_whole_pieces((1024 * 1024) / tor->torrent_file().piece_length()); + // we always prefer downloading 1 MiB chunks + // from web seeds, or whole pieces if pieces + // are larger than a MiB + prefer_whole_pieces((std::min)((1024 * 1024) / tor->torrent_file().piece_length(), 1)); // we want large blocks as well, so // we can request more bytes at once Modified: branches/libtorrent_aio/test/test_piece_picker.cpp =================================================================== --- branches/libtorrent_aio/test/test_piece_picker.cpp 2012-04-15 21:58:41 UTC (rev 6723) +++ branches/libtorrent_aio/test/test_piece_picker.cpp 2012-04-15 23:42:55 UTC (rev 6724) @@ -56,6 +56,8 @@ return have; } +policy::ipv4_peer* tmp_peer = 0; + // availability is a string where each character is the // availability of that piece, '1', '2' etc. // have_str is a string where each character represents a @@ -101,16 +103,16 @@ TEST_CHECK(!p->is_finished(piece_block(i, j))); if ((blocks & (1 << j)) == 0) continue; ++counter; - bool ret = p->mark_as_downloading(piece_block(i, j), (void*)1, piece_picker::slow); + bool ret = p->mark_as_downloading(piece_block(i, j), (void*)tmp_peer, piece_picker::slow); TEST_CHECK(ret == true); TEST_CHECK(p->is_requested(piece_block(i, j)) == bool(blocks & (1 << j))); - p->mark_as_writing(piece_block(i, j), (void*)1); + p->mark_as_writing(piece_block(i, j), (void*)tmp_peer); TEST_CHECK(!p->is_finished(piece_block(i, j))); // trying to mark a block as requested after it has been completed // should fail (return false) - ret = p->mark_as_downloading(piece_block(i, j), (void*)1, piece_picker::slow); + ret = p->mark_as_downloading(piece_block(i, j), (void*)tmp_peer, piece_picker::slow); TEST_CHECK(ret == false); - p->mark_as_finished(piece_block(i, j), (void*)1); + p->mark_as_finished(piece_block(i, j), (void*)tmp_peer); TEST_CHECK(p->is_downloaded(piece_block(i, j)) == bool(blocks & (1 << j))); TEST_CHECK(p->is_finished(piece_block(i, j)) == bool(blocks & (1 << j))); @@ -226,13 +228,19 @@ int test_main() { - - int tmp1; - int tmp2; - int tmp3; tcp::endpoint endp; piece_picker::downloading_piece st; + policy::ipv4_peer tmp1(endp, false, 0); + policy::ipv4_peer tmp2(endp, false, 0); + policy::ipv4_peer tmp3(endp, false, 0); policy::ipv4_peer peer_struct(endp, true, 0); +#if defined TORRENT_DEBUG || TORRENT_RELEASE_ASSERTS + tmp1.in_use = true; + tmp2.in_use = true; + tmp3.in_use = true; + peer_struct.in_use = true; +#endif + tmp_peer = &tmp1; std::vector<piece_block> picked; boost::shared_ptr<piece_picker> p; const std::vector<int> empty_vector; @@ -309,23 +317,23 @@ TEST_CHECK(p->is_requested(piece_block(0, 0)) == false); TEST_CHECK(std::find(picked.begin(), picked.end(), piece_block(0,0)) != picked.end()); - p->mark_as_downloading(piece_block(0, 2), (void*)1337, piece_picker::fast); - p->mark_as_writing(piece_block(0, 2), (void*)1337); - p->abort_download(piece_block(0, 2), (void*)1337); - p->mark_as_downloading(piece_block(0, 2), (void*)7, piece_picker::fast); - p->mark_as_writing(piece_block(0, 2), (void*)7); + p->mark_as_downloading(piece_block(0, 2), &tmp1, piece_picker::fast); + p->mark_as_writing(piece_block(0, 2), &tmp1); + p->abort_download(piece_block(0, 2), &tmp1); + p->mark_as_downloading(piece_block(0, 2), &tmp2, piece_picker::fast); + p->mark_as_writing(piece_block(0, 2), &tmp2); std::vector<void*> d; p->get_downloaders(d, 0); - TEST_CHECK(d[2] == (void*)7); + TEST_CHECK(d[2] == &tmp2); - p->mark_as_downloading(piece_block(0, 3), (void*)1337, piece_picker::fast); - p->abort_download(piece_block(0, 3), (void*)1337); - p->mark_as_downloading(piece_block(0, 3), (void*)7, piece_picker::fast); - p->mark_as_writing(piece_block(0, 3), (void*)7); + p->mark_as_downloading(piece_block(0, 3), &tmp1, piece_picker::fast); + p->abort_download(piece_block(0, 3), &tmp1); + p->mark_as_downloading(piece_block(0, 3), &tmp2, piece_picker::fast); + p->mark_as_writing(piece_block(0, 3), &tmp2); p->get_downloaders(d, 0); - TEST_CHECK(d[3] == (void*)7); + TEST_CHECK(d[3] == &tmp2); // ======================================================== @@ -851,9 +859,9 @@ print_title("test unverified blocks"); p = setup_picker("1111111", " ", "", "0300700"); TEST_CHECK(p->unverified_blocks() == 2 + 3); - TEST_CHECK(p->get_downloader(piece_block(4, 0)) == (void*)1); - TEST_CHECK(p->get_downloader(piece_block(4, 1)) == (void*)1); - TEST_CHECK(p->get_downloader(piece_block(4, 2)) == (void*)1); + TEST_CHECK(p->get_downloader(piece_block(4, 0)) == (void*)tmp_peer); + TEST_CHECK(p->get_downloader(piece_block(4, 1)) == (void*)tmp_peer); + TEST_CHECK(p->get_downloader(piece_block(4, 2)) == (void*)tmp_peer); TEST_CHECK(p->get_downloader(piece_block(4, 3)) == 0); p->mark_as_downloading(piece_block(4, 3), &peer_struct, piece_picker::fast); TEST_CHECK(p->get_downloader(piece_block(4, 3)) == &peer_struct); Copied: branches/libtorrent_aio/tools/Jamfile (from rev 6723, trunk/tools/Jamfile) =================================================================== --- branches/libtorrent_aio/tools/Jamfile (rev 0) +++ branches/libtorrent_aio/tools/Jamfile 2012-04-15 23:42:55 UTC (rev 6724) @@ -0,0 +1,20 @@ +import modules ; + +BOOST_ROOT = [ modules.peek : BOOST_ROOT ] ; + +use-project /torrent : .. ; + +if $(BOOST_ROOT) +{ + use-project /boost : $(BOOST_ROOT) ; +} + +project tools + : requirements + <threading>multi <library>/torrent//torrent + : default-build + <link>static + ; + +exe parse_hash_fails : parse_hash_fails.cpp ; + This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ar...@us...> - 2012-04-15 21:58:48
|
Revision: 6723 http://libtorrent.svn.sourceforge.net/libtorrent/?rev=6723&view=rev Author: arvidn Date: 2012-04-15 21:58:41 +0000 (Sun, 15 Apr 2012) Log Message: ----------- remove floating point settings by converting them to integers Modified Paths: -------------- branches/libtorrent_aio_settings/docs/manual.rst branches/libtorrent_aio_settings/include/libtorrent/aux_/session_settings.hpp branches/libtorrent_aio_settings/include/libtorrent/session_settings.hpp branches/libtorrent_aio_settings/include/libtorrent/settings_pack.hpp branches/libtorrent_aio_settings/src/disk_io_thread.cpp branches/libtorrent_aio_settings/src/session_impl.cpp branches/libtorrent_aio_settings/src/settings_pack.cpp branches/libtorrent_aio_settings/src/torrent.cpp Modified: branches/libtorrent_aio_settings/docs/manual.rst =================================================================== --- branches/libtorrent_aio_settings/docs/manual.rst 2012-04-15 19:39:19 UTC (rev 6722) +++ branches/libtorrent_aio_settings/docs/manual.rst 2012-04-15 21:58:41 UTC (rev 6723) @@ -4525,12 +4525,12 @@ bool auto_manage_prefer_seeds; bool dont_count_slow_torrents; int auto_manage_interval; - float share_ratio_limit; - float seed_time_ratio_limit; + int share_ratio_limit; + int seed_time_ratio_limit; int seed_time_limit; int peer_turnover_interval; - float peer_turnover; - float peer_turnover_cutoff; + int peer_turnover; + int peer_turnover_cutoff; bool close_redundant_connections; int auto_scrape_interval; @@ -5033,10 +5033,12 @@ is updated, and rotated. ``share_ratio_limit`` is the upload / download ratio limit for considering a -seeding torrent have met the seed limit criteria. See queuing_. +seeding torrent have met the seed limit criteria. See queuing_. This is specified +as percent. ``seed_time_ratio_limit`` is the seeding time / downloading time ratio limit for considering a seeding torrent to have met the seed limit criteria. See queuing_. +This is specified as percent. ``seed_time_limit`` is the limit on the time a torrent has been an active seed (specified in seconds) before it is considered having met the seed limit criteria. @@ -5048,12 +5050,12 @@ is specified in seconds. ``peer_turnover`` Is the fraction of the peers that are disconnected. This is -a float where 1.f represents all peers an 0 represents no peers. It defaults to -4% (i.e. 0.04f) +specified in percent, where 100 represents all peers an 0 represents no peers. It defaults to +4%. ``peer_turnover_cutoff`` is the cut off trigger for optimistic unchokes. If a torrent has more than this fraction of its connection limit, the optimistic unchoke is -triggered. This defaults to 90% (i.e. 0.9f). +triggered. It is specified in percent, and defaults to 90%. ``close_redundant_connections`` specifies whether libtorrent should close connections where both ends have no utility in keeping the connection open. Modified: branches/libtorrent_aio_settings/include/libtorrent/aux_/session_settings.hpp =================================================================== --- branches/libtorrent_aio_settings/include/libtorrent/aux_/session_settings.hpp 2012-04-15 19:39:19 UTC (rev 6722) +++ branches/libtorrent_aio_settings/include/libtorrent/aux_/session_settings.hpp 2012-04-15 21:58:41 UTC (rev 6723) @@ -66,15 +66,12 @@ int get_int(int name) const { GET(int, 0); } void set_bool(int name, bool value) { SET(bool); } bool get_bool(int name) const { GET(bool, false); } - void set_float(int name, float value) { SET(float); } - float get_float(int name) const { GET(float, 0.f); } session_settings() { initialize_default_settings(*this); } private: std::string m_strings[settings_pack::num_string_settings]; int m_ints[settings_pack::num_int_settings]; - float m_floats[settings_pack::num_float_settings]; bool m_bools[settings_pack::num_bool_settings]; }; Modified: branches/libtorrent_aio_settings/include/libtorrent/session_settings.hpp =================================================================== --- branches/libtorrent_aio_settings/include/libtorrent/session_settings.hpp 2012-04-15 19:39:19 UTC (rev 6722) +++ branches/libtorrent_aio_settings/include/libtorrent/session_settings.hpp 2012-04-15 21:58:41 UTC (rev 6723) @@ -455,8 +455,10 @@ // the default value for share ratio is 2 // the default seed time ratio is 7, because that's a common // asymmetry ratio on connections - float share_ratio_limit; - float seed_time_ratio_limit; + // these are specified as percentages + int share_ratio_limit; + int seed_time_ratio_limit; + // seed time limit is specified in seconds int seed_time_limit; // the interval (in seconds) between optimistic disconnects @@ -466,14 +468,15 @@ // the percentage of peers to disconnect every // turnoever interval (if we're at the peer limit) - // defaults to 2/50:th - float peer_turnover; + // defaults to 4% + // this is specified in percent + int peer_turnover; // when we are connected to more than // limit * peer_turnover_cutoff peers // disconnect peer_turnover fraction - // of the peers - float peer_turnover_cutoff; + // of the peers. It is specified in percent + int peer_turnover_cutoff; // if this is true (default) connections where both // ends have no utility in keeping the connection open Modified: branches/libtorrent_aio_settings/include/libtorrent/settings_pack.hpp =================================================================== --- branches/libtorrent_aio_settings/include/libtorrent/settings_pack.hpp 2012-04-15 19:39:19 UTC (rev 6722) +++ branches/libtorrent_aio_settings/include/libtorrent/settings_pack.hpp 2012-04-15 21:58:41 UTC (rev 6723) @@ -37,7 +37,6 @@ { namespace aux { struct session_impl; } // #error add an API to query a settings_pack as well - // #error convert all float types into int-types and remove float // #error maybe convert all bool types into int-types as well struct settings_pack { @@ -46,7 +45,6 @@ void set_str(int name, std::string val); void set_int(int name, int val); - void set_float(int name, float val); void set_bool(int name, bool val); enum type_bases @@ -54,7 +52,6 @@ string_type_base = 0x10000000, int_type_base = 0x20000000, bool_type_base = 0x30000000, - float_type_base = 0x40000000, type_mask = 0xf0000000, index_mask = 0x0fffffff, }; @@ -138,17 +135,6 @@ num_bool_settings = max_bool_setting_internal - bool_type_base }; - enum float_types - { - share_ratio_limit = float_type_base, - seed_time_ratio_limit, - peer_turnover, - peer_turnover_cutoff, - - max_float_setting_internal, - num_float_settings = max_float_setting_internal - float_type_base - }; - enum int_types { tracker_completion_timeout = int_type_base, @@ -261,6 +247,10 @@ network_threads, ssl_listen, tracker_backoff, + share_ratio_limit, + seed_time_ratio_limit, + peer_turnover, + peer_turnover_cutoff, max_int_setting_internal, num_int_settings = max_int_setting_internal - int_type_base @@ -301,14 +291,12 @@ // does not throttle uTP, throttles TCP to the same proportion // of throughput as there are TCP connections peer_proportional = 1 - }; private: std::vector<std::pair<int, std::string> > m_strings; std::vector<std::pair<int, int> > m_ints; - std::vector<std::pair<int, float> > m_floats; std::vector<std::pair<int, bool> > m_bools; }; } Modified: branches/libtorrent_aio_settings/src/disk_io_thread.cpp =================================================================== --- branches/libtorrent_aio_settings/src/disk_io_thread.cpp 2012-04-15 19:39:19 UTC (rev 6722) +++ branches/libtorrent_aio_settings/src/disk_io_thread.cpp 2012-04-15 21:58:41 UTC (rev 6723) @@ -1825,6 +1825,10 @@ settings_pack* s = ((settings_pack*)j->buffer); int block_size = m_disk_cache.block_size(); +#if TORRENT_USE_AIOINIT + bool init_aio = false; +#endif + for (std::vector<std::pair<int, bool> >::iterator i = s->m_bools.begin() , end(s->m_bools.end()); i != end; ++i) { @@ -1855,11 +1859,7 @@ #if TORRENT_USE_AIOINIT case settings_pack::aio_threads: case settings_pack::aio_max: - aioinit a; - memset(&a, 0, sizeof(a)); - a.aio_threads = s->aio_threads; - a.aio_num = s->aio_max; - aio_init(&a); + init_aio = true; break; #endif #if TORRENT_USE_SYNCIO @@ -1881,14 +1881,19 @@ m_settings.set_str(i->first, i->second); } - for (std::vector<std::pair<int, float> >::iterator i = s->m_floats.begin() - , end(s->m_floats.end()); i != end; ++i) + delete s; + +#if TORRENT_USE_AIOINIT + if (init_aio) { - m_settings.set_float(i->first, i->second); + aioinit a; + memset(&a, 0, sizeof(a)); + a.aio_threads = m_settings.get_int(settings_pack::aio_threads); + a.aio_num = m_settings.get_int(settings_pack::aio_max); + aio_init(&a); } +#endif - delete s; - #if defined __APPLE__ && defined __MACH__ && MAC_OS_X_VERSION_MIN_REQUIRED >= 1050 setiopolicy_np(IOPOL_TYPE_DISK, IOPOL_SCOPE_THREAD , m_settings.get_bool(settings_pack::low_prio_disk) ? IOPOL_THROTTLE : IOPOL_DEFAULT); Modified: branches/libtorrent_aio_settings/src/session_impl.cpp =================================================================== --- branches/libtorrent_aio_settings/src/session_impl.cpp 2012-04-15 19:39:19 UTC (rev 6722) +++ branches/libtorrent_aio_settings/src/session_impl.cpp 2012-04-15 21:58:41 UTC (rev 6723) @@ -554,14 +554,6 @@ SET(contiguous_recv_buffer, true, 0), }; - float_setting_entry_t float_settings[settings_pack::num_float_settings] = - { - SET(share_ratio_limit, 2.f, 0), - SET(seed_time_ratio_limit, 7.f, 0), - SET(peer_turnover, 2 / 50.f, 0), - SET(peer_turnover_cutoff, .9f, 0), - }; - int_setting_entry_t int_settings[settings_pack::num_int_settings] = { SET(tracker_completion_timeout, 60, 0), @@ -678,6 +670,10 @@ SET(network_threads, 0, &session_impl::update_network_threads), SET(ssl_listen, 4433, 0), SET(tracker_backoff, 250, 0), + SET(share_ratio_limit, 200, 0), + SET(seed_time_ratio_limit, 700, 0), + SET(peer_turnover, 200 / 50, 0), + SET(peer_turnover_cutoff, 90, 0), }; #undef SET @@ -1585,12 +1581,6 @@ sett[bool_settings[i].name] = m_settings.m_bools[i]; } - for (int i = 0; i < settings_pack::num_float_settings; ++i) - { - if (default_settings.m_floats[i] == m_settings.m_floats[i]) continue; - sett[float_settings[i].name] = boost::int64_t(m_settings.m_floats[i] * 1000.f); - } - #ifndef TORRENT_DISABLE_DHT if (m_dht && (flags & session::save_dht_state)) { @@ -1700,16 +1690,8 @@ { if (key != bool_settings[k].name) continue; pack->set_bool(settings_pack::bool_type_base + k, val->int_value()); - found = true; break; } - if (found) continue; - for (int k = 0; k < sizeof(float_settings)/sizeof(float_settings[0]); ++k) - { - if (key != float_settings[k].name) continue; - pack->set_float(settings_pack::float_type_base + k, val->int_value() / 1000.f); - break; - } } break; case lazy_entry::string_t: @@ -2178,9 +2160,6 @@ for (int i = 0; i < settings_pack::num_bool_settings; ++i) s.set_bool(settings_pack::bool_type_base + i, bool_settings[i].default_value); - - for (int i = 0; i < settings_pack::num_float_settings; ++i) - s.set_float(settings_pack::float_type_base + i, float_settings[i].default_value); } // session_impl is responsible for deleting 'pack', but it @@ -2222,23 +2201,6 @@ if (sa.fun) (this->*sa.fun)(); } - for (std::vector<std::pair<int, float> >::const_iterator i = pack->m_floats.begin() - , end(pack->m_floats.end()); i != end; ++i) - { - // disregard setting indices that are not string types - if ((i->first & settings_pack::type_mask) != settings_pack::float_type_base) - continue; - - // ignore settings that are out of bounds - int index = i->first & settings_pack::index_mask; - if (index < 0 || index >= settings_pack::num_float_settings) - continue; - - m_settings.set_float(i->first, i->second); - float_setting_entry_t const& sa = float_settings[i->first & settings_pack::index_mask]; - if (sa.fun) (this->*sa.fun)(); - } - for (std::vector<std::pair<int, bool> >::const_iterator i = pack->m_bools.begin() , end(pack->m_bools.end()); i != end; ++i) { @@ -2292,14 +2254,6 @@ p->set_bool(setting_name, val); } - for (int i = 0; i < settings_pack::num_float_settings; ++i) - { - float& val = *(float*)(((char*)&s) + float_settings[i].offset); - int setting_name = settings_pack::float_type_base + i; - if (val == m_settings.get_float(setting_name)) continue; - p->set_float(setting_name, val); - } - apply_settings_pack(p); } @@ -2325,11 +2279,6 @@ val = m_settings.get_bool(settings_pack::bool_type_base + i); } - for (int i = 0; i < settings_pack::num_float_settings; ++i) - { - float& val = *(float*)(((char*)&ret) + float_settings[i].offset); - val = m_settings.get_float(settings_pack::float_type_base + i); - } return ret; } #endif @@ -3767,7 +3716,7 @@ m_disconnect_time_scaler = m_settings.get_int(settings_pack::peer_turnover_interval); if (num_connections() >= m_settings.get_int(settings_pack::connections_limit) - * m_settings.get_float(settings_pack::peer_turnover_cutoff) + * m_settings.get_int(settings_pack::peer_turnover_cutoff) / 100 && !m_torrents.empty()) { // every 90 seconds, disconnect the worst peers @@ -3778,7 +3727,7 @@ TORRENT_ASSERT(i != m_torrents.end()); int peers_to_disconnect = (std::min)((std::max)( - int(i->second->num_peers() * m_settings.get_float(settings_pack::peer_turnover)), 1) + int(i->second->num_peers() * m_settings.get_int(settings_pack::peer_turnover) / 100), 1) , i->second->get_policy().num_connect_candidates()); i->second->disconnect_peers(peers_to_disconnect , error_code(errors::optimistic_disconnect, get_libtorrent_category())); @@ -3791,11 +3740,11 @@ , end(m_torrents.end()); i != end; ++i) { boost::shared_ptr<torrent> t = i->second; - if (t->num_peers() < t->max_connections() * m_settings.get_float(settings_pack::peer_turnover_cutoff)) + if (t->num_peers() < t->max_connections() * m_settings.get_int(settings_pack::peer_turnover_cutoff) / 100) continue; int peers_to_disconnect = (std::min)((std::max)(int(i->second->num_peers() - * m_settings.get_float(settings_pack::peer_turnover)), 1) + * m_settings.get_int(settings_pack::peer_turnover) / 100), 1) , i->second->get_policy().num_connect_candidates()); t->disconnect_peers(peers_to_disconnect , error_code(errors::optimistic_disconnect, get_libtorrent_category())); Modified: branches/libtorrent_aio_settings/src/settings_pack.cpp =================================================================== --- branches/libtorrent_aio_settings/src/settings_pack.cpp 2012-04-15 19:39:19 UTC (rev 6722) +++ branches/libtorrent_aio_settings/src/settings_pack.cpp 2012-04-15 21:58:41 UTC (rev 6723) @@ -65,14 +65,6 @@ insort_replace(m_ints, v); } - void settings_pack::set_float(int name, float val) - { - TORRENT_ASSERT((name & type_mask) == float_type_base); - if ((name & type_mask) != float_type_base) return; - std::pair<int, float> v(name, val); - insort_replace(m_floats, v); - } - void settings_pack::set_bool(int name, bool val) { TORRENT_ASSERT((name & type_mask) == bool_type_base); Modified: branches/libtorrent_aio_settings/src/torrent.cpp =================================================================== --- branches/libtorrent_aio_settings/src/torrent.cpp 2012-04-15 19:39:19 UTC (rev 6722) +++ branches/libtorrent_aio_settings/src/torrent.cpp 2012-04-15 21:58:41 UTC (rev 6723) @@ -7148,8 +7148,8 @@ ptime now = time_now(); - int finished_time = m_finished_time; - int download_time = int(m_active_time) - finished_time; + size_type finished_time = m_finished_time; + size_type download_time = int(m_active_time) - finished_time; // if we haven't yet met the seed limits, set the seed_ratio_not_met // flag. That will make this seed prioritized @@ -7157,9 +7157,9 @@ size_type downloaded = (std::max)(m_total_downloaded, m_torrent_file->total_size()); if (finished_time < s.get_int(settings_pack::seed_time_limit) && (download_time > 1 - && finished_time / float(download_time) < s.get_float(settings_pack::seed_time_ratio_limit)) + && finished_time * 100 / download_time < s.get_int(settings_pack::seed_time_ratio_limit)) && downloaded > 0 - && m_total_uploaded / float(downloaded) < s.get_float(settings_pack::share_ratio_limit)) + && m_total_uploaded * 100 / downloaded < s.get_int(settings_pack::share_ratio_limit)) ret |= seed_ratio_not_met; // if this torrent is running, and it was started less This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ar...@us...> - 2012-04-15 19:39:28
|
Revision: 6722 http://libtorrent.svn.sourceforge.net/libtorrent/?rev=6722&view=rev Author: arvidn Date: 2012-04-15 19:39:19 +0000 (Sun, 15 Apr 2012) Log Message: ----------- revamp session settings Modified Paths: -------------- branches/libtorrent_aio_settings/Jamfile branches/libtorrent_aio_settings/docs/manual.rst branches/libtorrent_aio_settings/include/libtorrent/Makefile.am branches/libtorrent_aio_settings/include/libtorrent/aux_/session_impl.hpp branches/libtorrent_aio_settings/include/libtorrent/block_cache.hpp branches/libtorrent_aio_settings/include/libtorrent/disk_buffer_pool.hpp branches/libtorrent_aio_settings/include/libtorrent/disk_io_thread.hpp branches/libtorrent_aio_settings/include/libtorrent/http_tracker_connection.hpp branches/libtorrent_aio_settings/include/libtorrent/session.hpp branches/libtorrent_aio_settings/include/libtorrent/session_settings.hpp branches/libtorrent_aio_settings/include/libtorrent/storage.hpp branches/libtorrent_aio_settings/include/libtorrent/torrent.hpp branches/libtorrent_aio_settings/include/libtorrent/torrent_info.hpp branches/libtorrent_aio_settings/include/libtorrent/utp_socket_manager.hpp branches/libtorrent_aio_settings/src/block_cache.cpp branches/libtorrent_aio_settings/src/bt_peer_connection.cpp branches/libtorrent_aio_settings/src/create_torrent.cpp branches/libtorrent_aio_settings/src/disk_buffer_pool.cpp branches/libtorrent_aio_settings/src/disk_io_thread.cpp branches/libtorrent_aio_settings/src/http_seed_connection.cpp branches/libtorrent_aio_settings/src/http_tracker_connection.cpp branches/libtorrent_aio_settings/src/metadata_transfer.cpp branches/libtorrent_aio_settings/src/peer_connection.cpp branches/libtorrent_aio_settings/src/policy.cpp branches/libtorrent_aio_settings/src/rss.cpp branches/libtorrent_aio_settings/src/session.cpp branches/libtorrent_aio_settings/src/session_impl.cpp branches/libtorrent_aio_settings/src/storage.cpp branches/libtorrent_aio_settings/src/torrent.cpp branches/libtorrent_aio_settings/src/torrent_info.cpp branches/libtorrent_aio_settings/src/udp_tracker_connection.cpp branches/libtorrent_aio_settings/src/ut_metadata.cpp branches/libtorrent_aio_settings/src/ut_pex.cpp branches/libtorrent_aio_settings/src/utp_socket_manager.cpp branches/libtorrent_aio_settings/src/web_connection_base.cpp branches/libtorrent_aio_settings/src/web_peer_connection.cpp branches/libtorrent_aio_settings/test/test_primitives.cpp Added Paths: ----------- branches/libtorrent_aio_settings/include/libtorrent/aux_/session_settings.hpp branches/libtorrent_aio_settings/include/libtorrent/settings_pack.hpp branches/libtorrent_aio_settings/src/settings_pack.cpp Modified: branches/libtorrent_aio_settings/Jamfile =================================================================== --- branches/libtorrent_aio_settings/Jamfile 2012-04-15 04:32:46 UTC (rev 6721) +++ branches/libtorrent_aio_settings/Jamfile 2012-04-15 19:39:19 UTC (rev 6722) @@ -506,6 +506,7 @@ session session_impl settings + settings_pack socket_io socket_type socks5_stream Modified: branches/libtorrent_aio_settings/docs/manual.rst =================================================================== --- branches/libtorrent_aio_settings/docs/manual.rst 2012-04-15 04:32:46 UTC (rev 6721) +++ branches/libtorrent_aio_settings/docs/manual.rst 2012-04-15 19:39:19 UTC (rev 6722) @@ -4478,11 +4478,6 @@ int send_buffer_watermark; int send_buffer_watermark_factor; - #ifndef TORRENT_NO_DEPRECATE - bool auto_upload_slots; - bool auto_upload_slots_rate_based; - #endif - enum choking_algorithm_t { fixed_slots_choker, @@ -4870,21 +4865,8 @@ higher can improve upload performance and disk throughput. Setting it too high may waste RAM and create a bias towards read jobs over write jobs. -``auto_upload_slots`` defaults to true. When true, if there is a global upload -limit set and the current upload rate is less than 90% of that, another upload -slot is opened. If the upload rate has been saturated for an extended period -of time, on upload slot is closed. The number of upload slots will never be -less than what has been set by ``session::set_max_uploads()``. To query the -current number of upload slots, see ``session_status::allowed_upload_slots``. - -When ``auto_upload_slots_rate_based`` is set, and ``auto_upload_slots`` is set, -the max upload slots setting is used as a minimum number of unchoked slots. -This algorithm is designed to prevent the peer from spreading its upload -capacity too thin, but still open more slots in order to utilize the full capacity. - ``choking_algorithm`` specifies which algorithm to use to determine which peers -to unchoke. This setting replaces the deprecated settings ``auto_upload_slots`` -and ``auto_upload_slots_rate_based``. +to unchoke. The options for choking algorithms are: @@ -4893,7 +4875,7 @@ * ``auto_expand_choker`` opens at least the number of slots as specified by ``session::set_max_uploads()`` but opens up more slots if the upload capacity - is not saturated. This unchoker will work just like the ``fixed_slot_choker`` + is not saturated. This unchoker will work just like the ``fixed_slots_choker`` if there's no global upload rate limit set. * ``rate_based_choker`` opens up unchoke slots based on the upload rate Modified: branches/libtorrent_aio_settings/include/libtorrent/Makefile.am =================================================================== --- branches/libtorrent_aio_settings/include/libtorrent/Makefile.am 2012-04-15 04:32:46 UTC (rev 6721) +++ branches/libtorrent_aio_settings/include/libtorrent/Makefile.am 2012-04-15 19:39:19 UTC (rev 6722) @@ -128,6 +128,7 @@ $(GEOIP_H) \ \ aux_/session_impl.hpp \ + aux_/internal_session_settings.hpp\ \ extensions/logger.hpp \ extensions/lt_trackers.hpp \ Modified: branches/libtorrent_aio_settings/include/libtorrent/aux_/session_impl.hpp =================================================================== --- branches/libtorrent_aio_settings/include/libtorrent/aux_/session_impl.hpp 2012-04-15 04:32:46 UTC (rev 6721) +++ branches/libtorrent_aio_settings/include/libtorrent/aux_/session_impl.hpp 2012-04-15 19:39:19 UTC (rev 6722) @@ -39,6 +39,7 @@ #include <list> #include "libtorrent/config.hpp" +#include "libtorrent/aux_/session_settings.hpp" #ifndef TORRENT_DISABLE_GEO_IP #ifdef WITH_SHIPPED_GEOIP_H @@ -155,7 +156,10 @@ namespace aux { struct session_impl; + struct session_settings; + void initialize_default_settings(aux::session_settings& s); + #if defined TORRENT_STATS && !defined __MACH__ struct vm_statistics_data_t { @@ -282,7 +286,12 @@ void close_connection(peer_connection* p, error_code const& ec); - void set_settings(session_settings const& s); +#ifndef TORRENT_NO_DEPRECATE + void set_settings(libtorrent::session_settings const& s); + libtorrent::session_settings deprecated_settings() const; +#endif + + void apply_settings_pack(settings_pack* pack); session_settings const& settings() const { return m_settings; } #ifndef TORRENT_DISABLE_DHT @@ -569,15 +578,32 @@ void disk_performance_warning(alert* a); + void update_peer_tos(); + void update_user_agent(); + void update_choking_algorithm(); + void update_connection_speed(); + void update_alert_queue_size(); + void upate_dht_upload_rate_limit(); + void update_network_threads(); + void update_cache_buffer_chunk_size(); + void update_report_web_seed_downloads(); + void reset_auto_manage_timer(); + void update_dht_announce_interval(); + void update_anonymous_mode(); + void update_rate_settings(); + void update_half_open(); + void update_local_download_rate(); + void update_local_upload_rate(); + void update_download_rate(); + void update_upload_rate(); void update_connections_limit(); - void update_unchoke_limit(); - void update_rate_settings(); + void update_dht_upload_rate_limit(); void on_lsd_peer(tcp::endpoint peer, sha1_hash const& ih); void setup_socket_buffers(socket_type& s); // the settings for the client - session_settings m_settings; + aux::session_settings m_settings; // this is a shared pool where policy_peer objects // are allocated. It's a pool since we're likely Added: branches/libtorrent_aio_settings/include/libtorrent/aux_/session_settings.hpp =================================================================== --- branches/libtorrent_aio_settings/include/libtorrent/aux_/session_settings.hpp (rev 0) +++ branches/libtorrent_aio_settings/include/libtorrent/aux_/session_settings.hpp 2012-04-15 19:39:19 UTC (rev 6722) @@ -0,0 +1,87 @@ +/* + +Copyright (c) 2012, Arvid Norberg +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: + + * Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in + the documentation and/or other materials provided with the distribution. + * Neither the name of the author nor the names of its + contributors may be used to endorse or promote products derived + from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE +LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +POSSIBILITY OF SUCH DAMAGE. + +*/ + +#ifndef TORRENT_AUX_SESSION_SETTINGS_HPP_INCLUDED +#define TORRENT_AUX_SESSION_SETTINGS_HPP_INCLUDED + +#include "libtorrent/version.hpp" +#include "libtorrent/config.hpp" +#include "libtorrent/settings_pack.hpp" +#include "libtorrent/assert.hpp" + +#include <string> + +namespace libtorrent { namespace aux +{ + struct session_settings; + + // defined in session_impl.cpp + void initialize_default_settings(session_settings& s); + +#define SET(type) \ + TORRENT_ASSERT((name & settings_pack::type_mask) == settings_pack:: type ## _type_base); \ + if ((name & settings_pack::type_mask) != settings_pack:: type ## _type_base) return; \ + m_ ## type ## s[name - settings_pack:: type ## _type_base] = value + +#define GET(type, default_val) \ + TORRENT_ASSERT((name & settings_pack::type_mask) == settings_pack:: type ## _type_base); \ + if ((name & settings_pack::type_mask) != settings_pack:: type ## _type_base) return default_val; \ + return m_ ## type ## s[name - settings_pack:: type ## _type_base] + + struct session_settings + { + friend class libtorrent::aux::session_impl; + void set_str(int name, std::string const& value) { SET(string); } + std::string const& get_str(int name) const { GET(string, m_strings[0]); } + void set_int(int name, int value) { SET(int); } + int get_int(int name) const { GET(int, 0); } + void set_bool(int name, bool value) { SET(bool); } + bool get_bool(int name) const { GET(bool, false); } + void set_float(int name, float value) { SET(float); } + float get_float(int name) const { GET(float, 0.f); } + + session_settings() { initialize_default_settings(*this); } + + private: + std::string m_strings[settings_pack::num_string_settings]; + int m_ints[settings_pack::num_int_settings]; + float m_floats[settings_pack::num_float_settings]; + bool m_bools[settings_pack::num_bool_settings]; + }; + +#undef GET +#undef SET + +} } + +#endif + Modified: branches/libtorrent_aio_settings/include/libtorrent/block_cache.hpp =================================================================== --- branches/libtorrent_aio_settings/include/libtorrent/block_cache.hpp 2012-04-15 04:32:46 UTC (rev 6721) +++ branches/libtorrent_aio_settings/include/libtorrent/block_cache.hpp 2012-04-15 19:39:19 UTC (rev 6722) @@ -58,6 +58,7 @@ struct cache_status; struct hash_thread; struct block_cache_reference; + namespace aux { struct session_settings; } struct partial_hash { @@ -368,7 +369,7 @@ int pinned_blocks() const { return m_pinned_blocks; } - void set_settings(session_settings const& sett); + void set_settings(aux::session_settings const& sett); private: Modified: branches/libtorrent_aio_settings/include/libtorrent/disk_buffer_pool.hpp =================================================================== --- branches/libtorrent_aio_settings/include/libtorrent/disk_buffer_pool.hpp 2012-04-15 04:32:46 UTC (rev 6721) +++ branches/libtorrent_aio_settings/include/libtorrent/disk_buffer_pool.hpp 2012-04-15 19:39:19 UTC (rev 6722) @@ -55,7 +55,7 @@ namespace libtorrent { - struct session_settings; + namespace aux { struct session_settings; } class alert; struct TORRENT_EXTRA_EXPORT disk_buffer_pool : boost::noncopyable @@ -90,7 +90,7 @@ boost::uint32_t num_to_evict(int num_needed = 0); bool exceeded_max_size() const { return m_exceeded_max_size; } - void set_settings(session_settings const& sett); + void set_settings(aux::session_settings const& sett); protected: Modified: branches/libtorrent_aio_settings/include/libtorrent/disk_io_thread.hpp =================================================================== --- branches/libtorrent_aio_settings/include/libtorrent/disk_io_thread.hpp 2012-04-15 04:32:46 UTC (rev 6721) +++ branches/libtorrent_aio_settings/include/libtorrent/disk_io_thread.hpp 2012-04-15 19:39:19 UTC (rev 6722) @@ -55,7 +55,7 @@ #ifndef TORRENT_DISABLE_POOL_ALLOCATOR #include <boost/pool/pool.hpp> #endif -#include "libtorrent/session_settings.hpp" +#include "libtorrent/aux_/session_settings.hpp" #include "libtorrent/thread.hpp" #include <boost/intrusive_ptr.hpp> // atomic_count @@ -341,7 +341,7 @@ , int block_size = 16 * 1024); ~disk_io_thread(); - void set_settings(session_settings const& sett); + void set_settings(settings_pack* sett); void reclaim_block(block_cache_reference ref); void abort(); void join(); @@ -444,7 +444,7 @@ bool m_abort; - session_settings m_settings; + aux::session_settings m_settings; // userdata pointer for the complete_job function, which // is posted to the network thread when jobs complete Modified: branches/libtorrent_aio_settings/include/libtorrent/http_tracker_connection.hpp =================================================================== --- branches/libtorrent_aio_settings/include/libtorrent/http_tracker_connection.hpp 2012-04-15 04:32:46 UTC (rev 6721) +++ branches/libtorrent_aio_settings/include/libtorrent/http_tracker_connection.hpp 2012-04-15 19:39:19 UTC (rev 6722) @@ -58,8 +58,7 @@ class entry; class http_parser; class connection_queue; - struct session_settings; - namespace aux { struct session_impl; } + namespace aux { struct session_impl; struct session_settings; } class TORRENT_EXTRA_EXPORT http_tracker_connection : public tracker_connection Modified: branches/libtorrent_aio_settings/include/libtorrent/session.hpp =================================================================== --- branches/libtorrent_aio_settings/include/libtorrent/session.hpp 2012-04-15 04:32:46 UTC (rev 6721) +++ branches/libtorrent_aio_settings/include/libtorrent/session.hpp 2012-04-15 19:39:19 UTC (rev 6722) @@ -60,6 +60,7 @@ #include "libtorrent/build_config.hpp" #include "libtorrent/storage.hpp" +#include "libtorrent/session_settings.hpp" #ifdef _MSC_VER # include <eh.h> @@ -84,8 +85,10 @@ class upnp; class alert; +#ifndef TORRENT_NO_DEPRECATE TORRENT_EXPORT session_settings min_memory_usage(); TORRENT_EXPORT session_settings high_performance_seed(); +#endif #ifndef TORRENT_CFG #error TORRENT_CFG is not defined! @@ -373,9 +376,17 @@ void remove_torrent(const torrent_handle& h, int options = none); - void set_settings(session_settings const& s); - session_settings settings() const; +#ifndef TORRENT_NO_DEPRECATE + // deprecated in aio-branch + TORRENT_DEPRECATED_PREFIX + void set_settings(session_settings const& s) TORRENT_DEPRECATED; + TORRENT_DEPRECATED_PREFIX + session_settings settings() const TORRENT_DEPRECATED; +#endif + void apply_settings(settings_pack const& s); + aux::session_settings get_settings() const; + void set_proxy(proxy_settings const& s); proxy_settings proxy() const; Modified: branches/libtorrent_aio_settings/include/libtorrent/session_settings.hpp =================================================================== --- branches/libtorrent_aio_settings/include/libtorrent/session_settings.hpp 2012-04-15 04:32:46 UTC (rev 6721) +++ branches/libtorrent_aio_settings/include/libtorrent/session_settings.hpp 2012-04-15 19:39:19 UTC (rev 6722) @@ -1,6 +1,6 @@ /* -Copyright (c) 2003, Arvid Norberg +Copyright (c) 2012, Arvid Norberg All rights reserved. Redistribution and use in source and binary forms, with or without @@ -35,9 +35,10 @@ #include "libtorrent/version.hpp" #include "libtorrent/config.hpp" -#include "libtorrent/version.hpp" #include <string> +#include <vector> +#include <utility> namespace libtorrent { @@ -92,6 +93,7 @@ bool proxy_peer_connections; }; +#ifndef TORRENT_NO_DEPRECATE struct TORRENT_EXPORT session_settings { session_settings(std::string const& user_agent_ = "libtorrent/" @@ -321,12 +323,6 @@ // 100. The default is 50. int send_buffer_watermark_factor; -#ifndef TORRENT_NO_DEPRECATE - // deprecated in 0.16 - bool auto_upload_slots; - bool auto_upload_slots_rate_based; -#endif - enum choking_algorithm_t { fixed_slots_choker, @@ -410,7 +406,8 @@ // outgoing connections will be bound to. This // is useful for users that have routers that // allow QoS settings based on local port. - std::pair<int, int> outgoing_ports; + int outgoing_port; + int num_outgoing_ports; // the TOS byte of all peer traffic (including // web seeds) is set to this value. The default @@ -973,6 +970,7 @@ // is 250 int tracker_backoff; }; +#endif #ifndef TORRENT_DISABLE_DHT struct dht_settings Added: branches/libtorrent_aio_settings/include/libtorrent/settings_pack.hpp =================================================================== --- branches/libtorrent_aio_settings/include/libtorrent/settings_pack.hpp (rev 0) +++ branches/libtorrent_aio_settings/include/libtorrent/settings_pack.hpp 2012-04-15 19:39:19 UTC (rev 6722) @@ -0,0 +1,317 @@ +/* + +Copyright (c) 2012, Arvid Norberg +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: + + * Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in + the documentation and/or other materials provided with the distribution. + * Neither the name of the author nor the names of its + contributors may be used to endorse or promote products derived + from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE +LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +POSSIBILITY OF SUCH DAMAGE. + +*/ + +#ifndef TORRENT_SETTINGS_PACK_HPP_INCLUDED +#define TORRENT_SETTINGS_PACK_HPP_INCLUDED + +namespace libtorrent +{ + namespace aux { struct session_impl; } + // #error add an API to query a settings_pack as well + // #error convert all float types into int-types and remove float + // #error maybe convert all bool types into int-types as well + struct settings_pack + { + friend struct aux::session_impl; + friend struct disk_io_thread; + + void set_str(int name, std::string val); + void set_int(int name, int val); + void set_float(int name, float val); + void set_bool(int name, bool val); + + enum type_bases + { + string_type_base = 0x10000000, + int_type_base = 0x20000000, + bool_type_base = 0x30000000, + float_type_base = 0x40000000, + type_mask = 0xf0000000, + index_mask = 0x0fffffff, + }; + + enum string_types + { + user_agent = string_type_base, + announce_ip, + mmap_cache, + + max_string_setting_internal, + num_string_settings = max_string_setting_internal - string_type_base + }; + + enum bool_types + { + allow_multiple_connections_per_ip = bool_type_base, + ignore_limits_on_local_network, + send_redundant_have, + lazy_bitfields, +#ifndef TRENT_DISABLE_DHT + use_dht_as_fallback, +#else + unused1, +#endif + upnp_ignore_nonrouters, + use_parole_mode, + use_read_cache, + dont_flush_write_cache, + explicit_read_cache, + coalesce_reads, + coalesce_writes, + auto_manage_prefer_seeds, + dont_count_slow_torrents, + close_redundant_connections, + prioritize_partial_pieces, + rate_limit_ip_overhead, + announce_to_all_trackers, + announce_to_all_tiers, + prefer_udp_trackers, + strict_super_seeding, +#ifndef TORRENT_DISABLE_MLOCK + lock_disk_cache, +#else + unused2, +#endif + optimize_hashing_for_speed, + disable_hash_checks, + allow_reordered_disk_operations, + allow_i2p_mixed, + drop_skipped_requests, + low_prio_disk, + volatile_read_cache, + guided_read_cache, + no_atime_storage, + incoming_starts_queued_torrents, + report_true_downloaded, + strict_end_game_mode, + broadcast_lsd, + enable_outgoing_utp, + enable_incoming_utp, + enable_outgoing_tcp, + enable_incoming_tcp, + ignore_resume_timestamps, + no_recheck_incomplete_resume, + anonymous_mode, + report_web_seed_downloads, + utp_dynamic_sock_buf, + rate_limit_utp, + announce_double_nat, + seeding_outgoing_connections, + no_connect_privileged_ports, + smooth_connects, + always_send_user_agent, + apply_ip_filter_to_trackers, + use_disk_read_ahead, + lock_files, + contiguous_recv_buffer, + + max_bool_setting_internal, + num_bool_settings = max_bool_setting_internal - bool_type_base + }; + + enum float_types + { + share_ratio_limit = float_type_base, + seed_time_ratio_limit, + peer_turnover, + peer_turnover_cutoff, + + max_float_setting_internal, + num_float_settings = max_float_setting_internal - float_type_base + }; + + enum int_types + { + tracker_completion_timeout = int_type_base, + tracker_receive_timeout, + stop_tracker_timeout, + tracker_maximum_response_length, + piece_timeout, + request_timeout, + request_queue_time, + max_allowed_in_request_queue, + max_out_request_queue, + whole_pieces_threshold, + peer_timeout, + urlseed_timeout, + urlseed_pipeline_size, + urlseed_wait_retry, + file_pool_size, + max_failcount, + min_reconnect_time, + peer_connect_timeout, + connection_speed, + inactivity_timeout, + unchoke_interval, + optimistic_unchoke_interval, + num_want, + initial_picker_threshold, + allowed_fast_set_size, + suggest_mode, + max_queued_disk_bytes, + handshake_timeout, + send_buffer_low_watermark, + send_buffer_watermark, + send_buffer_watermark_factor, + choking_algorithm, + seed_choking_algorithm, + cache_size, + cache_buffer_chunk_size, + cache_expiry, + explicit_cache_interval, + disk_io_write_mode, + disk_io_read_mode, + outgoing_port, + num_outgoing_ports, + peer_tos, + active_downloads, + active_seeds, + active_dht_limit, + active_tracker_limit, + active_lsd_limit, + active_limit, + auto_manage_interval, + seed_time_limit, + peer_turnover_interval, + auto_scrape_interval, + auto_scrape_min_interval, + max_peerlist_size, + max_paused_peerlist_size, + min_announce_interval, + auto_manage_startup, + seeding_piece_quota, + max_sparse_regions, + max_rejects, + recv_socket_buffer_size, + send_socket_buffer_size, + file_checks_delay_per_block, + disk_cache_algorithm, + read_cache_line_size, + write_cache_line_size, + optimistic_disk_retry, + max_suggest_pieces, + local_service_announce_interval, + dht_announce_interval, + udp_tracker_token_expiry, + default_cache_min_age, + num_optimistic_unchoke_slots, + default_est_reciprocation_rate, + increase_est_reciprocation_rate, + decrease_est_reciprocation_rate, + max_pex_peers, + tick_interval, + share_mode_target, + upload_rate_limit, + download_rate_limit, + local_upload_rate_limit, + local_download_rate_limit, + dht_upload_rate_limit, + unchoke_slots_limit, + half_open_limit, + connections_limit, + utp_target_delay, + utp_gain_factor, + utp_min_timeout, + utp_syn_resends, + utp_fin_resends, + utp_num_resends, + utp_connect_timeout, + utp_delayed_ack, + utp_loss_multiplier, + mixed_mode_algorithm, + listen_queue_size, + torrent_connect_boost, + alert_queue_size, + max_metadata_size, + read_job_every, + hashing_threads, + checking_mem_usage, + predictive_piece_announce, + aio_threads, + aio_max, + network_threads, + ssl_listen, + tracker_backoff, + + max_int_setting_internal, + num_int_settings = max_int_setting_internal - int_type_base + }; + + enum { no_piece_suggestions = 0, suggest_read_cache = 1 }; + + enum choking_algorithm_t + { + fixed_slots_choker, + auto_expand_choker, + rate_based_choker, + bittyrant_choker + }; + + enum seed_choking_algorithm_t + { + round_robin, + fastest_upload, + anti_leech + }; + + enum io_buffer_mode_t + { + enable_os_cache = 0, + disable_os_cache_for_aligned_files = 1, + disable_os_cache = 2 + }; + + enum disk_cache_algo_t + { lru, largest_contiguous, avoid_readback }; + + enum bandwidth_mixed_algo_t + { + // disables the mixed mode bandwidth balancing + prefer_tcp = 0, + + // does not throttle uTP, throttles TCP to the same proportion + // of throughput as there are TCP connections + peer_proportional = 1 + + }; + + private: + + std::vector<std::pair<int, std::string> > m_strings; + std::vector<std::pair<int, int> > m_ints; + std::vector<std::pair<int, float> > m_floats; + std::vector<std::pair<int, bool> > m_bools; + }; +} + +#endif + Modified: branches/libtorrent_aio_settings/include/libtorrent/storage.hpp =================================================================== --- branches/libtorrent_aio_settings/include/libtorrent/storage.hpp 2012-04-15 04:32:46 UTC (rev 6721) +++ branches/libtorrent_aio_settings/include/libtorrent/storage.hpp 2012-04-15 19:39:19 UTC (rev 6722) @@ -75,7 +75,7 @@ struct disk_buffer_pool; struct cache_status; struct aiocb_pool; - struct session_settings; + namespace aux { struct session_settings; } struct cached_piece_entry; void complete_job(void* user, aiocb_pool* pool, disk_io_job* j); @@ -146,7 +146,7 @@ disk_buffer_pool* disk_pool() { return m_disk_pool; } aiocb_pool* aiocbs() { return m_aiocb_pool; } - session_settings const& settings() const { return *m_settings; } + aux::session_settings const& settings() const { return *m_settings; } virtual ~storage_interface() {} @@ -154,7 +154,7 @@ disk_buffer_pool* m_disk_pool; aiocb_pool* m_aiocb_pool; // initialized in disk_io_thread::perform_async_job - session_settings* m_settings; + aux::session_settings* m_settings; }; class TORRENT_EXPORT default_storage : public storage_interface, boost::noncopyable Modified: branches/libtorrent_aio_settings/include/libtorrent/torrent.hpp =================================================================== --- branches/libtorrent_aio_settings/include/libtorrent/torrent.hpp 2012-04-15 04:32:46 UTC (rev 6721) +++ branches/libtorrent_aio_settings/include/libtorrent/torrent.hpp 2012-04-15 19:39:19 UTC (rev 6722) @@ -176,7 +176,7 @@ bool upload_mode() const { return m_upload_mode || m_graceful_pause_mode; } bool is_upload_only() const { return is_finished() || upload_mode(); } - int seed_rank(session_settings const& s) const; + int seed_rank(aux::session_settings const& s) const; enum flags_t { overwrite_existing = 1 }; void add_piece(int piece, char const* data, int flags = 0); @@ -211,8 +211,7 @@ torrent_status::state_t state() const { return (torrent_status::state_t)m_state; } void set_state(torrent_status::state_t s); - session_settings const& settings() const; - + aux::session_settings const& settings() const; aux::session_impl& session() { return m_ses; } void set_sequential_download(bool sd); @@ -338,7 +337,7 @@ bool resolving_countries() const { - return m_resolve_countries && !m_ses.settings().anonymous_mode; + return m_resolve_countries && !m_ses.settings().get_bool(settings_pack::anonymous_mode); } #endif Modified: branches/libtorrent_aio_settings/include/libtorrent/torrent_info.hpp =================================================================== --- branches/libtorrent_aio_settings/include/libtorrent/torrent_info.hpp 2012-04-15 04:32:46 UTC (rev 6721) +++ branches/libtorrent_aio_settings/include/libtorrent/torrent_info.hpp 2012-04-15 19:39:19 UTC (rev 6722) @@ -65,6 +65,7 @@ class peer_connection; struct session_settings; + namespace aux { struct session_settings; } // exposed for the unit test TORRENT_EXPORT void sanitize_append_path_element(std::string& path, char const* element, int element_len); @@ -148,7 +149,7 @@ min_announce = min_time(); } - void failed(session_settings const& sett, int retry_interval = 0); + void failed(aux::session_settings const& sett, int retry_interval = 0); bool will_announce(ptime now) const { Modified: branches/libtorrent_aio_settings/include/libtorrent/utp_socket_manager.hpp =================================================================== --- branches/libtorrent_aio_settings/include/libtorrent/utp_socket_manager.hpp 2012-04-15 04:32:46 UTC (rev 6721) +++ branches/libtorrent_aio_settings/include/libtorrent/utp_socket_manager.hpp 2012-04-15 19:39:19 UTC (rev 6722) @@ -38,6 +38,7 @@ #include "libtorrent/socket_type.hpp" #include "libtorrent/session_status.hpp" #include "libtorrent/enum_net.hpp" +#include "libtorrent/aux_/session_settings.hpp" namespace libtorrent { @@ -49,7 +50,7 @@ struct utp_socket_manager { - utp_socket_manager(session_settings const& sett, udp_socket& s, incoming_utp_callback_t cb); + utp_socket_manager(aux::session_settings const& sett, udp_socket& s, incoming_utp_callback_t cb); ~utp_socket_manager(); void get_status(utp_status& s) const; @@ -70,16 +71,16 @@ void remove_socket(boost::uint16_t id); utp_socket_impl* new_utp_socket(utp_stream* str); - int gain_factor() const { return m_sett.utp_gain_factor; } - int target_delay() const { return m_sett.utp_target_delay * 1000; } - int syn_resends() const { return m_sett.utp_syn_resends; } - int fin_resends() const { return m_sett.utp_fin_resends; } - int num_resends() const { return m_sett.utp_num_resends; } - int connect_timeout() const { return m_sett.utp_connect_timeout; } - int delayed_ack() const { return m_sett.utp_delayed_ack; } - int min_timeout() const { return m_sett.utp_min_timeout; } - int loss_multiplier() const { return m_sett.utp_loss_multiplier; } - bool allow_dynamic_sock_buf() const { return m_sett.utp_dynamic_sock_buf; } + int gain_factor() const { return m_sett.get_int(settings_pack::utp_gain_factor); } + int target_delay() const { return m_sett.get_int(settings_pack::utp_target_delay) * 1000; } + int syn_resends() const { return m_sett.get_int(settings_pack::utp_syn_resends); } + int fin_resends() const { return m_sett.get_int(settings_pack::utp_fin_resends); } + int num_resends() const { return m_sett.get_int(settings_pack::utp_num_resends); } + int connect_timeout() const { return m_sett.get_int(settings_pack::utp_connect_timeout); } + int delayed_ack() const { return m_sett.get_int(settings_pack::utp_delayed_ack); } + int min_timeout() const { return m_sett.get_int(settings_pack::utp_min_timeout); } + int loss_multiplier() const { return m_sett.get_int(settings_pack::utp_loss_multiplier); } + bool allow_dynamic_sock_buf() const { return m_sett.get_bool(settings_pack::utp_dynamic_sock_buf); } void mtu_for_dest(address const& addr, int& link_mtu, int& utp_mtu); void set_sock_buf(int size); @@ -98,7 +99,7 @@ int m_new_connection; - session_settings const& m_sett; + aux::session_settings const& m_sett; // this is a copy of the routing table, used // to initialize MTU sizes of uTP sockets Modified: branches/libtorrent_aio_settings/src/block_cache.cpp =================================================================== --- branches/libtorrent_aio_settings/src/block_cache.cpp 2012-04-15 04:32:46 UTC (rev 6721) +++ branches/libtorrent_aio_settings/src/block_cache.cpp 2012-04-15 19:39:19 UTC (rev 6722) @@ -1371,13 +1371,14 @@ ret->arc_mfu_ghost_size = m_lru[cached_piece_entry::read_lru2_ghost].size(); } -void block_cache::set_settings(session_settings const& sett) +void block_cache::set_settings(aux::session_settings const& sett) { // the ghost size is the number of pieces to keep track of // after they are evicted. Since cache_size is blocks, the // assumption is that there are about 128 blocks per piece, // and there are two ghost lists, so divide by 2. - m_ghost_size = (std::max)(8, sett.cache_size / (std::max)(sett.read_cache_line_size, 4) / 2); + m_ghost_size = (std::max)(8, sett.get_int(settings_pack::cache_size) + / (std::max)(sett.get_int(settings_pack::read_cache_line_size), 4) / 2); disk_buffer_pool::set_settings(sett); } Modified: branches/libtorrent_aio_settings/src/bt_peer_connection.cpp =================================================================== --- branches/libtorrent_aio_settings/src/bt_peer_connection.cpp 2012-04-15 04:32:46 UTC (rev 6721) +++ branches/libtorrent_aio_settings/src/bt_peer_connection.cpp 2012-04-15 19:39:19 UTC (rev 6722) @@ -1126,7 +1126,7 @@ } TORRENT_ASSERT(!has_disk_receive_buffer()); - if (!m_ses.m_settings.contiguous_recv_buffer) + if (!m_ses.settings().get_bool(settings_pack::contiguous_recv_buffer)) { if (!allocate_disk_receive_buffer(packet_size() - 13 - list_size)) { @@ -1148,7 +1148,7 @@ return; } - if (!m_ses.m_settings.contiguous_recv_buffer) + if (!m_ses.settings().get_bool(settings_pack::contiguous_recv_buffer)) { if (!allocate_disk_receive_buffer(packet_size() - 9)) { @@ -1158,7 +1158,7 @@ } } } - TORRENT_ASSERT(m_ses.m_settings.contiguous_recv_buffer || has_disk_receive_buffer() || packet_size() == 9); + TORRENT_ASSERT(m_ses.settings().get_bool(settings_pack::contiguous_recv_buffer) || has_disk_receive_buffer() || packet_size() == 9); // classify the received data as protocol chatter // or data payload for the statistics int piece_bytes = 0; @@ -1224,7 +1224,7 @@ if (is_disconnecting()) return; } - TORRENT_ASSERT(m_ses.m_settings.contiguous_recv_buffer || has_disk_receive_buffer() || packet_size() == header_size); + TORRENT_ASSERT(m_ses.settings().get_bool(settings_pack::contiguous_recv_buffer) || has_disk_receive_buffer() || packet_size() == header_size); incoming_piece_fragment(piece_bytes); if (!packet_finished()) return; @@ -1851,7 +1851,7 @@ // if we're finished and this peer is uploading only // disconnect it if (t->is_finished() && upload_only() - && t->settings().close_redundant_connections + && m_ses.settings().get_bool(settings_pack::close_redundant_connections) && !t->share_mode()) disconnect(errors::upload_upload_connection); } @@ -2059,7 +2059,7 @@ int num_lazy_pieces = 0; int lazy_piece = 0; - if (t->is_seed() && m_ses.settings().lazy_bitfields + if (t->is_seed() && m_ses.settings().get_bool(settings_pack::lazy_bitfields) #ifndef TORRENT_DISABLE_ENCRYPTION && !m_encrypted #endif @@ -2165,17 +2165,17 @@ // only send the port in case we bade the connection // on incoming connections the other end already knows // our listen port - if (!m_ses.m_settings.anonymous_mode) + if (!m_ses.settings().get_bool(settings_pack::anonymous_mode)) { if (is_outgoing()) handshake["p"] = m_ses.listen_port(); - handshake["v"] = m_ses.settings().user_agent; + handshake["v"] = m_ses.settings().get_str(settings_pack::user_agent); } std::string remote_address; std::back_insert_iterator<std::string> out(remote_address); detail::write_address(remote().address(), out); handshake["yourip"] = remote_address; - handshake["reqq"] = m_ses.settings().max_allowed_in_request_queue; + handshake["reqq"] = m_ses.settings().get_int(settings_pack::max_allowed_in_request_queue); boost::shared_ptr<torrent> t = associated_torrent().lock(); TORRENT_ASSERT(t); @@ -2200,7 +2200,7 @@ if (t->is_upload_only() && !t->share_mode() && !t->super_seeding() - && (!m_ses.settings().lazy_bitfields + && (!m_ses.settings().get_bool(settings_pack::lazy_bitfields) #ifndef TORRENT_DISABLE_ENCRYPTION || m_encrypted #endif @@ -2210,7 +2210,7 @@ if (t->share_mode()) handshake["share_mode"] = 1; - if (!m_ses.m_settings.anonymous_mode) + if (!m_ses.m_settings.get_bool(settings_pack::anonymous_mode)) { tcp::endpoint ep = m_ses.get_ipv6_interface(); if (!is_any(ep.address())) @@ -3204,7 +3204,7 @@ std::copy(recv_buffer.begin, recv_buffer.begin + 20, (char*)pid.begin()); set_pid(pid); - if (t->settings().allow_multiple_connections_per_ip) + if (t->settings().get_bool(settings_pack::allow_multiple_connections_per_ip)) { // now, let's see if this connection should be closed policy& p = t->get_policy(); Modified: branches/libtorrent_aio_settings/src/create_torrent.cpp =================================================================== --- branches/libtorrent_aio_settings/src/create_torrent.cpp 2012-04-15 04:32:46 UTC (rev 6721) +++ branches/libtorrent_aio_settings/src/create_torrent.cpp 2012-04-15 19:39:19 UTC (rev 6722) @@ -188,9 +188,9 @@ dummy, (file_storage*)&t.files(), 0, p, disk_thread, default_storage_constructor , storage_mode_sparse, std::vector<boost::uint8_t>()); - session_settings sett; - sett.cache_size = 0; - sett.hashing_threads = 2; + settings_pack* sett = new settings_pack; + sett->set_int(settings_pack::cache_size, 0); + sett->set_int(settings_pack::hashing_threads, 2); disk_thread.set_settings(sett); Modified: branches/libtorrent_aio_settings/src/disk_buffer_pool.cpp =================================================================== --- branches/libtorrent_aio_settings/src/disk_buffer_pool.cpp 2012-04-15 04:32:46 UTC (rev 6721) +++ branches/libtorrent_aio_settings/src/disk_buffer_pool.cpp 2012-04-15 19:39:19 UTC (rev 6722) @@ -34,7 +34,7 @@ #include "libtorrent/disk_buffer_pool.hpp" #include "libtorrent/assert.hpp" #include "libtorrent/allocator.hpp" -#include "libtorrent/session_settings.hpp" +#include "libtorrent/aux_/session_settings.hpp" #include "libtorrent/io_service.hpp" #include "libtorrent/alert.hpp" #include "libtorrent/alert_types.hpp" @@ -321,14 +321,14 @@ free_buffer_impl(buf, l); } - void disk_buffer_pool::set_settings(session_settings const& sett) + void disk_buffer_pool::set_settings(aux::session_settings const& sett) { mutex::scoped_lock l(m_pool_mutex); // 0 cache_buffer_chunk_size means 'automatic' (i.e. // proportional to the total disk cache size) - m_cache_buffer_chunk_size = sett.cache_buffer_chunk_size; - m_lock_disk_cache = sett.lock_disk_cache; + m_cache_buffer_chunk_size = sett.get_int(settings_pack::cache_buffer_chunk_size); + m_lock_disk_cache = sett.get_bool(settings_pack::lock_disk_cache); // if we've already allocated an mmap, we can't change // anything unless there are no allocations in use @@ -336,10 +336,10 @@ // only allow changing size if we're not using mmapped // cache, or if we're just about to turn it off - if (m_cache_pool == 0 || sett.mmap_cache.empty()) + if (m_cache_pool == 0 || sett.get_str(settings_pack::mmap_cache).empty()) { - m_max_use = sett.cache_size; - m_low_watermark = m_max_use - (std::max)(16, sett.max_queued_disk_bytes / 0x4000); + m_max_use = sett.get_int(settings_pack::cache_size); + m_low_watermark = m_max_use - (std::max)(16, sett.get_int(settings_pack::max_queued_disk_bytes) / 0x4000); if (m_low_watermark < 0) m_low_watermark = 0; if (m_in_use >= m_max_use) m_exceeded_max_size = true; } @@ -350,7 +350,7 @@ #if TORRENT_HAVE_MMAP // #error support resizing the map - if (m_cache_pool && sett.mmap_cache.empty()) + if (m_cache_pool && sett.get_str(settings_pack::mmap_cache).empty()) { TORRENT_ASSERT(m_in_use == 0); munmap(m_cache_pool, boost::uint64_t(m_max_use) * 0x4000); @@ -362,14 +362,14 @@ m_cache_fd = -1; std::vector<int>().swap(m_free_list); } - else if (m_cache_pool == 0 && !sett.mmap_cache.empty()) + else if (m_cache_pool == 0 && !sett.get_str(settings_pack::mmap_cache).empty()) { // O_TRUNC here is because we don't actually care about what's // in the file now, there's no need to ever read that into RAM #ifndef O_EXLOCK #define O_EXLOCK 0 #endif - m_cache_fd = open(sett.mmap_cache.c_str(), O_RDWR | O_CREAT | O_EXLOCK | O_TRUNC, 0700); + m_cache_fd = open(sett.get_str(settings_pack::mmap_cache).c_str(), O_RDWR | O_CREAT | O_EXLOCK | O_TRUNC, 0700); if (m_cache_fd < 0 && m_post_alert) { error_code ec(errno, boost::system::get_posix_category()); Modified: branches/libtorrent_aio_settings/src/disk_io_thread.cpp =================================================================== --- branches/libtorrent_aio_settings/src/disk_io_thread.cpp 2012-04-15 04:32:46 UTC (rev 6721) +++ branches/libtorrent_aio_settings/src/disk_io_thread.cpp 2012-04-15 19:39:19 UTC (rev 6722) @@ -48,6 +48,7 @@ #include "libtorrent/disk_buffer_pool.hpp" #include "libtorrent/disk_io_job.hpp" #include "libtorrent/alert_types.hpp" +#include "libtorrent/aux_/session_impl.hpp" #if TORRENT_USE_AIO_SIGNALFD #include <sys/signalfd.h> @@ -509,10 +510,11 @@ add_job(j, true); } - void disk_io_thread::set_settings(session_settings const& sett) + // disk_io_thread takes over ownership of the settings_pack + void disk_io_thread::set_settings(settings_pack* pack) { disk_io_job* j = m_aiocb_pool.allocate_job(disk_io_job::update_settings); - j->buffer = (char*)new session_settings(sett); + j->buffer = (char*)pack; // this will be deleted in the disk thread add_job(j); } @@ -703,7 +705,8 @@ int elevator_direction = 0; #if TORRENT_USE_SYNCIO - elevator_direction = m_settings.allow_reordered_disk_operations ? m_elevator_direction : 0; + elevator_direction = m_settings.get_bool(settings_pack::allow_reordered_disk_operations) + ? m_elevator_direction : 0; #endif int block_size = m_disk_cache.block_size(); @@ -950,9 +953,11 @@ list_iterator range = m_disk_cache.write_lru_pieces(); - TORRENT_ASSERT(m_settings.disk_cache_algorithm == session_settings::avoid_readback); + TORRENT_ASSERT(m_settings.get_int(settings_pack::disk_cache_algorithm) + == settings_pack::avoid_readback); - if (m_settings.disk_cache_algorithm == session_settings::largest_contiguous) + if (m_settings.get_int(settings_pack::disk_cache_algorithm) + == settings_pack::largest_contiguous) { for (list_iterator p = range; p.get() && num > 0; p.next()) { @@ -961,10 +966,11 @@ // prefer contiguous blocks. If we won't find any, we'll // start over but actually flushing single blocks - num -= try_flush_contiguous(e, m_settings.write_cache_line_size, num); + num -= try_flush_contiguous(e, m_settings.get_int(settings_pack::write_cache_line_size), num); } } - else if (m_settings.disk_cache_algorithm == session_settings::avoid_readback) + else if (m_settings.get_int(settings_pack::disk_cache_algorithm) + == settings_pack::avoid_readback) { for (list_iterator p = range; p.get() && num > 0; p.next()) { @@ -993,10 +999,10 @@ { DLOG(stderr, "[%p] flush_expired_write_blocks\n", this); - TORRENT_ASSERT(m_settings.disk_cache_algorithm == session_settings::avoid_readback); - + TORRENT_ASSERT(m_settings.get_int(settings_pack::disk_cache_algorithm) + == settings_pack::avoid_readback); ptime now = time_now(); - time_duration expiration_limit = seconds(m_settings.cache_expiry); + time_duration expiration_limit = seconds(m_settings.get_int(settings_pack::cache_expiry)); #ifdef TORRENT_DEBUG ptime timeout = min_time(); @@ -1169,7 +1175,7 @@ // this logic should be changed to apply to aiocb_t objects instead of disk_io_job, and once // sorted, the first X aiocb_t object should have the hint_read called on them. That way the // number of read-ahead-bytes is limited - if (m_settings.use_disk_read_ahead) + if (m_settings.get_bool(settings_pack::use_disk_read_ahead)) { j->storage->get_storage_impl()->hint_read(j->piece, j->d.io.offset, j->d.io.buffer_size); } @@ -1177,7 +1183,7 @@ int block_size = m_disk_cache.block_size(); - if (m_settings.use_read_cache) + if (m_settings.get_bool(settings_pack::use_read_cache)) { int ret = m_disk_cache.try_read(j); if (ret >= 0) @@ -1193,14 +1199,14 @@ } // cache the piece, unless we're using an explicit cache - if (!m_settings.explicit_read_cache) + if (!m_settings.get_bool(settings_pack::explicit_read_cache)) { cached_piece_entry* p = m_disk_cache.allocate_piece(j, cached_piece_entry::read_lru1); if (p) { int start_block = j->d.io.offset / block_size; int end_block = (std::min)(int(p->blocks_in_piece) - , start_block + m_settings.read_cache_line_size); + , start_block + m_settings.get_int(settings_pack::read_cache_line_size)); // this will also add the job to the pending job list in this piece // unless it fails and returns -1 int ret = m_disk_cache.allocate_pending(p, start_block, end_block, j, 0, true); @@ -1286,7 +1292,8 @@ int elevator_direction = 0; #if TORRENT_USE_SYNCIO - elevator_direction = m_settings.allow_reordered_disk_operations ? m_elevator_direction : 0; + elevator_direction = m_settings.get_bool(settings_pack::allow_reordered_disk_operations) + ? m_elevator_direction : 0; #endif m_num_to_issue += append_aios(m_to_issue, m_to_issue_end, aios, elevator_direction, this); if (m_num_to_issue > m_peak_num_to_issue) m_peak_num_to_issue = m_num_to_issue; @@ -1305,7 +1312,7 @@ TORRENT_ASSERT(j->d.io.buffer_size <= m_disk_cache.block_size()); int block_size = m_disk_cache.block_size(); - if (m_settings.cache_size > 0) + if (m_settings.get_int(settings_pack::cache_size) > 0) { cached_piece_entry* pe = m_disk_cache.add_dirty_block(j); @@ -1317,7 +1324,7 @@ return disk_operation_failed; } - if (pe->hash == 0 && !m_settings.disable_hash_checks) + if (pe->hash == 0 && !m_settings.get_bool(settings_pack::disable_hash_checks)) { pe->hash = new partial_hash; m_disk_cache.update_cache_state(pe); @@ -1326,13 +1333,14 @@ // flushes the piece to disk in case // it satisfies the condition for a write // piece to be flushed - if (m_settings.disk_cache_algorithm == session_settings::avoid_readback) + if (m_settings.get_int(settings_pack::disk_cache_algorithm) + == settings_pack::avoid_readback) { - try_flush_hashed(pe, m_settings.write_cache_line_size); + try_flush_hashed(pe, m_settings.get_int(settings_pack::write_cache_line_size)); } else { - try_flush_contiguous(pe, m_settings.write_cache_line_size); + try_flush_contiguous(pe, m_settings.get_int(settings_pack::write_cache_line_size)); } // if we have more blocks in the cache than allowed by @@ -1342,11 +1350,11 @@ // async. int num_pending_write_blocks = (m_pending_buffer_size + block_size - 1) / block_size; int current_size = m_disk_cache.in_use(); - if (m_settings.cache_size <= current_size - num_pending_write_blocks) + if (m_settings.get_int(settings_pack::cache_size) <= current_size - num_pending_write_blocks) { - int left = current_size - m_settings.cache_size; + int left = current_size - m_settings.get_int(settings_pack::cache_size); left = m_disk_cache.try_evict_blocks(left, 1); - if (left > 0 && !m_settings.dont_flush_write_cache) + if (left > 0 && !m_settings.get_bool(settings_pack::dont_flush_write_cache)) try_flush_write_blocks(left); } @@ -1397,7 +1405,8 @@ int elevator_direction = 0; #if TORRENT_USE_SYNCIO - elevator_direction = m_settings.allow_reordered_disk_operations ? m_elevator_direction : 0; + elevator_direction = m_settings.get_bool(settings_pack::allow_reordered_disk_operations) + ? m_elevator_direction : 0; #endif m_num_to_issue += append_aios(m_to_issue, m_to_issue_end, aios, elevator_direction, this); if (m_num_to_issue > m_peak_num_to_issue) m_peak_num_to_issue = m_num_to_issue; @@ -1418,7 +1427,7 @@ int ret = defer_handler; bool job_added = false; - if (m_settings.disable_hash_checks) + if (m_settings.get_bool(settings_pack::disable_hash_checks)) { DLOG(stderr, "[%p] do_hash: hash checking turned off, returning piece: %d\n" , this, int(pe ? pe->piece : -1)); @@ -1813,60 +1822,89 @@ int disk_io_thread::do_update_settings(disk_io_job* j) { TORRENT_ASSERT(j->buffer); - session_settings* s = ((session_settings*)j->buffer); - TORRENT_ASSERT(s->cache_size >= 0); - TORRENT_ASSERT(s->cache_expiry > 0); + settings_pack* s = ((settings_pack*)j->buffer); int block_size = m_disk_cache.block_size(); + for (std::vector<std::pair<int, bool> >::iterator i = s->m_bools.begin() + , end(s->m_bools.end()); i != end; ++i) + { + switch (i->first) + { #if defined TORRENT_WINDOWS - if (m_settings.low_prio_disk != s->low_prio_disk) - { - m_file_pool.set_low_prio_io(s->low_prio_disk); - // we need to close all files, since the prio - // only takes affect when files are opened - m_file_pool.release(0); - } + case settings_pack::low_prio_disk: + m_file_pool.set_low_prio_io(i->second); + // we need to close all files, since the prio + // only takes affect when files are opened + m_file_pool.release(0); + break; #endif - if (m_settings.hashing_threads != s->hashing_threads) - m_hash_thread.set_num_threads(s->hashing_threads); + } + m_settings.set_bool(i->first, i->second); + } + + for (std::vector<std::pair<int, int> >::iterator i = s->m_ints.begin() + , end(s->m_ints.end()); i != end; ++i) + { + switch (i->first) + { + case settings_pack::hashing_threads: + m_hash_thread.set_num_threads(i->second); + break; + #if TORRENT_USE_AIOINIT - if (m_settings.aio_threads != s->aio_threads - || m_settings.aio_max != s->aio_max) - { - aioinit a; - memset(&a, 0, sizeof(a)); - a.aio_threads = s->aio_threads; - a.aio_num = s->aio_max; - aio_init(&a); - } + case settings_pack::aio_threads: + case settings_pack::aio_max: + aioinit a; + memset(&a, 0, sizeof(a)); + a.aio_threads = s->aio_threads; + a.aio_num = s->aio_max; + aio_init(&a); + break; #endif - #if TORRENT_USE_SYNCIO - if (m_settings.aio_threads != s->aio_threads) - m_worker_thread.set_num_threads(s->aio_threads); + case settings_pack::aio_threads: + m_worker_thread.set_num_threads(i->second); + break; #endif + case settings_pack::file_pool_size: + m_file_pool.resize(i->second); + break; + } - m_settings = *s; + m_settings.set_int(i->first, i->second); + } + + for (std::vector<std::pair<int, std::string> >::iterator i = s->m_strings.begin() + , end(s->m_strings.end()); i != end; ++i) + { + m_settings.set_str(i->first, i->second); + } + + for (std::vector<std::pair<int, float> >::iterator i = s->m_floats.begin() + , end(s->m_floats.end()); i != end; ++i) + { + m_settings.set_float(i->first, i->second); + } + delete s; - m_file_pool.resize(m_settings.file_pool_size); #if defined __APPLE__ && defined __MACH__ && MAC_OS_X_VERSION_MIN_REQUIRED >= 1050 setiopolicy_np(IOPOL_TYPE_DISK, IOPOL_SCOPE_THREAD - , m_settings.low_prio_disk ? IOPOL_THROTTLE : IOPOL_DEFAULT); + , m_settings.get_bool(settings_pack::low_prio_disk) ? IOPOL_THROTTLE : IOPOL_DEFAULT); #elif defined IOPRIO_WHO_PROCESS syscall(ioprio_set, IOPRIO_WHO_PROCESS, getpid()); #endif - if (m_settings.cache_size == -1) + if (m_settings.get_int(settings_pack::cache_size) == -1) { // the cache size is set to automatic. Make it // depend on the amount of physical RAM // if we don't know how much RAM we have, just set the // cache size to 16 MiB (1024 blocks) if (m_physical_ram == 0) - m_settings.cache_size = 1024; + m_settings.set_int(settings_pack::cache_size, 1024); else - m_settings.cache_size = m_physical_ram / 8 / block_size; + m_settings.set_int(settings_pack::cache_size, m_physical_ram / 8 / block_size); } m_disk_cache.set_settings(m_settings); @@ -1875,8 +1913,8 @@ // async. int num_pending_write_blocks = (m_pending_buffer_size + block_size - 1) / block_size; int current_size = m_disk_cache.in_use(); - if (current_size - num_pending_write_blocks > m_settings.cache_size) - m_disk_cache.try_evict_blocks(current_size - m_settings.cache_size, 0); + if (current_size - num_pending_write_blocks > m_settings.get_int(settings_pack::cache_size)) + m_disk_cache.try_evict_blocks(current_size - m_settings.get_int(settings_pack::cache_size), 0); return 0; } Modified: branches/libtorrent_aio_settings/src/http_seed_connection.cpp =================================================================== --- branches/libtorrent_aio_settings/src/http_seed_connection.cpp 2012-04-15 04:32:46 UTC (rev 6721) +++ branches/libtorrent_aio_settings/src/http_seed_connection.cpp 2012-04-15 19:39:19 UTC (rev 6722) @@ -70,7 +70,7 @@ { INVARIANT_CHECK; - if (!ses.settings().report_web_seed_downloads) + if (!ses.settings().get_bool(settings_pack::report_web_seed_downloads)) ignore_stats(true); shared_ptr<torrent> tor = t.lock(); @@ -79,7 +79,7 @@ // multiply with the blocks per piece since that many requests are // merged into one http request - m_max_out_request_queue = ses.settings().urlseed_pipeline_size + m_max_out_request_queue = ses.settings().get_int(settings_pack::urlseed_pipeline_size) * blocks_per_piece; prefer_whole_pieces(1); Modified: branches/libtorrent_aio_settings/src/http_tracker_connection.cpp =================================================================== --- branches/libtorrent_aio_settings/src/http_tracker_connection.cpp 2012-04-15 04:32:46 UTC (rev 6721) +++ branches/libtorrent_aio_settings/src/http_tracker_connection.cpp 2012-04-15 19:39:19 UTC (rev 6722) @@ -120,7 +120,7 @@ static const bool i2p = false; #endif - session_settings const& settings = m_ses.settings(); + aux::session_settings const& settings = m_ses.settings(); // if request-string already contains // some parameters, append an ampersand instead @@ -181,14 +181,14 @@ } else #endif - if (!m_ses.settings().anonymous_mode) + if (!m_ses.settings().get_bool(settings_pack::anonymous_mode)) { - if (!settings.announce_ip.empty()) + std::string announce_ip = settings.get_str(settings_pack::announce_ip); + if (!announce_ip.empty()) { - url += "&ip=" + escape_string( - settings.announce_ip.c_str(), settings.announce_ip.size()); + url += "&ip=" + escape_string(announce_ip.c_str(), announce_ip.size()); } - else if (m_ses.settings().announce_double_nat + else if (m_ses.settings().get_bool(settings_pack::announce_double_nat) && is_local(m_ses.listen_address())) { // only use the global external listen address here @@ -223,12 +223,13 @@ )); int timeout = tracker_req().event==tracker_request::stopped - ?settings.stop_tracker_timeout - :settings.tracker_completion_timeout; + ?settings.get_int(settings_pack::stop_tracker_timeout) + :settings.get_int(settings_pack::tracker_completion_timeout); m_tracker_connection->get(url, seconds(timeout) , tracker_req().event == tracker_request::stopped ? 2 : 1 - , &m_ps, 5, settings.anonymous_mode ? "" : settings.user_agent + , &m_ps, 5, settings.get_bool(settings_pack::anonymous_mode) + ? "" : settings.get_str(settings_pack::user_agent) , bind_interface() #if TORRENT_USE_I2P , m_i2p_conn Modified: branches/libtorrent_aio_settings/src/metadata_transfer.cpp =================================================================== --- branches/libtorrent_aio_settings/src/metadata_transfer.cpp 2012-04-15 04:32:46 UTC (rev 6721) +++ branches/libtorrent_aio_settings/src/metadata_transfer.cpp 2012-04-15 19:39:19 UTC (rev 6722) @@ -423,7 +423,7 @@ << " ]\n"; #endif - if (total_size > m_torrent.session().settings().max_metadata_size) + if (total_size > m_torrent.session().settings().get_int(settings_pack::max_metadata_size)) { m_pc.disconnect(errors::metadata_too_large, 2); return true; Modified: branches/libtorrent_aio_settings/src/peer_connection.cpp =================================================================== --- branches/libtorrent_aio_settings/src/peer_connection.cpp 2012-04-15 04:32:46 UTC (rev 6721) +++ branches/libtorrent_aio_settings/src/peer_connection.cpp 2012-04-15 19:39:19 UTC (rev 6722) @@ -122,7 +122,7 @@ , #endif m_ses(ses) - , m_max_out_request_queue(m_ses.settings().max_out_request_queue) + , m_max_out_request_queue(m_ses.settings().get_int(settings_pack::max_out_request_queue)) , m_work(ses.m_io_service) , m_last_piece(time_now()) , m_last_request(time_now()) @@ -149,7 +149,7 @@ , m_extension_outstanding_bytes(0) , m_queued_time_critical(0) , m_num_pieces(0) - , m_timeout(m_ses.settings().peer_timeout) + , m_timeout(m_ses.settings().get_int(settings_pack::peer_timeout)) , m_packet_size(0) , m_soft_packet_size(0) , m_recv_pos(0) @@ -214,7 +214,7 @@ // we can't decrement the connecting counter TORRENT_ASSERT(t || !m_connecting); if (m_connecting && t) t->inc_num_connecting(); - m_est_reciprocation_rate = m_ses.m_settings.default_est_reciprocation_rate; + m_est_reciprocation_rate = m_ses.settings().get_int(settings_pack::default_est_reciprocation_rate); #if TORRENT_USE_I2P if (peerinfo && peerinfo->is_i2p_addr) @@ -278,7 +278,7 @@ , #endif m_ses(ses) - , m_max_out_request_queue(m_ses.settings().max_out_request_queue) + , m_max_out_request_queue(m_ses.settings().get_int(settings_pack::max_out_request_queue)) , m_work(ses.m_io_service) , m_last_piece(time_now()) , m_last_request(time_now()) @@ -304,7 +304,7 @@ , m_extension_outstanding_bytes(0) , m_queued_time_critical(0) , m_num_pieces(0) - , m_timeout(m_ses.settings().peer_timeout) + , m_timeout(m_ses.settings().get_int(settings_pack::peer_timeout)) , m_packet_size(0) , m_soft_packet_size(0) , m_recv_pos(0) @@ -362,7 +362,7 @@ , m_destructed(false) #endif... [truncated message content] |
From: <ar...@us...> - 2012-04-15 04:32:53
|
Revision: 6721 http://libtorrent.svn.sourceforge.net/libtorrent/?rev=6721&view=rev Author: arvidn Date: 2012-04-15 04:32:46 +0000 (Sun, 15 Apr 2012) Log Message: ----------- change default of rate_limit_utp to true Modified Paths: -------------- branches/RC_0_16/ChangeLog branches/RC_0_16/docs/manual.rst branches/RC_0_16/src/session.cpp trunk/ChangeLog trunk/docs/manual.rst trunk/src/session.cpp Modified: branches/RC_0_16/ChangeLog =================================================================== --- branches/RC_0_16/ChangeLog 2012-04-15 04:00:58 UTC (rev 6720) +++ branches/RC_0_16/ChangeLog 2012-04-15 04:32:46 UTC (rev 6721) @@ -1,4 +1,5 @@ + * change default of rate_limit_utp to true * fixed DLL export issue on windows (when building a shared library linking statically against boost) * fixed FreeBSD build * fixed web seed performance issue whith pieces > 1 MiB Modified: branches/RC_0_16/docs/manual.rst =================================================================== --- branches/RC_0_16/docs/manual.rst 2012-04-15 04:00:58 UTC (rev 6720) +++ branches/RC_0_16/docs/manual.rst 2012-04-15 04:32:46 UTC (rev 6721) @@ -5370,7 +5370,7 @@ the global rate limiter (which they aren't by default). ``rate_limit_utp`` determines if uTP connections should be throttled by the global rate -limiter or not. By default they are not, since uTP manages its own rate. +limiter or not. By default they are. ``listen_queue_size`` is the value passed in to listen() for the listen socket. It is the number of outstanding incoming connections to queue up while we're not Modified: branches/RC_0_16/src/session.cpp =================================================================== --- branches/RC_0_16/src/session.cpp 2012-04-15 04:00:58 UTC (rev 6720) +++ branches/RC_0_16/src/session.cpp 2012-04-15 04:32:46 UTC (rev 6721) @@ -1261,7 +1261,7 @@ , utp_dynamic_sock_buf(true) , utp_loss_multiplier(50) // specified in percent , mixed_mode_algorithm(peer_proportional) - , rate_limit_utp(false) + , rate_limit_utp(true) , listen_queue_size(5) , announce_double_nat(false) , torrent_connect_boost(10) Modified: trunk/ChangeLog =================================================================== --- trunk/ChangeLog 2012-04-15 04:00:58 UTC (rev 6720) +++ trunk/ChangeLog 2012-04-15 04:32:46 UTC (rev 6721) @@ -1,4 +1,5 @@ + * change default of rate_limit_utp to true * fixed DLL export issue on windows (when building a shared library linking statically against boost) * fixed FreeBSD build * fixed web seed performance issue whith pieces > 1 MiB Modified: trunk/docs/manual.rst =================================================================== --- trunk/docs/manual.rst 2012-04-15 04:00:58 UTC (rev 6720) +++ trunk/docs/manual.rst 2012-04-15 04:32:46 UTC (rev 6721) @@ -5370,7 +5370,7 @@ the global rate limiter (which they aren't by default). ``rate_limit_utp`` determines if uTP connections should be throttled by the global rate -limiter or not. By default they are not, since uTP manages its own rate. +limiter or not. By default they are. ``listen_queue_size`` is the value passed in to listen() for the listen socket. It is the number of outstanding incoming connections to queue up while we're not Modified: trunk/src/session.cpp =================================================================== --- trunk/src/session.cpp 2012-04-15 04:00:58 UTC (rev 6720) +++ trunk/src/session.cpp 2012-04-15 04:32:46 UTC (rev 6721) @@ -1261,7 +1261,7 @@ , utp_dynamic_sock_buf(true) , utp_loss_multiplier(50) // specified in percent , mixed_mode_algorithm(peer_proportional) - , rate_limit_utp(false) + , rate_limit_utp(true) , listen_queue_size(5) , announce_double_nat(false) , torrent_connect_boost(10) This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ar...@us...> - 2012-04-15 04:01:05
|
Revision: 6720 http://libtorrent.svn.sourceforge.net/libtorrent/?rev=6720&view=rev Author: arvidn Date: 2012-04-15 04:00:58 +0000 (Sun, 15 Apr 2012) Log Message: ----------- fix DLL export issue on windows Modified Paths: -------------- branches/RC_0_16/ChangeLog branches/RC_0_16/Jamfile branches/RC_0_16/include/libtorrent/config.hpp trunk/ChangeLog trunk/Jamfile trunk/include/libtorrent/config.hpp Modified: branches/RC_0_16/ChangeLog =================================================================== --- branches/RC_0_16/ChangeLog 2012-04-15 02:20:23 UTC (rev 6719) +++ branches/RC_0_16/ChangeLog 2012-04-15 04:00:58 UTC (rev 6720) @@ -1,4 +1,5 @@ + * fixed DLL export issue on windows (when building a shared library linking statically against boost) * fixed FreeBSD build * fixed web seed performance issue whith pieces > 1 MiB * fixed unchoke logic when using web seeds Modified: branches/RC_0_16/Jamfile =================================================================== --- branches/RC_0_16/Jamfile 2012-04-15 02:20:23 UTC (rev 6719) +++ branches/RC_0_16/Jamfile 2012-04-15 04:00:58 UTC (rev 6720) @@ -587,6 +587,13 @@ <define>BOOST_THREAD_USE_LIB <threading>multi <link>shared:<define>TORRENT_BUILDING_SHARED + + # on windows, when linking statically against asio + # but producing a DLL, everything inside the DLL needs + # to declare the symbol as being exported + <link>shared,<boost-link>static:<define>BOOST_ASIO_SOURCE + <link>shared,<boost-link>static:<define>BOOST_SYSTEM_SOURCE + <dht-support>on:<source>src/kademlia/$(KADEMLIA_SOURCES).cpp <dht-support>logging:<source>src/kademlia/$(KADEMLIA_SOURCES).cpp <conditional>@building Modified: branches/RC_0_16/include/libtorrent/config.hpp =================================================================== --- branches/RC_0_16/include/libtorrent/config.hpp 2012-04-15 02:20:23 UTC (rev 6719) +++ branches/RC_0_16/include/libtorrent/config.hpp 2012-04-15 04:00:58 UTC (rev 6720) @@ -69,7 +69,7 @@ // backwards compatibility with older versions of boost #if !defined BOOST_SYMBOL_EXPORT && !defined BOOST_SYMBOL_IMPORT -# ifdef _MSC_VER +# if defined _MSC_VER || defined __MINGW32__ # define BOOST_SYMBOL_EXPORT __declspec(dllexport) # define BOOST_SYMBOL_IMPORT __declspec(dllimport) # elif __GNU__ >= 4 Modified: trunk/ChangeLog =================================================================== --- trunk/ChangeLog 2012-04-15 02:20:23 UTC (rev 6719) +++ trunk/ChangeLog 2012-04-15 04:00:58 UTC (rev 6720) @@ -1,4 +1,5 @@ + * fixed DLL export issue on windows (when building a shared library linking statically against boost) * fixed FreeBSD build * fixed web seed performance issue whith pieces > 1 MiB * fixed unchoke logic when using web seeds Modified: trunk/Jamfile =================================================================== --- trunk/Jamfile 2012-04-15 02:20:23 UTC (rev 6719) +++ trunk/Jamfile 2012-04-15 04:00:58 UTC (rev 6720) @@ -587,6 +587,13 @@ <define>BOOST_THREAD_USE_LIB <threading>multi <link>shared:<define>TORRENT_BUILDING_SHARED + + # on windows, when linking statically against asio + # but producing a DLL, everything inside the DLL needs + # to declare the symbol as being exported + <link>shared,<boost-link>static:<define>BOOST_ASIO_SOURCE + <link>shared,<boost-link>static:<define>BOOST_SYSTEM_SOURCE + <dht-support>on:<source>src/kademlia/$(KADEMLIA_SOURCES).cpp <dht-support>logging:<source>src/kademlia/$(KADEMLIA_SOURCES).cpp <conditional>@building Modified: trunk/include/libtorrent/config.hpp =================================================================== --- trunk/include/libtorrent/config.hpp 2012-04-15 02:20:23 UTC (rev 6719) +++ trunk/include/libtorrent/config.hpp 2012-04-15 04:00:58 UTC (rev 6720) @@ -69,7 +69,7 @@ // backwards compatibility with older versions of boost #if !defined BOOST_SYMBOL_EXPORT && !defined BOOST_SYMBOL_IMPORT -# ifdef _MSC_VER +# if defined _MSC_VER || defined __MINGW32__ # define BOOST_SYMBOL_EXPORT __declspec(dllexport) # define BOOST_SYMBOL_IMPORT __declspec(dllimport) # elif __GNU__ >= 4 This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ar...@us...> - 2012-04-15 02:20:29
|
Revision: 6719 http://libtorrent.svn.sourceforge.net/libtorrent/?rev=6719&view=rev Author: arvidn Date: 2012-04-15 02:20:23 +0000 (Sun, 15 Apr 2012) Log Message: ----------- some more FreeBSD fixes Modified Paths: -------------- branches/RC_0_16/include/libtorrent/config.hpp branches/RC_0_16/src/asio.cpp trunk/include/libtorrent/config.hpp trunk/src/asio.cpp Modified: branches/RC_0_16/include/libtorrent/config.hpp =================================================================== --- branches/RC_0_16/include/libtorrent/config.hpp 2012-04-15 01:04:03 UTC (rev 6718) +++ branches/RC_0_16/include/libtorrent/config.hpp 2012-04-15 02:20:23 UTC (rev 6719) @@ -172,6 +172,9 @@ #define TORRENT_USE_LOCALE 0 #define TORRENT_CLOSE_MAY_BLOCK 1 #endif +#else +// FreeBSD has a reasonable iconv signature +#define TORRENT_ICONV_ARG (const char**) #endif #define TORRENT_HAS_FALLOCATE 0 #define TORRENT_USE_IFADDRS 1 Modified: branches/RC_0_16/src/asio.cpp =================================================================== --- branches/RC_0_16/src/asio.cpp 2012-04-15 01:04:03 UTC (rev 6718) +++ branches/RC_0_16/src/asio.cpp 2012-04-15 02:20:23 UTC (rev 6719) @@ -1,7 +1,7 @@ // builds all boost.asio source as a separate compilation unit #include <boost/version.hpp> -#if BOOST_VERSION >= 104610 +#if BOOST_VERSION >= 104500 #include <boost/asio/impl/src.hpp> #endif Modified: trunk/include/libtorrent/config.hpp =================================================================== --- trunk/include/libtorrent/config.hpp 2012-04-15 01:04:03 UTC (rev 6718) +++ trunk/include/libtorrent/config.hpp 2012-04-15 02:20:23 UTC (rev 6719) @@ -172,6 +172,9 @@ #define TORRENT_USE_LOCALE 0 #define TORRENT_CLOSE_MAY_BLOCK 1 #endif +#else +// FreeBSD has a reasonable iconv signature +#define TORRENT_ICONV_ARG (const char**) #endif #define TORRENT_HAS_FALLOCATE 0 #define TORRENT_USE_IFADDRS 1 Modified: trunk/src/asio.cpp =================================================================== --- trunk/src/asio.cpp 2012-04-15 01:04:03 UTC (rev 6718) +++ trunk/src/asio.cpp 2012-04-15 02:20:23 UTC (rev 6719) @@ -1,7 +1,7 @@ // builds all boost.asio source as a separate compilation unit #include <boost/version.hpp> -#if BOOST_VERSION >= 104610 +#if BOOST_VERSION >= 104500 #include <boost/asio/impl/src.hpp> #endif This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ar...@us...> - 2012-04-15 01:04:09
|
Revision: 6718 http://libtorrent.svn.sourceforge.net/libtorrent/?rev=6718&view=rev Author: arvidn Date: 2012-04-15 01:04:03 +0000 (Sun, 15 Apr 2012) Log Message: ----------- merged FreeBSD fix from trunk Modified Paths: -------------- branches/RC_0_16/include/libtorrent/alloca.hpp Property Changed: ---------------- branches/RC_0_16/ branches/RC_0_16/examples/connection_tester.cpp Property changes on: branches/RC_0_16 ___________________________________________________________________ Modified: svn:mergeinfo - /branches/libtorrent_aio:5693,6230,6329,6384 /branches/libtorrent_utp:3973-5057 /branches/ssl:6336-6361 /trunk:6619,6621,6623,6625,6627,6629,6633-6634,6638,6643,6650-6651,6654,6702,6704,6706,6713 + /branches/libtorrent_aio:5693,6230,6329,6384 /branches/libtorrent_utp:3973-5057 /branches/ssl:6336-6361 /trunk:6619,6621,6623,6625,6627,6629,6633-6634,6638,6643,6650-6651,6654,6702,6704,6706,6713,6717 Property changes on: branches/RC_0_16/examples/connection_tester.cpp ___________________________________________________________________ Modified: svn:mergeinfo - /branches/libtorrent_aio/examples/connection_tester.cpp:4468-6265,6329,6384 /branches/libtorrent_utp/examples/connection_tester.cpp:3973-5057 /branches/ssl/examples/connection_tester.cpp:6336-6361 /trunk/examples/connection_tester.cpp:6619,6621,6623,6625,6627,6629,6633-6634,6638,6643,6650-6651,6654,6702,6704,6706,6713 + /branches/libtorrent_aio/examples/connection_tester.cpp:4468-6265,6329,6384 /branches/libtorrent_utp/examples/connection_tester.cpp:3973-5057 /branches/ssl/examples/connection_tester.cpp:6336-6361 /trunk/examples/connection_tester.cpp:6619,6621,6623,6625,6627,6629,6633-6634,6638,6643,6650-6651,6654,6702,6704,6706,6713,6717 Modified: branches/RC_0_16/include/libtorrent/alloca.hpp =================================================================== --- branches/RC_0_16/include/libtorrent/alloca.hpp 2012-04-15 01:02:55 UTC (rev 6717) +++ branches/RC_0_16/include/libtorrent/alloca.hpp 2012-04-15 01:04:03 UTC (rev 6718) @@ -34,15 +34,19 @@ #include "libtorrent/config.hpp" -#ifdef TORRENT_WINDOWS +#if defined TORRENT_WINDOWS #include <malloc.h> #define TORRENT_ALLOCA(t, n) static_cast<t*>(_alloca(sizeof(t) * (n))) +#elif defined TORRENT_BSD + +#include <stdlib.h> +#define TORRENT_ALLOCA(t, n) static_cast<t*>(alloca(sizeof(t) * (n))) + #else #include <alloca.h> - #define TORRENT_ALLOCA(t, n) static_cast<t*>(alloca(sizeof(t) * (n))) #endif This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ar...@us...> - 2012-04-15 01:03:01
|
Revision: 6717 http://libtorrent.svn.sourceforge.net/libtorrent/?rev=6717&view=rev Author: arvidn Date: 2012-04-15 01:02:55 +0000 (Sun, 15 Apr 2012) Log Message: ----------- another FreeBSD fix Modified Paths: -------------- trunk/include/libtorrent/alloca.hpp Modified: trunk/include/libtorrent/alloca.hpp =================================================================== --- trunk/include/libtorrent/alloca.hpp 2012-04-15 00:48:44 UTC (rev 6716) +++ trunk/include/libtorrent/alloca.hpp 2012-04-15 01:02:55 UTC (rev 6717) @@ -34,15 +34,19 @@ #include "libtorrent/config.hpp" -#ifdef TORRENT_WINDOWS +#if defined TORRENT_WINDOWS #include <malloc.h> #define TORRENT_ALLOCA(t, n) static_cast<t*>(_alloca(sizeof(t) * (n))) +#elif defined TORRENT_BSD + +#include <stdlib.h> +#define TORRENT_ALLOCA(t, n) static_cast<t*>(alloca(sizeof(t) * (n))) + #else #include <alloca.h> - #define TORRENT_ALLOCA(t, n) static_cast<t*>(alloca(sizeof(t) * (n))) #endif This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ar...@us...> - 2012-04-15 00:48:50
|
Revision: 6716 http://libtorrent.svn.sourceforge.net/libtorrent/?rev=6716&view=rev Author: arvidn Date: 2012-04-15 00:48:44 +0000 (Sun, 15 Apr 2012) Log Message: ----------- merged FreeBSD fix from RC_0_16 Modified Paths: -------------- trunk/ChangeLog trunk/src/disk_io_thread.cpp Property Changed: ---------------- trunk/ trunk/examples/connection_tester.cpp Property changes on: trunk ___________________________________________________________________ Modified: svn:mergeinfo - /branches/RC_0_16:6640,6657,6662,6665,6669,6673-6675,6678,6684,6686,6688,6690,6692,6694-6695,6698,6700 /branches/libtorrent_aio:5693,6230,6329,6384 /branches/libtorrent_utp:3973-5057 /branches/ssl:6336-6361 + /branches/RC_0_16:6640,6657,6662,6665,6669,6673-6675,6678,6684,6686,6688,6690,6692,6694-6695,6698,6700,6715 /branches/libtorrent_aio:5693,6230,6329,6384 /branches/libtorrent_utp:3973-5057 /branches/ssl:6336-6361 Modified: trunk/ChangeLog =================================================================== --- trunk/ChangeLog 2012-04-15 00:46:31 UTC (rev 6715) +++ trunk/ChangeLog 2012-04-15 00:48:44 UTC (rev 6716) @@ -1,4 +1,5 @@ + * fixed FreeBSD build * fixed web seed performance issue whith pieces > 1 MiB * fixed unchoke logic when using web seeds * fixed compatibility with older versions of boost (down to boost 1.40) Property changes on: trunk/examples/connection_tester.cpp ___________________________________________________________________ Modified: svn:mergeinfo - /branches/RC_0_16/examples/connection_tester.cpp:6640,6657,6662,6665,6669,6673-6675,6678,6684,6686,6688,6690,6692,6694-6695,6698,6700 /branches/libtorrent_aio/examples/connection_tester.cpp:4468-6265,6329,6384 /branches/libtorrent_utp/examples/connection_tester.cpp:3973-5057 /branches/ssl/examples/connection_tester.cpp:6336-6361 + /branches/RC_0_16/examples/connection_tester.cpp:6640,6657,6662,6665,6669,6673-6675,6678,6684,6686,6688,6690,6692,6694-6695,6698,6700,6715 /branches/libtorrent_aio/examples/connection_tester.cpp:4468-6265,6329,6384 /branches/libtorrent_utp/examples/connection_tester.cpp:3973-5057 /branches/ssl/examples/connection_tester.cpp:6336-6361 Modified: trunk/src/disk_io_thread.cpp =================================================================== --- trunk/src/disk_io_thread.cpp 2012-04-15 00:46:31 UTC (rev 6715) +++ trunk/src/disk_io_thread.cpp 2012-04-15 00:48:44 UTC (rev 6716) @@ -1452,7 +1452,14 @@ // sizing the disk cache size when it's set to // automatic. #ifdef TORRENT_BSD +#ifdef HW_MEMSIZE int mib[2] = { CTL_HW, HW_MEMSIZE }; +#else + // not entirely sure this sysctl supports 64 + // bit return values, but it's probably better + // than not building + int mib[2] = { CTL_HW, HW_PHYSMEM }; +#endif size_t len = sizeof(m_physical_ram); if (sysctl(mib, 2, &m_physical_ram, &len, NULL, 0) != 0) m_physical_ram = 0; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ar...@us...> - 2012-04-15 00:46:38
|
Revision: 6715 http://libtorrent.svn.sourceforge.net/libtorrent/?rev=6715&view=rev Author: arvidn Date: 2012-04-15 00:46:31 +0000 (Sun, 15 Apr 2012) Log Message: ----------- fixed FreeBSD build Modified Paths: -------------- branches/RC_0_16/ChangeLog branches/RC_0_16/src/disk_io_thread.cpp Modified: branches/RC_0_16/ChangeLog =================================================================== --- branches/RC_0_16/ChangeLog 2012-04-14 23:38:58 UTC (rev 6714) +++ branches/RC_0_16/ChangeLog 2012-04-15 00:46:31 UTC (rev 6715) @@ -1,4 +1,5 @@ + * fixed FreeBSD build * fixed web seed performance issue whith pieces > 1 MiB * fixed unchoke logic when using web seeds * fixed compatibility with older versions of boost (down to boost 1.40) Modified: branches/RC_0_16/src/disk_io_thread.cpp =================================================================== --- branches/RC_0_16/src/disk_io_thread.cpp 2012-04-14 23:38:58 UTC (rev 6714) +++ branches/RC_0_16/src/disk_io_thread.cpp 2012-04-15 00:46:31 UTC (rev 6715) @@ -1452,7 +1452,14 @@ // sizing the disk cache size when it's set to // automatic. #ifdef TORRENT_BSD +#ifdef HW_MEMSIZE int mib[2] = { CTL_HW, HW_MEMSIZE }; +#else + // not entirely sure this sysctl supports 64 + // bit return values, but it's probably better + // than not building + int mib[2] = { CTL_HW, HW_PHYSMEM }; +#endif size_t len = sizeof(m_physical_ram); if (sysctl(mib, 2, &m_physical_ram, &len, NULL, 0) != 0) m_physical_ram = 0; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ar...@us...> - 2012-04-14 23:39:04
|
Revision: 6714 http://libtorrent.svn.sourceforge.net/libtorrent/?rev=6714&view=rev Author: arvidn Date: 2012-04-14 23:38:58 +0000 (Sat, 14 Apr 2012) Log Message: ----------- merged fix from trunk Modified Paths: -------------- branches/RC_0_16/ChangeLog branches/RC_0_16/src/web_peer_connection.cpp Property Changed: ---------------- branches/RC_0_16/ branches/RC_0_16/examples/connection_tester.cpp Property changes on: branches/RC_0_16 ___________________________________________________________________ Modified: svn:mergeinfo - /branches/libtorrent_aio:5693,6230,6329,6384 /branches/libtorrent_utp:3973-5057 /branches/ssl:6336-6361 /trunk:6619,6621,6623,6625,6627,6629,6633-6634,6638,6643,6650-6651,6654,6702,6704,6706 + /branches/libtorrent_aio:5693,6230,6329,6384 /branches/libtorrent_utp:3973-5057 /branches/ssl:6336-6361 /trunk:6619,6621,6623,6625,6627,6629,6633-6634,6638,6643,6650-6651,6654,6702,6704,6706,6713 Modified: branches/RC_0_16/ChangeLog =================================================================== --- branches/RC_0_16/ChangeLog 2012-04-14 23:36:16 UTC (rev 6713) +++ branches/RC_0_16/ChangeLog 2012-04-14 23:38:58 UTC (rev 6714) @@ -1,4 +1,5 @@ + * fixed web seed performance issue whith pieces > 1 MiB * fixed unchoke logic when using web seeds * fixed compatibility with older versions of boost (down to boost 1.40) Property changes on: branches/RC_0_16/examples/connection_tester.cpp ___________________________________________________________________ Modified: svn:mergeinfo - /branches/libtorrent_aio/examples/connection_tester.cpp:4468-6265,6329,6384 /branches/libtorrent_utp/examples/connection_tester.cpp:3973-5057 /branches/ssl/examples/connection_tester.cpp:6336-6361 /trunk/examples/connection_tester.cpp:6619,6621,6623,6625,6627,6629,6633-6634,6638,6643,6650-6651,6654,6702,6704,6706 + /branches/libtorrent_aio/examples/connection_tester.cpp:4468-6265,6329,6384 /branches/libtorrent_utp/examples/connection_tester.cpp:3973-5057 /branches/ssl/examples/connection_tester.cpp:6336-6361 /trunk/examples/connection_tester.cpp:6619,6621,6623,6625,6627,6629,6633-6634,6638,6643,6650-6651,6654,6702,6704,6706,6713 Modified: branches/RC_0_16/src/web_peer_connection.cpp =================================================================== --- branches/RC_0_16/src/web_peer_connection.cpp 2012-04-14 23:36:16 UTC (rev 6713) +++ branches/RC_0_16/src/web_peer_connection.cpp 2012-04-14 23:38:58 UTC (rev 6714) @@ -84,9 +84,10 @@ shared_ptr<torrent> tor = t.lock(); TORRENT_ASSERT(tor); - // we always prefer downloading 1 MB chunks - // from web seeds - prefer_whole_pieces((1024 * 1024) / tor->torrent_file().piece_length()); + // we always prefer downloading 1 MiB chunks + // from web seeds, or whole pieces if pieces + // are larger than a MiB + prefer_whole_pieces((std::min)((1024 * 1024) / tor->torrent_file().piece_length(), 1)); // we want large blocks as well, so // we can request more bytes at once This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ar...@us...> - 2012-04-14 23:36:22
|
Revision: 6713 http://libtorrent.svn.sourceforge.net/libtorrent/?rev=6713&view=rev Author: arvidn Date: 2012-04-14 23:36:16 +0000 (Sat, 14 Apr 2012) Log Message: ----------- fixed web seed performance issue whith pieces > 1 MiB Modified Paths: -------------- trunk/ChangeLog trunk/src/web_peer_connection.cpp Modified: trunk/ChangeLog =================================================================== --- trunk/ChangeLog 2012-04-14 23:27:56 UTC (rev 6712) +++ trunk/ChangeLog 2012-04-14 23:36:16 UTC (rev 6713) @@ -1,4 +1,5 @@ + * fixed web seed performance issue whith pieces > 1 MiB * fixed unchoke logic when using web seeds * fixed compatibility with older versions of boost (down to boost 1.40) Modified: trunk/src/web_peer_connection.cpp =================================================================== --- trunk/src/web_peer_connection.cpp 2012-04-14 23:27:56 UTC (rev 6712) +++ trunk/src/web_peer_connection.cpp 2012-04-14 23:36:16 UTC (rev 6713) @@ -84,9 +84,10 @@ shared_ptr<torrent> tor = t.lock(); TORRENT_ASSERT(tor); - // we always prefer downloading 1 MB chunks - // from web seeds - prefer_whole_pieces((1024 * 1024) / tor->torrent_file().piece_length()); + // we always prefer downloading 1 MiB chunks + // from web seeds, or whole pieces if pieces + // are larger than a MiB + prefer_whole_pieces((std::min)((1024 * 1024) / tor->torrent_file().piece_length(), 1)); // we want large blocks as well, so // we can request more bytes at once This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ar...@us...> - 2012-04-14 23:28:02
|
Revision: 6712 http://libtorrent.svn.sourceforge.net/libtorrent/?rev=6712&view=rev Author: arvidn Date: 2012-04-14 23:27:56 +0000 (Sat, 14 Apr 2012) Log Message: ----------- polished the session stats parser script Modified Paths: -------------- branches/libtorrent_aio/parse_session_stats.py Modified: branches/libtorrent_aio/parse_session_stats.py =================================================================== --- branches/libtorrent_aio/parse_session_stats.py 2012-04-14 23:27:01 UTC (rev 6711) +++ branches/libtorrent_aio/parse_session_stats.py 2012-04-14 23:27:56 UTC (rev 6712) @@ -203,7 +203,8 @@ ('overall_rates', 'rate', 'B/s', 'download and upload rates', ['uploaded bytes', 'downloaded bytes', 'upload rate', 'download rate', 'smooth upload rate', 'smooth download rate']), ('disk_write_queue', 'Bytes', 'B', 'bytes queued up by peers, to be written to disk', ['disk write queued bytes']), ('peers_requests', 'num', '', 'incoming piece request rate', ['piece requests', 'piece rejects', 'max piece requests', 'invalid piece requests', 'choked piece requests', 'cancelled piece requests']), - ('peers_upload', 'num', '', 'number of peers by state wrt. uploading', ['peers up interested', 'peers up unchoked', 'peers up requests', 'peers disk-up', 'peers up send buffer', 'peers bw-up', 'max unchoked']), + ('peers_upload_max', 'num', '', 'number of peers by state wrt. uploading', ['peers up interested', 'peers up unchoked', 'peers up requests', 'peers disk-up', 'peers up send buffer', 'peers bw-up', 'max unchoked']), + ('peers_upload', 'num', '', 'number of peers by state wrt. uploading', ['peers up interested', 'peers up unchoked', 'peers up requests', 'peers disk-up', 'peers up send buffer', 'peers bw-up']), ('peers_download', 'num', '', 'number of peers by state wrt. downloading', ['peers down interesting', 'peers down unchoked', 'peers down requests', 'peers disk-down', 'peers bw-down','num end-game peers']), ('peer_errors', 'num', '', 'number of peers by error that disconnected them', ['error peers', 'peer disconnects', 'peers eof', 'peers connection reset', 'connect timeouts', 'uninteresting peers disconnect', 'banned for hash failure', 'no memory peer errors', 'too many peers', 'transport timeout peers', 'connection refused peers', 'connection aborted peers', 'permission denied peers', 'no buffer peers', 'host unreachable peers', 'broken pipe peers', 'address in use peers', 'access denied peers', 'invalid argument peers', 'operation aborted peers']), ('peer_errors_incoming', 'num', '', 'number of peers by incoming or outgoing connection', ['error incoming peers', 'error outgoing peers']), @@ -260,8 +261,8 @@ ('piece_picker', 'blocks', '', '', ['piece picks', 'reject piece picks', 'unchoke piece picks', 'incoming redundant piece picks', 'incoming piece picks', 'end game piece picks', 'snubbed piece picks'], {'type':stacked}), ('piece_picker_loops', 'num checked pieces', '', '', ['piece picker loops']), ('picker_partials', 'pieces', '', '', ['num partial pieces', 'num downloading partial pieces', 'num full partial pieces', 'num finished partial pieces']), - ('picker_full_partials_distribution', 'full pieces', 'count', '', ['num full partial pieces'], {'type': 'histogram', 'binwidth': 5, 'numbins': 120}), - ('picker_partials_distribution', 'partial pieces', 'count', '', ['num downloading partial pieces'], {'type': 'histogram', 'binwidth': 5, 'numbins': 120}) + ('picker_full_partials_distribution', 'full pieces', '', '', ['num full partial pieces'], {'type': 'histogram', 'binwidth': 5, 'numbins': 120}), + ('picker_partials_distribution', 'partial pieces', '', '', ['num downloading partial pieces'], {'type': 'histogram', 'binwidth': 5, 'numbins': 120}) ] print 'generating graphs' This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ar...@us...> - 2012-04-14 23:27:07
|
Revision: 6711 http://libtorrent.svn.sourceforge.net/libtorrent/?rev=6711&view=rev Author: arvidn Date: 2012-04-14 23:27:01 +0000 (Sat, 14 Apr 2012) Log Message: ----------- fix debug build Modified Paths: -------------- branches/libtorrent_aio/src/socket_type.cpp Modified: branches/libtorrent_aio/src/socket_type.cpp =================================================================== --- branches/libtorrent_aio/src/socket_type.cpp 2012-04-14 06:32:35 UTC (rev 6710) +++ branches/libtorrent_aio/src/socket_type.cpp 2012-04-14 23:27:01 UTC (rev 6711) @@ -30,6 +30,7 @@ */ +#include "libtorrent/config.hpp" #include "libtorrent/socket_type.hpp" #ifdef TORRENT_USE_OPENSSL @@ -41,6 +42,10 @@ #endif +#if defined TORRENT_ASIO_DEBUGGING +#include "libtorrent/debug.hpp" +#endif + namespace libtorrent { This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ar...@us...> - 2012-04-14 06:32:42
|
Revision: 6710 http://libtorrent.svn.sourceforge.net/libtorrent/?rev=6710&view=rev Author: arvidn Date: 2012-04-14 06:32:35 +0000 (Sat, 14 Apr 2012) Log Message: ----------- fix one more web seed issue caused by introducing a peer_info struct for web seeds Modified Paths: -------------- branches/RC_0_16/src/torrent.cpp trunk/src/torrent.cpp Modified: branches/RC_0_16/src/torrent.cpp =================================================================== --- branches/RC_0_16/src/torrent.cpp 2012-04-13 23:45:51 UTC (rev 6709) +++ branches/RC_0_16/src/torrent.cpp 2012-04-14 06:32:35 UTC (rev 6710) @@ -4317,7 +4317,14 @@ web->removed = true; return; } + peer_connection * peer = web->peer_info.connection; + if (peer) { + TORRENT_ASSERT(peer->m_in_use == 1337); + peer->set_peer_info(0); + } if (has_picker()) picker().clear_peer(&web->peer_info); + + m_web_seeds.erase(web); } @@ -7867,6 +7874,7 @@ , (boost::bind(&policy::peer::connection, boost::bind(&web_seed_entry::peer_info, _1)) == p)); TORRENT_ASSERT(i != m_web_seeds.end()); if (i == m_web_seeds.end()) return; + p->set_peer_info(0); if (has_picker()) picker().clear_peer(&i->peer_info); m_web_seeds.erase(i); } Modified: trunk/src/torrent.cpp =================================================================== --- trunk/src/torrent.cpp 2012-04-13 23:45:51 UTC (rev 6709) +++ trunk/src/torrent.cpp 2012-04-14 06:32:35 UTC (rev 6710) @@ -4317,7 +4317,14 @@ web->removed = true; return; } + peer_connection * peer = web->peer_info.connection; + if (peer) { + TORRENT_ASSERT(peer->m_in_use == 1337); + peer->set_peer_info(0); + } if (has_picker()) picker().clear_peer(&web->peer_info); + + m_web_seeds.erase(web); } @@ -7867,6 +7874,7 @@ , (boost::bind(&policy::peer::connection, boost::bind(&web_seed_entry::peer_info, _1)) == p)); TORRENT_ASSERT(i != m_web_seeds.end()); if (i == m_web_seeds.end()) return; + p->set_peer_info(0); if (has_picker()) picker().clear_peer(&i->peer_info); m_web_seeds.erase(i); } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ar...@us...> - 2012-04-13 23:45:57
|
Revision: 6709 http://libtorrent.svn.sourceforge.net/libtorrent/?rev=6709&view=rev Author: arvidn Date: 2012-04-13 23:45:51 +0000 (Fri, 13 Apr 2012) Log Message: ----------- branch for settings revamp Added Paths: ----------- branches/libtorrent_aio_settings/ This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ar...@us...> - 2012-04-13 16:20:36
|
Revision: 6708 http://libtorrent.svn.sourceforge.net/libtorrent/?rev=6708&view=rev Author: arvidn Date: 2012-04-13 16:20:30 +0000 (Fri, 13 Apr 2012) Log Message: ----------- remove duplicate assert Modified Paths: -------------- branches/RC_0_16/src/file.cpp trunk/src/file.cpp Modified: branches/RC_0_16/src/file.cpp =================================================================== --- branches/RC_0_16/src/file.cpp 2012-04-12 17:20:19 UTC (rev 6707) +++ branches/RC_0_16/src/file.cpp 2012-04-13 16:20:30 UTC (rev 6708) @@ -1407,7 +1407,6 @@ if (GetLastError() != ERROR_IO_PENDING) { TORRENT_ASSERT(GetLastError() != ERROR_BAD_ARGUMENTS); - TORRENT_ASSERT(GetLastError() != ERROR_BAD_ARGUMENTS); ec.assign(GetLastError(), get_system_category()); CloseHandle(ol.hEvent); return -1; Modified: trunk/src/file.cpp =================================================================== --- trunk/src/file.cpp 2012-04-12 17:20:19 UTC (rev 6707) +++ trunk/src/file.cpp 2012-04-13 16:20:30 UTC (rev 6708) @@ -1407,7 +1407,6 @@ if (GetLastError() != ERROR_IO_PENDING) { TORRENT_ASSERT(GetLastError() != ERROR_BAD_ARGUMENTS); - TORRENT_ASSERT(GetLastError() != ERROR_BAD_ARGUMENTS); ec.assign(GetLastError(), get_system_category()); CloseHandle(ol.hEvent); return -1; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ar...@us...> - 2012-04-12 17:20:30
|
Revision: 6707 http://libtorrent.svn.sourceforge.net/libtorrent/?rev=6707&view=rev Author: arvidn Date: 2012-04-12 17:20:19 +0000 (Thu, 12 Apr 2012) Log Message: ----------- merged piece_picker asserts from trunk Modified Paths: -------------- branches/RC_0_16/src/piece_picker.cpp branches/RC_0_16/test/test_piece_picker.cpp Property Changed: ---------------- branches/RC_0_16/ branches/RC_0_16/examples/connection_tester.cpp Property changes on: branches/RC_0_16 ___________________________________________________________________ Modified: svn:mergeinfo - /branches/libtorrent_aio:5693,6230,6329,6384 /branches/libtorrent_utp:3973-5057 /branches/ssl:6336-6361 /trunk:6619,6621,6623,6625,6627,6629,6633-6634,6638,6643,6650-6651,6654,6702,6704 + /branches/libtorrent_aio:5693,6230,6329,6384 /branches/libtorrent_utp:3973-5057 /branches/ssl:6336-6361 /trunk:6619,6621,6623,6625,6627,6629,6633-6634,6638,6643,6650-6651,6654,6702,6704,6706 Property changes on: branches/RC_0_16/examples/connection_tester.cpp ___________________________________________________________________ Modified: svn:mergeinfo - /branches/libtorrent_aio/examples/connection_tester.cpp:4468-6265,6329,6384 /branches/libtorrent_utp/examples/connection_tester.cpp:3973-5057 /branches/ssl/examples/connection_tester.cpp:6336-6361 /trunk/examples/connection_tester.cpp:6619,6621,6623,6625,6627,6629,6633-6634,6638,6643,6650-6651,6654,6702,6704 + /branches/libtorrent_aio/examples/connection_tester.cpp:4468-6265,6329,6384 /branches/libtorrent_utp/examples/connection_tester.cpp:3973-5057 /branches/ssl/examples/connection_tester.cpp:6336-6361 /trunk/examples/connection_tester.cpp:6619,6621,6623,6625,6627,6629,6633-6634,6638,6643,6650-6651,6654,6702,6704,6706 Modified: branches/RC_0_16/src/piece_picker.cpp =================================================================== --- branches/RC_0_16/src/piece_picker.cpp 2012-04-12 17:10:22 UTC (rev 6706) +++ branches/RC_0_16/src/piece_picker.cpp 2012-04-12 17:20:19 UTC (rev 6707) @@ -47,6 +47,7 @@ #ifdef TORRENT_DEBUG #include "libtorrent/peer_connection.hpp" #include "libtorrent/torrent.hpp" +#include "libtorrent/policy.hpp" // for policy::peer #endif #include "libtorrent/invariant_check.hpp" @@ -308,6 +309,7 @@ for (int k = 0; k < num_blocks; ++k) { TORRENT_ASSERT(i->info[k].piece_index == i->index); + TORRENT_ASSERT(i->info[k].peer == 0 || static_cast<policy::peer*>(i->info[k].peer)->in_use); if (i->info[k].state == block_info::state_finished) { ++num_finished; @@ -1372,6 +1374,8 @@ , int options, std::vector<int> const& suggested_pieces , int num_peers) const { + TORRENT_ASSERT(peer == 0 || static_cast<policy::peer*>(peer)->in_use); + // prevent the number of partial pieces to grow indefinitely // make this scale by the number of peers we have. For large // scale clients, we would have more peers, and allow a higher @@ -1618,6 +1622,7 @@ for (int j = 0; j < num_blocks_in_piece; ++j) { block_info const& info = i->info[j]; + TORRENT_ASSERT(info.peer == 0 || static_cast<policy::peer*>(info.peer)->in_use); TORRENT_ASSERT(info.piece_index == i->index); if (info.state != block_info::state_requested || info.peer == peer) @@ -1744,7 +1749,10 @@ { for (std::vector<block_info>::iterator i = m_block_info.begin() , end(m_block_info.end()); i != end; ++i) + { + TORRENT_ASSERT(i->peer == 0 || static_cast<policy::peer*>(i->peer)->in_use); if (i->peer == peer) i->peer = 0; + } } namespace @@ -1761,6 +1769,7 @@ for (int j = 0; j < num_blocks_in_piece; ++j) { piece_picker::block_info const& info = p.info[j]; + TORRENT_ASSERT(info.peer == 0 || static_cast<policy::peer*>(info.peer)->in_use); TORRENT_ASSERT(info.piece_index == p.index); if (info.state != piece_picker::block_info::state_none && info.peer != peer) @@ -2081,6 +2090,7 @@ bool piece_picker::mark_as_downloading(piece_block block , void* peer, piece_state_t state) { + TORRENT_ASSERT(peer == 0 || static_cast<policy::peer*>(peer)->in_use); TORRENT_ASSERT(state != piece_picker::none); TORRENT_ASSERT(block.piece_index >= 0); TORRENT_ASSERT(block.block_index >= 0); @@ -2174,6 +2184,8 @@ TORRENT_PIECE_PICKER_INVARIANT_CHECK; #endif + TORRENT_ASSERT(peer == 0 || static_cast<policy::peer*>(peer)->in_use); + TORRENT_ASSERT(block.piece_index >= 0); TORRENT_ASSERT(block.block_index >= 0); TORRENT_ASSERT(block.piece_index < m_piece_map.size()); @@ -2286,6 +2298,7 @@ void piece_picker::mark_as_finished(piece_block block, void* peer) { + TORRENT_ASSERT(peer == 0 || static_cast<policy::peer*>(peer)->in_use); TORRENT_ASSERT(block.piece_index >= 0); TORRENT_ASSERT(block.block_index >= 0); TORRENT_ASSERT(block.piece_index < m_piece_map.size()); @@ -2365,6 +2378,7 @@ d.clear(); for (int j = 0, end(blocks_in_piece(index)); j != end; ++j) { + TORRENT_ASSERT(i->info[j].peer == 0 || static_cast<policy::peer*>(i->info[j].peer)->in_use); d.push_back(i->info[j].peer); } } @@ -2381,7 +2395,9 @@ if (i->info[block.block_index].state == block_info::state_none) return 0; - return i->info[block.block_index].peer; + void* peer = i->info[block.block_index].peer; + TORRENT_ASSERT(peer == 0 || static_cast<policy::peer*>(peer)->in_use); + return peer; } // this is called when a request is rejected or when @@ -2392,6 +2408,8 @@ TORRENT_PIECE_PICKER_INVARIANT_CHECK; #endif + TORRENT_ASSERT(peer == 0 || static_cast<policy::peer*>(peer)->in_use); + TORRENT_ASSERT(block.piece_index >= 0); TORRENT_ASSERT(block.block_index >= 0); TORRENT_ASSERT(block.piece_index < m_piece_map.size()); @@ -2407,6 +2425,7 @@ TORRENT_ASSERT(i != m_downloads.end()); block_info& info = i->info[block.block_index]; + TORRENT_ASSERT(info.peer == 0 || static_cast<policy::peer*>(info.peer)->in_use); TORRENT_ASSERT(info.piece_index == block.piece_index); TORRENT_ASSERT(info.state != block_info::state_none); @@ -2434,7 +2453,7 @@ info.state = block_info::state_none; --i->requested; update_full(*i); - } + } // if there are no other blocks in this piece // that's being downloaded, remove it from the list Modified: branches/RC_0_16/test/test_piece_picker.cpp =================================================================== --- branches/RC_0_16/test/test_piece_picker.cpp 2012-04-12 17:10:22 UTC (rev 6706) +++ branches/RC_0_16/test/test_piece_picker.cpp 2012-04-12 17:20:19 UTC (rev 6707) @@ -221,13 +221,18 @@ int test_main() { - - int tmp1; - int tmp2; - int tmp3; tcp::endpoint endp; piece_picker::downloading_piece st; + policy::ipv4_peer tmp1(endp, false, 0); + policy::ipv4_peer tmp2(endp, false, 0); + policy::ipv4_peer tmp3(endp, false, 0); policy::ipv4_peer peer_struct(endp, true, 0); +#if defined TORRENT_DEBUG || TORRENT_RELEASE_ASSERTS + tmp1.in_use = true; + tmp2.in_use = true; + tmp3.in_use = true; + peer_struct.in_use = true; +#endif std::vector<piece_block> picked; boost::shared_ptr<piece_picker> p; const std::vector<int> empty_vector; @@ -303,23 +308,23 @@ TEST_CHECK(p->is_requested(piece_block(0, 0)) == false); TEST_CHECK(std::find(picked.begin(), picked.end(), piece_block(0,0)) != picked.end()); - p->mark_as_downloading(piece_block(0, 2), (void*)1337, piece_picker::fast); - p->mark_as_writing(piece_block(0, 2), (void*)1337); - p->abort_download(piece_block(0, 2), (void*)1337); - p->mark_as_downloading(piece_block(0, 2), (void*)7, piece_picker::fast); - p->mark_as_writing(piece_block(0, 2), (void*)7); + p->mark_as_downloading(piece_block(0, 2), &tmp1, piece_picker::fast); + p->mark_as_writing(piece_block(0, 2), &tmp1); + p->abort_download(piece_block(0, 2), &tmp1); + p->mark_as_downloading(piece_block(0, 2), &tmp2, piece_picker::fast); + p->mark_as_writing(piece_block(0, 2), &tmp2); std::vector<void*> d; p->get_downloaders(d, 0); - TEST_CHECK(d[2] == (void*)7); + TEST_CHECK(d[2] == &tmp2); - p->mark_as_downloading(piece_block(0, 3), (void*)1337, piece_picker::fast); - p->abort_download(piece_block(0, 3), (void*)1337); - p->mark_as_downloading(piece_block(0, 3), (void*)7, piece_picker::fast); - p->mark_as_writing(piece_block(0, 3), (void*)7); + p->mark_as_downloading(piece_block(0, 3), &tmp1, piece_picker::fast); + p->abort_download(piece_block(0, 3), &tmp1); + p->mark_as_downloading(piece_block(0, 3), &tmp2, piece_picker::fast); + p->mark_as_writing(piece_block(0, 3), &tmp2); p->get_downloaders(d, 0); - TEST_CHECK(d[3] == (void*)7); + TEST_CHECK(d[3] == &tmp2); // ======================================================== This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ar...@us...> - 2012-04-12 17:10:33
|
Revision: 6706 http://libtorrent.svn.sourceforge.net/libtorrent/?rev=6706&view=rev Author: arvidn Date: 2012-04-12 17:10:22 +0000 (Thu, 12 Apr 2012) Log Message: ----------- more asserts in piece_picker to validate peer pointers Modified Paths: -------------- trunk/src/piece_picker.cpp trunk/test/test_piece_picker.cpp Modified: trunk/src/piece_picker.cpp =================================================================== --- trunk/src/piece_picker.cpp 2012-04-12 05:10:29 UTC (rev 6705) +++ trunk/src/piece_picker.cpp 2012-04-12 17:10:22 UTC (rev 6706) @@ -47,6 +47,7 @@ #ifdef TORRENT_DEBUG #include "libtorrent/peer_connection.hpp" #include "libtorrent/torrent.hpp" +#include "libtorrent/policy.hpp" // for policy::peer #endif #include "libtorrent/invariant_check.hpp" @@ -308,6 +309,7 @@ for (int k = 0; k < num_blocks; ++k) { TORRENT_ASSERT(i->info[k].piece_index == i->index); + TORRENT_ASSERT(i->info[k].peer == 0 || static_cast<policy::peer*>(i->info[k].peer)->in_use); if (i->info[k].state == block_info::state_finished) { ++num_finished; @@ -1372,6 +1374,8 @@ , int options, std::vector<int> const& suggested_pieces , int num_peers) const { + TORRENT_ASSERT(peer == 0 || static_cast<policy::peer*>(peer)->in_use); + // prevent the number of partial pieces to grow indefinitely // make this scale by the number of peers we have. For large // scale clients, we would have more peers, and allow a higher @@ -1618,6 +1622,7 @@ for (int j = 0; j < num_blocks_in_piece; ++j) { block_info const& info = i->info[j]; + TORRENT_ASSERT(info.peer == 0 || static_cast<policy::peer*>(info.peer)->in_use); TORRENT_ASSERT(info.piece_index == i->index); if (info.state != block_info::state_requested || info.peer == peer) @@ -1744,7 +1749,10 @@ { for (std::vector<block_info>::iterator i = m_block_info.begin() , end(m_block_info.end()); i != end; ++i) + { + TORRENT_ASSERT(i->peer == 0 || static_cast<policy::peer*>(i->peer)->in_use); if (i->peer == peer) i->peer = 0; + } } namespace @@ -1761,6 +1769,7 @@ for (int j = 0; j < num_blocks_in_piece; ++j) { piece_picker::block_info const& info = p.info[j]; + TORRENT_ASSERT(info.peer == 0 || static_cast<policy::peer*>(info.peer)->in_use); TORRENT_ASSERT(info.piece_index == p.index); if (info.state != piece_picker::block_info::state_none && info.peer != peer) @@ -2081,6 +2090,7 @@ bool piece_picker::mark_as_downloading(piece_block block , void* peer, piece_state_t state) { + TORRENT_ASSERT(peer == 0 || static_cast<policy::peer*>(peer)->in_use); TORRENT_ASSERT(state != piece_picker::none); TORRENT_ASSERT(block.piece_index >= 0); TORRENT_ASSERT(block.block_index >= 0); @@ -2174,6 +2184,8 @@ TORRENT_PIECE_PICKER_INVARIANT_CHECK; #endif + TORRENT_ASSERT(peer == 0 || static_cast<policy::peer*>(peer)->in_use); + TORRENT_ASSERT(block.piece_index >= 0); TORRENT_ASSERT(block.block_index >= 0); TORRENT_ASSERT(block.piece_index < m_piece_map.size()); @@ -2286,6 +2298,7 @@ void piece_picker::mark_as_finished(piece_block block, void* peer) { + TORRENT_ASSERT(peer == 0 || static_cast<policy::peer*>(peer)->in_use); TORRENT_ASSERT(block.piece_index >= 0); TORRENT_ASSERT(block.block_index >= 0); TORRENT_ASSERT(block.piece_index < m_piece_map.size()); @@ -2365,6 +2378,7 @@ d.clear(); for (int j = 0, end(blocks_in_piece(index)); j != end; ++j) { + TORRENT_ASSERT(i->info[j].peer == 0 || static_cast<policy::peer*>(i->info[j].peer)->in_use); d.push_back(i->info[j].peer); } } @@ -2381,7 +2395,9 @@ if (i->info[block.block_index].state == block_info::state_none) return 0; - return i->info[block.block_index].peer; + void* peer = i->info[block.block_index].peer; + TORRENT_ASSERT(peer == 0 || static_cast<policy::peer*>(peer)->in_use); + return peer; } // this is called when a request is rejected or when @@ -2392,6 +2408,8 @@ TORRENT_PIECE_PICKER_INVARIANT_CHECK; #endif + TORRENT_ASSERT(peer == 0 || static_cast<policy::peer*>(peer)->in_use); + TORRENT_ASSERT(block.piece_index >= 0); TORRENT_ASSERT(block.block_index >= 0); TORRENT_ASSERT(block.piece_index < m_piece_map.size()); @@ -2407,6 +2425,7 @@ TORRENT_ASSERT(i != m_downloads.end()); block_info& info = i->info[block.block_index]; + TORRENT_ASSERT(info.peer == 0 || static_cast<policy::peer*>(info.peer)->in_use); TORRENT_ASSERT(info.piece_index == block.piece_index); TORRENT_ASSERT(info.state != block_info::state_none); @@ -2434,7 +2453,7 @@ info.state = block_info::state_none; --i->requested; update_full(*i); - } + } // if there are no other blocks in this piece // that's being downloaded, remove it from the list Modified: trunk/test/test_piece_picker.cpp =================================================================== --- trunk/test/test_piece_picker.cpp 2012-04-12 05:10:29 UTC (rev 6705) +++ trunk/test/test_piece_picker.cpp 2012-04-12 17:10:22 UTC (rev 6706) @@ -221,13 +221,18 @@ int test_main() { - - int tmp1; - int tmp2; - int tmp3; tcp::endpoint endp; piece_picker::downloading_piece st; + policy::ipv4_peer tmp1(endp, false, 0); + policy::ipv4_peer tmp2(endp, false, 0); + policy::ipv4_peer tmp3(endp, false, 0); policy::ipv4_peer peer_struct(endp, true, 0); +#if defined TORRENT_DEBUG || TORRENT_RELEASE_ASSERTS + tmp1.in_use = true; + tmp2.in_use = true; + tmp3.in_use = true; + peer_struct.in_use = true; +#endif std::vector<piece_block> picked; boost::shared_ptr<piece_picker> p; const std::vector<int> empty_vector; @@ -303,23 +308,23 @@ TEST_CHECK(p->is_requested(piece_block(0, 0)) == false); TEST_CHECK(std::find(picked.begin(), picked.end(), piece_block(0,0)) != picked.end()); - p->mark_as_downloading(piece_block(0, 2), (void*)1337, piece_picker::fast); - p->mark_as_writing(piece_block(0, 2), (void*)1337); - p->abort_download(piece_block(0, 2), (void*)1337); - p->mark_as_downloading(piece_block(0, 2), (void*)7, piece_picker::fast); - p->mark_as_writing(piece_block(0, 2), (void*)7); + p->mark_as_downloading(piece_block(0, 2), &tmp1, piece_picker::fast); + p->mark_as_writing(piece_block(0, 2), &tmp1); + p->abort_download(piece_block(0, 2), &tmp1); + p->mark_as_downloading(piece_block(0, 2), &tmp2, piece_picker::fast); + p->mark_as_writing(piece_block(0, 2), &tmp2); std::vector<void*> d; p->get_downloaders(d, 0); - TEST_CHECK(d[2] == (void*)7); + TEST_CHECK(d[2] == &tmp2); - p->mark_as_downloading(piece_block(0, 3), (void*)1337, piece_picker::fast); - p->abort_download(piece_block(0, 3), (void*)1337); - p->mark_as_downloading(piece_block(0, 3), (void*)7, piece_picker::fast); - p->mark_as_writing(piece_block(0, 3), (void*)7); + p->mark_as_downloading(piece_block(0, 3), &tmp1, piece_picker::fast); + p->abort_download(piece_block(0, 3), &tmp1); + p->mark_as_downloading(piece_block(0, 3), &tmp2, piece_picker::fast); + p->mark_as_writing(piece_block(0, 3), &tmp2); p->get_downloaders(d, 0); - TEST_CHECK(d[3] == (void*)7); + TEST_CHECK(d[3] == &tmp2); // ======================================================== This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ar...@us...> - 2012-04-12 05:10:36
|
Revision: 6705 http://libtorrent.svn.sourceforge.net/libtorrent/?rev=6705&view=rev Author: arvidn Date: 2012-04-12 05:10:29 +0000 (Thu, 12 Apr 2012) Log Message: ----------- merged fixes from trunk Modified Paths: -------------- branches/RC_0_16/include/libtorrent/piece_picker.hpp branches/RC_0_16/src/peer_connection.cpp branches/RC_0_16/src/piece_picker.cpp branches/RC_0_16/src/torrent.cpp Property Changed: ---------------- branches/RC_0_16/ branches/RC_0_16/examples/connection_tester.cpp Property changes on: branches/RC_0_16 ___________________________________________________________________ Modified: svn:mergeinfo - /branches/libtorrent_aio:5693,6230,6329,6384 /branches/libtorrent_utp:3973-5057 /branches/ssl:6336-6361 /trunk:6619,6621,6623,6625,6627,6629,6633-6634,6638,6643,6650-6651,6654,6702 + /branches/libtorrent_aio:5693,6230,6329,6384 /branches/libtorrent_utp:3973-5057 /branches/ssl:6336-6361 /trunk:6619,6621,6623,6625,6627,6629,6633-6634,6638,6643,6650-6651,6654,6702,6704 Property changes on: branches/RC_0_16/examples/connection_tester.cpp ___________________________________________________________________ Modified: svn:mergeinfo - /branches/libtorrent_aio/examples/connection_tester.cpp:4468-6265,6329,6384 /branches/libtorrent_utp/examples/connection_tester.cpp:3973-5057 /branches/ssl/examples/connection_tester.cpp:6336-6361 /trunk/examples/connection_tester.cpp:6619,6621,6623,6625,6627,6629,6633-6634,6638,6643,6650-6651,6654,6702 + /branches/libtorrent_aio/examples/connection_tester.cpp:4468-6265,6329,6384 /branches/libtorrent_utp/examples/connection_tester.cpp:3973-5057 /branches/ssl/examples/connection_tester.cpp:6336-6361 /trunk/examples/connection_tester.cpp:6619,6621,6623,6625,6627,6629,6633-6634,6638,6643,6650-6651,6654,6702,6704 Modified: branches/RC_0_16/include/libtorrent/piece_picker.hpp =================================================================== --- branches/RC_0_16/include/libtorrent/piece_picker.hpp 2012-04-12 05:00:20 UTC (rev 6704) +++ branches/RC_0_16/include/libtorrent/piece_picker.hpp 2012-04-12 05:10:29 UTC (rev 6705) @@ -117,6 +117,10 @@ // the state of this block enum { state_none, state_requested, state_writing, state_finished }; unsigned state:2; +#if defined TORRENT_DEBUG || TORRENT_RELEASE_ASSERTS + // to allow verifying the invariant of blocks belonging to the right piece + int piece_index; +#endif }; // the peers that are downloading this piece Modified: branches/RC_0_16/src/peer_connection.cpp =================================================================== --- branches/RC_0_16/src/peer_connection.cpp 2012-04-12 05:00:20 UTC (rev 6704) +++ branches/RC_0_16/src/peer_connection.cpp 2012-04-12 05:10:29 UTC (rev 6705) @@ -346,6 +346,7 @@ , m_holepunch_mode(false) , m_ignore_stats(false) , m_corked(false) + , m_has_metadata(true) #if defined TORRENT_DEBUG || TORRENT_RELEASE_ASSERTS , m_in_constructor(true) , m_disconnect_started(false) @@ -3869,13 +3870,14 @@ if (peer_info_struct()) { policy::peer* pi = peer_info_struct(); + TORRENT_ASSERT(pi->in_use); p.source = pi->source; p.failcount = pi->failcount; p.num_hashfails = pi->hashfails; p.flags |= pi->on_parole ? peer_info::on_parole : 0; p.flags |= pi->optimistically_unchoked ? peer_info::optimistic_unchoke : 0; #ifndef TORRENT_DISABLE_GEO_IP - p.inet_as = pi->inet_as->first; + p.inet_as = pi->inet_as ? pi->inet_as->first : 0xffff; #endif } else Modified: branches/RC_0_16/src/piece_picker.cpp =================================================================== --- branches/RC_0_16/src/piece_picker.cpp 2012-04-12 05:00:20 UTC (rev 6704) +++ branches/RC_0_16/src/piece_picker.cpp 2012-04-12 05:10:29 UTC (rev 6705) @@ -189,6 +189,9 @@ ret.info[i].num_peers = 0; ret.info[i].state = block_info::state_none; ret.info[i].peer = 0; +#if defined TORRENT_DEBUG || TORRENT_RELEASE_ASSERTS + ret.info[i].piece_index = piece; +#endif } return ret; } @@ -304,6 +307,7 @@ int num_writing = 0; for (int k = 0; k < num_blocks; ++k) { + TORRENT_ASSERT(i->info[k].piece_index == i->index); if (i->info[k].state == block_info::state_finished) { ++num_finished; @@ -827,6 +831,7 @@ int num_blocks = blocks_in_piece(i->index); for (int k = 0; k < num_blocks; ++k) { + TORRENT_ASSERT(i->info[k].piece_index == index); TORRENT_ASSERT(i->info[k].state == block_info::state_finished); TORRENT_ASSERT(i->info[k].num_peers == 0); } @@ -1613,6 +1618,7 @@ for (int j = 0; j < num_blocks_in_piece; ++j) { block_info const& info = i->info[j]; + TORRENT_ASSERT(info.piece_index == i->index); if (info.state != block_info::state_requested || info.peer == peer) continue; @@ -1650,6 +1656,7 @@ for (int j = 0; j < num_blocks_in_piece; ++j) { block_info const& info = i->info[j]; + TORRENT_ASSERT(info.piece_index == i->index); if (info.state != block_info::state_none) continue; std::vector<piece_block>::iterator k = std::find( interesting_blocks.begin(), interesting_blocks.end() @@ -1695,6 +1702,7 @@ for (int j = 0; j < num_blocks_in_piece; ++j) { block_info const& info = k->info[j]; + TORRENT_ASSERT(info.piece_index == k->index); if (info.state == block_info::state_finished) continue; TORRENT_ASSERT(info.peer != 0); } @@ -1753,6 +1761,7 @@ for (int j = 0; j < num_blocks_in_piece; ++j) { piece_picker::block_info const& info = p.info[j]; + TORRENT_ASSERT(info.piece_index == p.index); if (info.state != piece_picker::block_info::state_none && info.peer != peer) { @@ -1882,6 +1891,7 @@ { // ignore completed blocks and already requested blocks block_info const& info = dp.info[j]; + TORRENT_ASSERT(info.piece_index == dp.index); if (info.state != block_info::state_none) continue; backup_blocks2.push_back(piece_block(dp.index, j)); } @@ -1892,6 +1902,7 @@ { // ignore completed blocks and already requested blocks block_info const& info = dp.info[j]; + TORRENT_ASSERT(info.piece_index == dp.index); if (info.state != block_info::state_none) continue; // if the piece is fast and the peer is slow, or vice versa, @@ -1985,6 +1996,7 @@ #ifdef TORRENT_DEBUG for (int k = 0; k < max_blocks; ++k) { + TORRENT_ASSERT(i->info[k].piece_index == index); TORRENT_ASSERT(i->info[k].state == block_info::state_finished || i->info[k].state == block_info::state_writing); } @@ -2033,6 +2045,7 @@ std::vector<downloading_piece>::const_iterator i = find_dl_piece(block.piece_index); TORRENT_ASSERT(i != m_downloads.end()); + TORRENT_ASSERT(i->info[block.block_index].piece_index == block.piece_index); return i->info[block.block_index].state == block_info::state_requested; } @@ -2046,6 +2059,7 @@ if (m_piece_map[block.piece_index].downloading == 0) return false; std::vector<downloading_piece>::const_iterator i = find_dl_piece(block.piece_index); TORRENT_ASSERT(i != m_downloads.end()); + TORRENT_ASSERT(i->info[block.block_index].piece_index == block.piece_index); return i->info[block.block_index].state == block_info::state_finished || i->info[block.block_index].state == block_info::state_writing; } @@ -2060,6 +2074,7 @@ if (m_piece_map[block.piece_index].downloading == 0) return false; std::vector<downloading_piece>::const_iterator i = find_dl_piece(block.piece_index); TORRENT_ASSERT(i != m_downloads.end()); + TORRENT_ASSERT(i->info[block.block_index].piece_index == block.piece_index); return i->info[block.block_index].state == block_info::state_finished; } @@ -2088,6 +2103,7 @@ downloading_piece& dp = add_download_piece(block.piece_index); dp.state = state; block_info& info = dp.info[block.block_index]; + TORRENT_ASSERT(info.piece_index == block.piece_index); info.state = block_info::state_requested; info.peer = peer; info.num_peers = 1; @@ -2102,6 +2118,7 @@ std::vector<downloading_piece>::iterator i = find_dl_piece(block.piece_index); TORRENT_ASSERT(i != m_downloads.end()); block_info& info = i->info[block.block_index]; + TORRENT_ASSERT(info.piece_index == block.piece_index); if (info.state == block_info::state_writing || info.state == block_info::state_finished) return false; @@ -2135,6 +2152,7 @@ TORRENT_ASSERT(i != m_downloads.end()); block_info const& info = i->info[block.block_index]; + TORRENT_ASSERT(info.piece_index == block.piece_index); return info.num_peers; } @@ -2181,6 +2199,7 @@ downloading_piece& dp = add_download_piece(block.piece_index); dp.state = none; block_info& info = dp.info[block.block_index]; + TORRENT_ASSERT(info.piece_index == block.piece_index); info.state = block_info::state_writing; info.peer = peer; info.num_peers = 0; @@ -2194,6 +2213,8 @@ TORRENT_ASSERT(i != m_downloads.end()); block_info& info = i->info[block.block_index]; + TORRENT_ASSERT(info.piece_index == block.piece_index); + info.peer = peer; if (info.state == block_info::state_requested) --i->requested; TORRENT_ASSERT(i->requested >= 0); @@ -2203,6 +2224,7 @@ ++i->writing; info.state = block_info::state_writing; + TORRENT_ASSERT(info.piece_index == block.piece_index); // all other requests for this block should have been // cancelled now @@ -2228,6 +2250,7 @@ if (i == m_downloads.end()) return; block_info& info = i->info[block.block_index]; + TORRENT_ASSERT(info.piece_index == block.piece_index); TORRENT_ASSERT(info.state == block_info::state_writing); TORRENT_ASSERT(info.num_peers == 0); @@ -2289,6 +2312,7 @@ downloading_piece& dp = add_download_piece(block.piece_index); dp.state = none; block_info& info = dp.info[block.block_index]; + TORRENT_ASSERT(info.piece_index == block.piece_index); info.peer = peer; TORRENT_ASSERT(info.state == block_info::state_none); TORRENT_ASSERT(info.num_peers == 0); @@ -2308,6 +2332,7 @@ std::vector<downloading_piece>::iterator i = find_dl_piece(block.piece_index); TORRENT_ASSERT(i != m_downloads.end()); block_info& info = i->info[block.block_index]; + TORRENT_ASSERT(info.piece_index == block.piece_index); if (info.state == block_info::state_finished) return; @@ -2352,6 +2377,7 @@ TORRENT_ASSERT(block.block_index >= 0); + TORRENT_ASSERT(i->info[block.block_index].piece_index == block.piece_index); if (i->info[block.block_index].state == block_info::state_none) return 0; @@ -2381,6 +2407,7 @@ TORRENT_ASSERT(i != m_downloads.end()); block_info& info = i->info[block.block_index]; + TORRENT_ASSERT(info.piece_index == block.piece_index); TORRENT_ASSERT(info.state != block_info::state_none); Modified: branches/RC_0_16/src/torrent.cpp =================================================================== --- branches/RC_0_16/src/torrent.cpp 2012-04-12 05:00:20 UTC (rev 6704) +++ branches/RC_0_16/src/torrent.cpp 2012-04-12 05:10:29 UTC (rev 6705) @@ -4503,6 +4503,14 @@ if (m_ses.is_aborted()) return; +#ifndef TORRENT_DISABLE_GEO_IP + int as = m_ses.as_for_ip(host->endpoint().address()); +#ifdef TORRENT_DEBUG + web->peer_info.inet_as_num = as; +#endif + web->peer_info.inet_as = m_ses.lookup_as(as); +#endif + if (int(m_connections.size()) >= m_max_connections || m_ses.num_connections() >= m_ses.settings().connections_limit) return; @@ -5351,6 +5359,7 @@ i != end(); ++i) { peer_connection* peer = *i; + TORRENT_ASSERT(peer->m_in_use == 1337); // incoming peers that haven't finished the handshake should // not be included in this list This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ar...@us...> - 2012-04-12 05:00:26
|
Revision: 6704 http://libtorrent.svn.sourceforge.net/libtorrent/?rev=6704&view=rev Author: arvidn Date: 2012-04-12 05:00:20 +0000 (Thu, 12 Apr 2012) Log Message: ----------- added more asserts in an attempt to track down invalid policy peer pointers in the piece picker. also fixed a web seed related crash when geoip support is enabled Modified Paths: -------------- trunk/include/libtorrent/piece_picker.hpp trunk/src/peer_connection.cpp trunk/src/piece_picker.cpp trunk/src/torrent.cpp Modified: trunk/include/libtorrent/piece_picker.hpp =================================================================== --- trunk/include/libtorrent/piece_picker.hpp 2012-04-12 00:37:37 UTC (rev 6703) +++ trunk/include/libtorrent/piece_picker.hpp 2012-04-12 05:00:20 UTC (rev 6704) @@ -117,6 +117,10 @@ // the state of this block enum { state_none, state_requested, state_writing, state_finished }; unsigned state:2; +#if defined TORRENT_DEBUG || TORRENT_RELEASE_ASSERTS + // to allow verifying the invariant of blocks belonging to the right piece + int piece_index; +#endif }; // the peers that are downloading this piece Modified: trunk/src/peer_connection.cpp =================================================================== --- trunk/src/peer_connection.cpp 2012-04-12 00:37:37 UTC (rev 6703) +++ trunk/src/peer_connection.cpp 2012-04-12 05:00:20 UTC (rev 6704) @@ -346,6 +346,7 @@ , m_holepunch_mode(false) , m_ignore_stats(false) , m_corked(false) + , m_has_metadata(true) #if defined TORRENT_DEBUG || TORRENT_RELEASE_ASSERTS , m_in_constructor(true) , m_disconnect_started(false) @@ -3869,13 +3870,14 @@ if (peer_info_struct()) { policy::peer* pi = peer_info_struct(); + TORRENT_ASSERT(pi->in_use); p.source = pi->source; p.failcount = pi->failcount; p.num_hashfails = pi->hashfails; p.flags |= pi->on_parole ? peer_info::on_parole : 0; p.flags |= pi->optimistically_unchoked ? peer_info::optimistic_unchoke : 0; #ifndef TORRENT_DISABLE_GEO_IP - p.inet_as = pi->inet_as->first; + p.inet_as = pi->inet_as ? pi->inet_as->first : 0xffff; #endif } else Modified: trunk/src/piece_picker.cpp =================================================================== --- trunk/src/piece_picker.cpp 2012-04-12 00:37:37 UTC (rev 6703) +++ trunk/src/piece_picker.cpp 2012-04-12 05:00:20 UTC (rev 6704) @@ -189,6 +189,9 @@ ret.info[i].num_peers = 0; ret.info[i].state = block_info::state_none; ret.info[i].peer = 0; +#if defined TORRENT_DEBUG || TORRENT_RELEASE_ASSERTS + ret.info[i].piece_index = piece; +#endif } return ret; } @@ -304,6 +307,7 @@ int num_writing = 0; for (int k = 0; k < num_blocks; ++k) { + TORRENT_ASSERT(i->info[k].piece_index == i->index); if (i->info[k].state == block_info::state_finished) { ++num_finished; @@ -827,6 +831,7 @@ int num_blocks = blocks_in_piece(i->index); for (int k = 0; k < num_blocks; ++k) { + TORRENT_ASSERT(i->info[k].piece_index == index); TORRENT_ASSERT(i->info[k].state == block_info::state_finished); TORRENT_ASSERT(i->info[k].num_peers == 0); } @@ -1613,6 +1618,7 @@ for (int j = 0; j < num_blocks_in_piece; ++j) { block_info const& info = i->info[j]; + TORRENT_ASSERT(info.piece_index == i->index); if (info.state != block_info::state_requested || info.peer == peer) continue; @@ -1650,6 +1656,7 @@ for (int j = 0; j < num_blocks_in_piece; ++j) { block_info const& info = i->info[j]; + TORRENT_ASSERT(info.piece_index == i->index); if (info.state != block_info::state_none) continue; std::vector<piece_block>::iterator k = std::find( interesting_blocks.begin(), interesting_blocks.end() @@ -1695,6 +1702,7 @@ for (int j = 0; j < num_blocks_in_piece; ++j) { block_info const& info = k->info[j]; + TORRENT_ASSERT(info.piece_index == k->index); if (info.state == block_info::state_finished) continue; TORRENT_ASSERT(info.peer != 0); } @@ -1753,6 +1761,7 @@ for (int j = 0; j < num_blocks_in_piece; ++j) { piece_picker::block_info const& info = p.info[j]; + TORRENT_ASSERT(info.piece_index == p.index); if (info.state != piece_picker::block_info::state_none && info.peer != peer) { @@ -1882,6 +1891,7 @@ { // ignore completed blocks and already requested blocks block_info const& info = dp.info[j]; + TORRENT_ASSERT(info.piece_index == dp.index); if (info.state != block_info::state_none) continue; backup_blocks2.push_back(piece_block(dp.index, j)); } @@ -1892,6 +1902,7 @@ { // ignore completed blocks and already requested blocks block_info const& info = dp.info[j]; + TORRENT_ASSERT(info.piece_index == dp.index); if (info.state != block_info::state_none) continue; // if the piece is fast and the peer is slow, or vice versa, @@ -1985,6 +1996,7 @@ #ifdef TORRENT_DEBUG for (int k = 0; k < max_blocks; ++k) { + TORRENT_ASSERT(i->info[k].piece_index == index); TORRENT_ASSERT(i->info[k].state == block_info::state_finished || i->info[k].state == block_info::state_writing); } @@ -2033,6 +2045,7 @@ std::vector<downloading_piece>::const_iterator i = find_dl_piece(block.piece_index); TORRENT_ASSERT(i != m_downloads.end()); + TORRENT_ASSERT(i->info[block.block_index].piece_index == block.piece_index); return i->info[block.block_index].state == block_info::state_requested; } @@ -2046,6 +2059,7 @@ if (m_piece_map[block.piece_index].downloading == 0) return false; std::vector<downloading_piece>::const_iterator i = find_dl_piece(block.piece_index); TORRENT_ASSERT(i != m_downloads.end()); + TORRENT_ASSERT(i->info[block.block_index].piece_index == block.piece_index); return i->info[block.block_index].state == block_info::state_finished || i->info[block.block_index].state == block_info::state_writing; } @@ -2060,6 +2074,7 @@ if (m_piece_map[block.piece_index].downloading == 0) return false; std::vector<downloading_piece>::const_iterator i = find_dl_piece(block.piece_index); TORRENT_ASSERT(i != m_downloads.end()); + TORRENT_ASSERT(i->info[block.block_index].piece_index == block.piece_index); return i->info[block.block_index].state == block_info::state_finished; } @@ -2088,6 +2103,7 @@ downloading_piece& dp = add_download_piece(block.piece_index); dp.state = state; block_info& info = dp.info[block.block_index]; + TORRENT_ASSERT(info.piece_index == block.piece_index); info.state = block_info::state_requested; info.peer = peer; info.num_peers = 1; @@ -2102,6 +2118,7 @@ std::vector<downloading_piece>::iterator i = find_dl_piece(block.piece_index); TORRENT_ASSERT(i != m_downloads.end()); block_info& info = i->info[block.block_index]; + TORRENT_ASSERT(info.piece_index == block.piece_index); if (info.state == block_info::state_writing || info.state == block_info::state_finished) return false; @@ -2135,6 +2152,7 @@ TORRENT_ASSERT(i != m_downloads.end()); block_info const& info = i->info[block.block_index]; + TORRENT_ASSERT(info.piece_index == block.piece_index); return info.num_peers; } @@ -2181,6 +2199,7 @@ downloading_piece& dp = add_download_piece(block.piece_index); dp.state = none; block_info& info = dp.info[block.block_index]; + TORRENT_ASSERT(info.piece_index == block.piece_index); info.state = block_info::state_writing; info.peer = peer; info.num_peers = 0; @@ -2194,6 +2213,8 @@ TORRENT_ASSERT(i != m_downloads.end()); block_info& info = i->info[block.block_index]; + TORRENT_ASSERT(info.piece_index == block.piece_index); + info.peer = peer; if (info.state == block_info::state_requested) --i->requested; TORRENT_ASSERT(i->requested >= 0); @@ -2203,6 +2224,7 @@ ++i->writing; info.state = block_info::state_writing; + TORRENT_ASSERT(info.piece_index == block.piece_index); // all other requests for this block should have been // cancelled now @@ -2228,6 +2250,7 @@ if (i == m_downloads.end()) return; block_info& info = i->info[block.block_index]; + TORRENT_ASSERT(info.piece_index == block.piece_index); TORRENT_ASSERT(info.state == block_info::state_writing); TORRENT_ASSERT(info.num_peers == 0); @@ -2289,6 +2312,7 @@ downloading_piece& dp = add_download_piece(block.piece_index); dp.state = none; block_info& info = dp.info[block.block_index]; + TORRENT_ASSERT(info.piece_index == block.piece_index); info.peer = peer; TORRENT_ASSERT(info.state == block_info::state_none); TORRENT_ASSERT(info.num_peers == 0); @@ -2308,6 +2332,7 @@ std::vector<downloading_piece>::iterator i = find_dl_piece(block.piece_index); TORRENT_ASSERT(i != m_downloads.end()); block_info& info = i->info[block.block_index]; + TORRENT_ASSERT(info.piece_index == block.piece_index); if (info.state == block_info::state_finished) return; @@ -2352,6 +2377,7 @@ TORRENT_ASSERT(block.block_index >= 0); + TORRENT_ASSERT(i->info[block.block_index].piece_index == block.piece_index); if (i->info[block.block_index].state == block_info::state_none) return 0; @@ -2381,6 +2407,7 @@ TORRENT_ASSERT(i != m_downloads.end()); block_info& info = i->info[block.block_index]; + TORRENT_ASSERT(info.piece_index == block.piece_index); TORRENT_ASSERT(info.state != block_info::state_none); Modified: trunk/src/torrent.cpp =================================================================== --- trunk/src/torrent.cpp 2012-04-12 00:37:37 UTC (rev 6703) +++ trunk/src/torrent.cpp 2012-04-12 05:00:20 UTC (rev 6704) @@ -4503,6 +4503,14 @@ if (m_ses.is_aborted()) return; +#ifndef TORRENT_DISABLE_GEO_IP + int as = m_ses.as_for_ip(host->endpoint().address()); +#ifdef TORRENT_DEBUG + web->peer_info.inet_as_num = as; +#endif + web->peer_info.inet_as = m_ses.lookup_as(as); +#endif + if (int(m_connections.size()) >= m_max_connections || m_ses.num_connections() >= m_ses.settings().connections_limit) return; @@ -5351,6 +5359,7 @@ i != end(); ++i) { peer_connection* peer = *i; + TORRENT_ASSERT(peer->m_in_use == 1337); // incoming peers that haven't finished the handshake should // not be included in this list This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ar...@us...> - 2012-04-12 00:37:43
|
Revision: 6703 http://libtorrent.svn.sourceforge.net/libtorrent/?rev=6703&view=rev Author: arvidn Date: 2012-04-12 00:37:37 +0000 (Thu, 12 Apr 2012) Log Message: ----------- merged changes from trunk Modified Paths: -------------- branches/RC_0_16/ChangeLog branches/RC_0_16/src/session_impl.cpp Property Changed: ---------------- branches/RC_0_16/ branches/RC_0_16/examples/connection_tester.cpp Property changes on: branches/RC_0_16 ___________________________________________________________________ Modified: svn:mergeinfo - /branches/libtorrent_aio:5693,6230,6329,6384 /branches/libtorrent_utp:3973-5057 /branches/ssl:6336-6361 /trunk:6619,6621,6623,6625,6627,6629,6633-6634,6638,6643,6650-6651,6654 + /branches/libtorrent_aio:5693,6230,6329,6384 /branches/libtorrent_utp:3973-5057 /branches/ssl:6336-6361 /trunk:6619,6621,6623,6625,6627,6629,6633-6634,6638,6643,6650-6651,6654,6702 Modified: branches/RC_0_16/ChangeLog =================================================================== --- branches/RC_0_16/ChangeLog 2012-04-12 00:02:35 UTC (rev 6702) +++ branches/RC_0_16/ChangeLog 2012-04-12 00:37:37 UTC (rev 6703) @@ -1,4 +1,7 @@ + * fixed unchoke logic when using web seeds + * fixed compatibility with older versions of boost (down to boost 1.40) + 0.16 release * support torrents with more than 262000 pieces Property changes on: branches/RC_0_16/examples/connection_tester.cpp ___________________________________________________________________ Modified: svn:mergeinfo - /branches/libtorrent_aio/examples/connection_tester.cpp:4468-6265,6329,6384 /branches/libtorrent_utp/examples/connection_tester.cpp:3973-5057 /branches/ssl/examples/connection_tester.cpp:6336-6361 /trunk/examples/connection_tester.cpp:6619,6621,6623,6625,6627,6629,6633-6634,6638,6643,6650-6651,6654 + /branches/libtorrent_aio/examples/connection_tester.cpp:4468-6265,6329,6384 /branches/libtorrent_utp/examples/connection_tester.cpp:3973-5057 /branches/ssl/examples/connection_tester.cpp:6336-6361 /trunk/examples/connection_tester.cpp:6619,6621,6623,6625,6627,6629,6633-6634,6638,6643,6650-6651,6654,6702 Modified: branches/RC_0_16/src/session_impl.cpp =================================================================== --- branches/RC_0_16/src/session_impl.cpp 2012-04-12 00:02:35 UTC (rev 6702) +++ branches/RC_0_16/src/session_impl.cpp 2012-04-12 00:37:37 UTC (rev 6703) @@ -4310,6 +4310,7 @@ TORRENT_ASSERT(p); policy::peer* pi = p->peer_info_struct(); if (!pi) continue; + if (pi->web_seed) continue; torrent* t = p->associated_torrent().lock().get(); if (!t) continue; if (t->is_paused()) continue; @@ -4408,7 +4409,8 @@ torrent* t = p->associated_torrent().lock().get(); policy::peer* pi = p->peer_info_struct(); - if (p->ignore_unchoke_slots() || t == 0 || pi == 0 || t->is_paused()) continue; + if (p->ignore_unchoke_slots() || t == 0 || pi == 0 || pi->web_seed || t->is_paused()) + continue; if (m_settings.choking_algorithm == session_settings::bittyrant_choker) { This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ar...@us...> - 2012-04-12 00:02:42
|
Revision: 6702 http://libtorrent.svn.sourceforge.net/libtorrent/?rev=6702&view=rev Author: arvidn Date: 2012-04-12 00:02:35 +0000 (Thu, 12 Apr 2012) Log Message: ----------- fixed unchoke logic when using web seeds Modified Paths: -------------- trunk/ChangeLog trunk/src/session_impl.cpp Modified: trunk/ChangeLog =================================================================== --- trunk/ChangeLog 2012-04-11 17:39:13 UTC (rev 6701) +++ trunk/ChangeLog 2012-04-12 00:02:35 UTC (rev 6702) @@ -1,4 +1,7 @@ + * fixed unchoke logic when using web seeds + * fixed compatibility with older versions of boost (down to boost 1.40) + 0.16 release * support torrents with more than 262000 pieces Modified: trunk/src/session_impl.cpp =================================================================== --- trunk/src/session_impl.cpp 2012-04-11 17:39:13 UTC (rev 6701) +++ trunk/src/session_impl.cpp 2012-04-12 00:02:35 UTC (rev 6702) @@ -4310,6 +4310,7 @@ TORRENT_ASSERT(p); policy::peer* pi = p->peer_info_struct(); if (!pi) continue; + if (pi->web_seed) continue; torrent* t = p->associated_torrent().lock().get(); if (!t) continue; if (t->is_paused()) continue; @@ -4408,7 +4409,8 @@ torrent* t = p->associated_torrent().lock().get(); policy::peer* pi = p->peer_info_struct(); - if (p->ignore_unchoke_slots() || t == 0 || pi == 0 || t->is_paused()) continue; + if (p->ignore_unchoke_slots() || t == 0 || pi == 0 || pi->web_seed || t->is_paused()) + continue; if (m_settings.choking_algorithm == session_settings::bittyrant_choker) { This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |