diff --git a/Jamfile b/Jamfile index ed30d2a3a..542897f5c 100755 --- a/Jamfile +++ b/Jamfile @@ -4,6 +4,7 @@ import modules ; import os ; import errors ; import feature : feature ; +#import pch ; BOOST_ROOT = [ modules.peek : BOOST_ROOT ] ; @@ -157,11 +158,14 @@ project torrent ; +#cpp-pch pch : include/libtorrent/pch.hpp ; + lib torrent : src/$(SOURCES) zlib/$(ZLIB_SOURCES) $(LIBS) +# pch : on:src/$(KADEMLIA_SOURCES) logging:src/$(KADEMLIA_SOURCES) diff --git a/include/Makefile.am b/include/Makefile.am index 7b1f4d66a..59b1e26cc 100644 --- a/include/Makefile.am +++ b/include/Makefile.am @@ -23,6 +23,7 @@ libtorrent/peer_connection.hpp \ libtorrent/bt_peer_connection.hpp \ libtorrent/web_peer_connection.hpp \ libtorrent/natpmp.hpp \ +libtorrent/pch.hpp \ libtorrent/peer_id.hpp \ libtorrent/peer_info.hpp \ libtorrent/peer_request.hpp \ diff --git a/include/libtorrent/hasher.hpp b/include/libtorrent/hasher.hpp index 803b758eb..434dff3bf 100755 --- a/include/libtorrent/hasher.hpp +++ b/include/libtorrent/hasher.hpp @@ -38,6 +38,7 @@ POSSIBILITY OF SUCH DAMAGE. #include "libtorrent/peer_id.hpp" #include "libtorrent/config.hpp" +#include "zlib.h" // from sha1.cpp struct TORRENT_EXPORT SHA1_CTX @@ -51,12 +52,6 @@ TORRENT_EXPORT void SHA1Init(SHA1_CTX* context); TORRENT_EXPORT void SHA1Update(SHA1_CTX* context, boost::uint8_t const* data, boost::uint32_t len); TORRENT_EXPORT void SHA1Final(SHA1_CTX* context, boost::uint8_t* digest); -extern "C" -{ - // from zlib/adler32.c - unsigned long adler32(unsigned long adler, const char* data, unsigned int len); -} - namespace libtorrent { @@ -69,7 +64,7 @@ namespace libtorrent { assert(data != 0); assert(len > 0); - m_adler = adler32(m_adler, data, len); + m_adler = adler32(m_adler, (const Bytef*)data, len); } unsigned long final() const { return m_adler; } void reset() { m_adler = adler32(0, 0, 0); } diff --git a/include/libtorrent/pch.hpp b/include/libtorrent/pch.hpp new file mode 100644 index 000000000..735999826 --- /dev/null +++ b/include/libtorrent/pch.hpp @@ -0,0 +1,96 @@ +#ifdef BOOST_BUILD_PCH_ENABLED + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#ifdef __OBJC__ +#define Protocol Protocol_ +#endif + +#include +#include +#include +#include +#include +#include + +#ifdef __OBJC__ +#undef Protocol +#endif + +#endif + diff --git a/include/libtorrent/storage.hpp b/include/libtorrent/storage.hpp index 67774a7ea..5e545186e 100755 --- a/include/libtorrent/storage.hpp +++ b/include/libtorrent/storage.hpp @@ -126,7 +126,7 @@ namespace libtorrent bool check_fastresume(aux::piece_checker_data& d , std::vector& pieces, int& num_pieces, bool compact_mode); std::pair check_files(std::vector& pieces - , int& num_pieces); + , int& num_pieces, boost::recursive_mutex& mutex); void release_files(); diff --git a/src/Makefile.am b/src/Makefile.am index 71bf4b150..7b0300d3c 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -51,6 +51,7 @@ $(top_srcdir)/include/libtorrent/peer_connection.hpp \ $(top_srcdir)/include/libtorrent/bt_peer_connection.hpp \ $(top_srcdir)/include/libtorrent/web_peer_connection.hpp \ $(top_srcdir)/include/libtorrent/natpmp.hpp \ +$(top_srcdir)/include/libtorrent/pch.hpp \ $(top_srcdir)/include/libtorrent/peer_id.hpp \ $(top_srcdir)/include/libtorrent/peer_info.hpp \ $(top_srcdir)/include/libtorrent/peer_request.hpp \ diff --git a/src/alert.cpp b/src/alert.cpp index 781265b92..066458cdf 100755 --- a/src/alert.cpp +++ b/src/alert.cpp @@ -30,6 +30,8 @@ POSSIBILITY OF SUCH DAMAGE. */ +#include "libtorrent/pch.hpp" + #include "libtorrent/alert.hpp" namespace libtorrent { diff --git a/src/allocate_resources.cpp b/src/allocate_resources.cpp index 7e342ee95..deef06dc4 100644 --- a/src/allocate_resources.cpp +++ b/src/allocate_resources.cpp @@ -42,6 +42,8 @@ POSSIBILITY OF SUCH DAMAGE. //generation of the min and max macros in Visual C++, #define //NOMINMAX before #including . +#include "libtorrent/pch.hpp" + #ifdef _WIN32 //support boost1.32.0(2004-11-19 18:47) //now all libs can be compiled and linked with static module diff --git a/src/bandwidth_manager.cpp b/src/bandwidth_manager.cpp index a5868d439..7995fab13 100644 --- a/src/bandwidth_manager.cpp +++ b/src/bandwidth_manager.cpp @@ -30,6 +30,8 @@ POSSIBILITY OF SUCH DAMAGE. */ +#include "libtorrent/pch.hpp" + #include "libtorrent/invariant_check.hpp" #include "libtorrent/bandwidth_manager.hpp" #include "libtorrent/peer_connection.hpp" diff --git a/src/bt_peer_connection.cpp b/src/bt_peer_connection.cpp index ed6e93a07..8b4f02904 100755 --- a/src/bt_peer_connection.cpp +++ b/src/bt_peer_connection.cpp @@ -30,6 +30,8 @@ POSSIBILITY OF SUCH DAMAGE. */ +#include "libtorrent/pch.hpp" + #include #include #include diff --git a/src/entry.cpp b/src/entry.cpp index 55cbc3649..6506ed4c2 100755 --- a/src/entry.cpp +++ b/src/entry.cpp @@ -30,6 +30,8 @@ POSSIBILITY OF SUCH DAMAGE. */ +#include "libtorrent/pch.hpp" + #include #include #include "libtorrent/entry.hpp" diff --git a/src/escape_string.cpp b/src/escape_string.cpp index 80d134ed7..02a4fa085 100755 --- a/src/escape_string.cpp +++ b/src/escape_string.cpp @@ -30,6 +30,8 @@ POSSIBILITY OF SUCH DAMAGE. */ +#include "libtorrent/pch.hpp" + #include #include #include diff --git a/src/file.cpp b/src/file.cpp index 2542f31de..28fea84b6 100755 --- a/src/file.cpp +++ b/src/file.cpp @@ -30,6 +30,8 @@ POSSIBILITY OF SUCH DAMAGE. */ +#include "libtorrent/pch.hpp" + #ifdef _WIN32 // windows part #include "libtorrent/utf8.hpp" diff --git a/src/file_pool.cpp b/src/file_pool.cpp index f980a0f23..2b71fd4c0 100644 --- a/src/file_pool.cpp +++ b/src/file_pool.cpp @@ -30,6 +30,8 @@ POSSIBILITY OF SUCH DAMAGE. */ +#include "libtorrent/pch.hpp" + #include "libtorrent/file_pool.hpp" #include diff --git a/src/http_tracker_connection.cpp b/src/http_tracker_connection.cpp index f546df114..8db836096 100755 --- a/src/http_tracker_connection.cpp +++ b/src/http_tracker_connection.cpp @@ -30,6 +30,8 @@ POSSIBILITY OF SUCH DAMAGE. */ +#include "libtorrent/pch.hpp" + #include #include #include diff --git a/src/identify_client.cpp b/src/identify_client.cpp index bfc06363c..3d1f7e024 100755 --- a/src/identify_client.cpp +++ b/src/identify_client.cpp @@ -30,6 +30,8 @@ POSSIBILITY OF SUCH DAMAGE. */ +#include "libtorrent/pch.hpp" + #include #include diff --git a/src/ip_filter.cpp b/src/ip_filter.cpp index 0afb5a346..92ea711c7 100644 --- a/src/ip_filter.cpp +++ b/src/ip_filter.cpp @@ -30,6 +30,8 @@ POSSIBILITY OF SUCH DAMAGE. */ +#include "libtorrent/pch.hpp" + #include "libtorrent/ip_filter.hpp" #include //#include diff --git a/src/kademlia/closest_nodes.cpp b/src/kademlia/closest_nodes.cpp index e8bb9781c..e461bc453 100644 --- a/src/kademlia/closest_nodes.cpp +++ b/src/kademlia/closest_nodes.cpp @@ -30,6 +30,8 @@ POSSIBILITY OF SUCH DAMAGE. */ +#include "libtorrent/pch.hpp" + #include #include #include diff --git a/src/kademlia/dht_tracker.cpp b/src/kademlia/dht_tracker.cpp index 3b2e9a50b..f5aaf4ffc 100644 --- a/src/kademlia/dht_tracker.cpp +++ b/src/kademlia/dht_tracker.cpp @@ -30,6 +30,8 @@ POSSIBILITY OF SUCH DAMAGE. */ +#include "libtorrent/pch.hpp" + #include #include #include diff --git a/src/kademlia/find_data.cpp b/src/kademlia/find_data.cpp index 9fe787807..8b47e52cf 100644 --- a/src/kademlia/find_data.cpp +++ b/src/kademlia/find_data.cpp @@ -30,6 +30,8 @@ POSSIBILITY OF SUCH DAMAGE. */ +#include "libtorrent/pch.hpp" + #include #include #include diff --git a/src/kademlia/node.cpp b/src/kademlia/node.cpp index 07da958bb..4de002b95 100644 --- a/src/kademlia/node.cpp +++ b/src/kademlia/node.cpp @@ -30,6 +30,8 @@ POSSIBILITY OF SUCH DAMAGE. */ +#include "libtorrent/pch.hpp" + #include #include #include diff --git a/src/kademlia/node_id.cpp b/src/kademlia/node_id.cpp index d435846d2..4ed413714 100644 --- a/src/kademlia/node_id.cpp +++ b/src/kademlia/node_id.cpp @@ -30,6 +30,8 @@ POSSIBILITY OF SUCH DAMAGE. */ +#include "libtorrent/pch.hpp" + #include #include #include diff --git a/src/kademlia/refresh.cpp b/src/kademlia/refresh.cpp index ccd753de9..9536540d6 100644 --- a/src/kademlia/refresh.cpp +++ b/src/kademlia/refresh.cpp @@ -30,6 +30,8 @@ POSSIBILITY OF SUCH DAMAGE. */ +#include "libtorrent/pch.hpp" + #include #include #include diff --git a/src/kademlia/routing_table.cpp b/src/kademlia/routing_table.cpp index 32f7514f2..c09176765 100644 --- a/src/kademlia/routing_table.cpp +++ b/src/kademlia/routing_table.cpp @@ -30,6 +30,8 @@ POSSIBILITY OF SUCH DAMAGE. */ +#include "libtorrent/pch.hpp" + #include #include #include diff --git a/src/kademlia/rpc_manager.cpp b/src/kademlia/rpc_manager.cpp index 25079adea..12f0defba 100644 --- a/src/kademlia/rpc_manager.cpp +++ b/src/kademlia/rpc_manager.cpp @@ -30,6 +30,8 @@ POSSIBILITY OF SUCH DAMAGE. */ +#include "libtorrent/pch.hpp" + #include #include #include diff --git a/src/kademlia/traversal_algorithm.cpp b/src/kademlia/traversal_algorithm.cpp index 1efe76e77..3dcfcaecf 100644 --- a/src/kademlia/traversal_algorithm.cpp +++ b/src/kademlia/traversal_algorithm.cpp @@ -30,6 +30,8 @@ POSSIBILITY OF SUCH DAMAGE. */ +#include "libtorrent/pch.hpp" + #include #include #include diff --git a/src/logger.cpp b/src/logger.cpp index be101d02c..c8f6f7a74 100644 --- a/src/logger.cpp +++ b/src/logger.cpp @@ -30,6 +30,8 @@ POSSIBILITY OF SUCH DAMAGE. */ +#include "libtorrent/pch.hpp" + #ifdef _MSC_VER #pragma warning(push, 1) #endif diff --git a/src/metadata_transfer.cpp b/src/metadata_transfer.cpp index 3777cd71e..0bb2623df 100644 --- a/src/metadata_transfer.cpp +++ b/src/metadata_transfer.cpp @@ -30,6 +30,8 @@ POSSIBILITY OF SUCH DAMAGE. */ +#include "libtorrent/pch.hpp" + #ifdef _MSC_VER #pragma warning(push, 1) #endif diff --git a/src/natpmp.cpp b/src/natpmp.cpp index 4b0266157..ba89e1c80 100644 --- a/src/natpmp.cpp +++ b/src/natpmp.cpp @@ -30,6 +30,8 @@ POSSIBILITY OF SUCH DAMAGE. */ +#include "libtorrent/pch.hpp" + #include #include #include @@ -302,7 +304,7 @@ void natpmp::on_reply(asio::error_code const& e case 2: errmsg << "Not authorized to create port map (enable NAT-PMP on your router)"; break; case 3: errmsg << "Network failure"; break; case 4: errmsg << "Out of resources"; break; - case 5: errmsg << "Unsupported opcpde"; break; + case 5: errmsg << "Unsupported opcode"; break; } throw std::runtime_error(errmsg.str()); } diff --git a/src/peer_connection.cpp b/src/peer_connection.cpp index d43d20192..78e561f65 100755 --- a/src/peer_connection.cpp +++ b/src/peer_connection.cpp @@ -30,6 +30,8 @@ POSSIBILITY OF SUCH DAMAGE. */ +#include "libtorrent/pch.hpp" + #include #include #include diff --git a/src/piece_picker.cpp b/src/piece_picker.cpp index 9efa2c861..5e29ec9dc 100755 --- a/src/piece_picker.cpp +++ b/src/piece_picker.cpp @@ -30,6 +30,8 @@ POSSIBILITY OF SUCH DAMAGE. */ +#include "libtorrent/pch.hpp" + #include #include #include diff --git a/src/policy.cpp b/src/policy.cpp index 785e21fad..067cdcb8f 100755 --- a/src/policy.cpp +++ b/src/policy.cpp @@ -30,9 +30,9 @@ POSSIBILITY OF SUCH DAMAGE. */ -#include +#include "libtorrent/pch.hpp" -#include "libtorrent/peer_connection.hpp" +#include #ifdef _MSC_VER #pragma warning(push, 1) @@ -45,6 +45,7 @@ POSSIBILITY OF SUCH DAMAGE. #pragma warning(pop) #endif +#include "libtorrent/peer_connection.hpp" #include "libtorrent/web_peer_connection.hpp" #include "libtorrent/policy.hpp" #include "libtorrent/torrent.hpp" diff --git a/src/session.cpp b/src/session.cpp index a9b8280b1..7d0ca8983 100755 --- a/src/session.cpp +++ b/src/session.cpp @@ -30,6 +30,8 @@ POSSIBILITY OF SUCH DAMAGE. */ +#include "libtorrent/pch.hpp" + #include #include #include diff --git a/src/session_impl.cpp b/src/session_impl.cpp index f2a90fc6d..29066a3b6 100755 --- a/src/session_impl.cpp +++ b/src/session_impl.cpp @@ -30,6 +30,8 @@ POSSIBILITY OF SUCH DAMAGE. */ +#include "libtorrent/pch.hpp" + #include #include #include diff --git a/src/sha1.cpp b/src/sha1.cpp index 1d04b4a17..e198c45a0 100755 --- a/src/sha1.cpp +++ b/src/sha1.cpp @@ -10,6 +10,8 @@ By Steve Reid changelog at the end of the file. */ +#include "libtorrent/pch.hpp" + #include #include diff --git a/src/stat.cpp b/src/stat.cpp index c36bd3725..d695edc42 100755 --- a/src/stat.cpp +++ b/src/stat.cpp @@ -35,11 +35,13 @@ POSSIBILITY OF SUCH DAMAGE. // per second and one (low pass-filter) for rates < 1 // packet per second. +#include "libtorrent/pch.hpp" + #include +#include #include "libtorrent/stat.hpp" #include "libtorrent/invariant_check.hpp" -#include #if defined _MSC_VER && _MSC_VER <= 1200 #define for if (false) {} else for diff --git a/src/storage.cpp b/src/storage.cpp index 11eacd9f9..59632263e 100755 --- a/src/storage.cpp +++ b/src/storage.cpp @@ -30,6 +30,8 @@ POSSIBILITY OF SUCH DAMAGE. */ +#include "libtorrent/pch.hpp" + #include #include #include @@ -716,7 +718,7 @@ namespace libtorrent std::pair check_files( std::vector& pieces - , int& num_pieces); + , int& num_pieces, boost::recursive_mutex& mutex); void release_files(); @@ -764,7 +766,8 @@ namespace libtorrent , int current_slot , std::vector& have_pieces , int& num_pieces - , const std::multimap& hash_to_piece); + , const std::multimap& hash_to_piece + , boost::recursive_mutex& mutex); int allocate_slot_for_piece(int piece_index); #ifndef NDEBUG @@ -1063,7 +1066,8 @@ namespace libtorrent , int current_slot , std::vector& have_pieces , int& num_pieces - , const std::multimap& hash_to_piece) + , const std::multimap& hash_to_piece + , boost::recursive_mutex& mutex) { // INVARIANT_CHECK; @@ -1123,6 +1127,9 @@ namespace libtorrent { const int piece_index = current_slot; + // lock because we're writing to have_pieces + boost::recursive_mutex::scoped_lock l(mutex); + if (have_pieces[piece_index]) { // we have already found a piece with @@ -1192,6 +1199,9 @@ namespace libtorrent if (free_piece >= 0) { + // lock because we're writing to have_pieces + boost::recursive_mutex::scoped_lock l(mutex); + assert(have_pieces[free_piece] == false); assert(m_piece_to_slot[free_piece] == has_no_slot); have_pieces[free_piece] = true; @@ -1304,7 +1314,7 @@ namespace libtorrent // file check is at. 0 is nothing done, and 1 // is finished std::pair piece_manager::impl::check_files( - std::vector& pieces, int& num_pieces) + std::vector& pieces, int& num_pieces, boost::recursive_mutex& mutex) { assert(num_pieces == std::count(pieces.begin(), pieces.end(), true)); @@ -1395,7 +1405,8 @@ namespace libtorrent , m_current_slot , pieces , num_pieces - , m_hash_to_piece); + , m_hash_to_piece + , mutex); assert(num_pieces == std::count(pieces.begin(), pieces.end(), true)); assert(piece_index == unassigned || piece_index >= 0); @@ -1664,9 +1675,10 @@ namespace libtorrent std::pair piece_manager::check_files( std::vector& pieces - , int& num_pieces) + , int& num_pieces + , boost::recursive_mutex& mutex) { - return m_pimpl->check_files(pieces, num_pieces); + return m_pimpl->check_files(pieces, num_pieces, mutex); } int piece_manager::impl::allocate_slot_for_piece(int piece_index) diff --git a/src/torrent.cpp b/src/torrent.cpp index da9f863e6..557765cf1 100755 --- a/src/torrent.cpp +++ b/src/torrent.cpp @@ -29,6 +29,9 @@ ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ + +#include "libtorrent/pch.hpp" + #include #include #include @@ -2099,7 +2102,8 @@ namespace libtorrent std::pair progress(true, 1.f); try { - progress = m_storage->check_files(m_have_pieces, m_num_pieces); + progress = m_storage->check_files(m_have_pieces, m_num_pieces + , m_ses.m_mutex); } catch (std::exception& e) { diff --git a/src/torrent_handle.cpp b/src/torrent_handle.cpp index dcc46fd47..75a2c65c6 100755 --- a/src/torrent_handle.cpp +++ b/src/torrent_handle.cpp @@ -30,6 +30,8 @@ POSSIBILITY OF SUCH DAMAGE. */ +#include "libtorrent/pch.hpp" + #include #include #include diff --git a/src/torrent_info.cpp b/src/torrent_info.cpp index 238864283..7aacdc355 100755 --- a/src/torrent_info.cpp +++ b/src/torrent_info.cpp @@ -30,6 +30,8 @@ POSSIBILITY OF SUCH DAMAGE. */ +#include "libtorrent/pch.hpp" + #include #include #include diff --git a/src/tracker_manager.cpp b/src/tracker_manager.cpp index f27620072..ed3f6b620 100755 --- a/src/tracker_manager.cpp +++ b/src/tracker_manager.cpp @@ -30,6 +30,8 @@ POSSIBILITY OF SUCH DAMAGE. */ +#include "libtorrent/pch.hpp" + #include #include #include diff --git a/src/udp_tracker_connection.cpp b/src/udp_tracker_connection.cpp index 8726d6917..c284e1b14 100755 --- a/src/udp_tracker_connection.cpp +++ b/src/udp_tracker_connection.cpp @@ -30,6 +30,8 @@ POSSIBILITY OF SUCH DAMAGE. */ +#include "libtorrent/pch.hpp" + #include #include #include diff --git a/src/ut_pex.cpp b/src/ut_pex.cpp index e1da13f76..6006efbdc 100644 --- a/src/ut_pex.cpp +++ b/src/ut_pex.cpp @@ -30,6 +30,8 @@ POSSIBILITY OF SUCH DAMAGE. */ +#include "libtorrent/pch.hpp" + #ifdef _MSC_VER #pragma warning(push, 1) #endif diff --git a/src/web_peer_connection.cpp b/src/web_peer_connection.cpp index 2f6794cd5..c2b199de1 100755 --- a/src/web_peer_connection.cpp +++ b/src/web_peer_connection.cpp @@ -30,6 +30,8 @@ POSSIBILITY OF SUCH DAMAGE. */ +#include "libtorrent/pch.hpp" + #include #include #include