summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMarcos Pinto <markybob@dipconsultants.com>2008-02-07 07:23:43 +0000
committerMarcos Pinto <markybob@dipconsultants.com>2008-02-07 07:23:43 +0000
commitf940a4c4dba0ab6f40a4898313cd76b711f9812a (patch)
tree9e4239b29ac3af763e625dd766eb87884895c404
parent187b4c423d52352d91329bb6555915da71c23758 (diff)
downloaddeluge-f940a4c4dba0ab6f40a4898313cd76b711f9812a.tar.gz
deluge-f940a4c4dba0ab6f40a4898313cd76b711f9812a.tar.bz2
deluge-f940a4c4dba0ab6f40a4898313cd76b711f9812a.zip
http_tracker connection fix and proxy support for udp-trackers
-rwxr-xr-xlibtorrent/src/peer_connection.cpp2
-rwxr-xr-xlibtorrent/src/session_impl.cpp21
2 files changed, 19 insertions, 4 deletions
diff --git a/libtorrent/src/peer_connection.cpp b/libtorrent/src/peer_connection.cpp
index dc4b294a5..77ff59d93 100755
--- a/libtorrent/src/peer_connection.cpp
+++ b/libtorrent/src/peer_connection.cpp
@@ -1707,6 +1707,8 @@ namespace libtorrent
TORRENT_ASSERT(block.block_index < t->torrent_file().piece_size(block.piece_index));
TORRENT_ASSERT(!t->picker().is_requested(block) || (t->picker().num_peers(block) > 0));
TORRENT_ASSERT(!t->have_piece(block.piece_index));
+ TORRENT_ASSERT(std::find(m_download_queue.begin(), m_download_queue.end(), block) == m_download_queue.end());
+ TORRENT_ASSERT(std::find(m_request_queue.begin(), m_request_queue.end(), block) == m_request_queue.end());
piece_picker::piece_state_t state;
peer_speed_t speed = peer_speed();
diff --git a/libtorrent/src/session_impl.cpp b/libtorrent/src/session_impl.cpp
index 209e833c3..a93ad7cb0 100755
--- a/libtorrent/src/session_impl.cpp
+++ b/libtorrent/src/session_impl.cpp
@@ -1263,10 +1263,21 @@ namespace detail
torrent& t = *i->second;
if (t.want_more_peers())
{
- if (t.try_connect_peer())
+ try
{
- --max_connections;
- steps_since_last_connect = 0;
+ if (t.try_connect_peer())
+ {
+ --max_connections;
+ steps_since_last_connect = 0;
+ }
+ }
+ catch (std::bad_alloc&)
+ {
+ // we ran out of memory trying to connect to a peer
+ // lower the global limit to the number of peers
+ // we already have
+ m_max_connections = num_connections();
+ if (m_max_connections < 2) m_max_connections = 2;
}
}
++m_next_connect_torrent;
@@ -2406,8 +2417,10 @@ namespace detail
m_buffer_usage_logger << log_time() << " protocol_buffer: "
<< (m_buffer_allocations * send_buffer_size) << std::endl;
#endif
- return std::make_pair((char*)m_send_buffers.ordered_malloc(num_buffers)
+ std::pair<char*, int> ret((char*)m_send_buffers.ordered_malloc(num_buffers)
, num_buffers * send_buffer_size);
+ if (ret.first == 0) throw std::bad_alloc();
+ return ret;
}
void session_impl::free_buffer(char* buf, int size)