merged fix from RC_0_16

This commit is contained in:
Arvid Norberg 2012-08-30 01:54:35 +00:00
parent 33233963eb
commit 64a56e4581
5 changed files with 42 additions and 7 deletions

View File

@ -2384,6 +2384,8 @@ Its declaration looks like this::
bool operator==(torrent_handle const&) const;
bool operator!=(torrent_handle const&) const;
bool operator<(torrent_handle const&) const;
boost::shared_ptr<torrent> native_handle() const;
};
The default constructor will initialize the handle to an invalid state. Which
@ -2631,8 +2633,8 @@ this torrent. You must have completed the download of the specified piece before
calling this function.
When the read operation is completed, it is passed back through an alert,
read_piece_alert_. In order to receive this alert, you must enable
``alert::storage_notification`` in your alert mask (see `set_alert_mask()`_).
read_piece_alert_. Since this alert is a reponse to an explicit call, it will
always be posted, regardless of the alert mask.
Note that if you read multiple pieces, the read operations are not guaranteed to
finish in the same order as you initiated them.
@ -3377,6 +3379,20 @@ ssl certificate.
If you receive a torrent_need_cert_alert_, you need to call this to provide a valid cert. If you
don't have a cert you won't be allowed to connect to any peers.
native_handle()
---------------
::
boost::shared_ptr<torrent> native_handle() const;
This function is intended only for use by plugins and the alert dispatch function. Any code
that runs in libtorrent's network thread may not use the public API of ``torrent_handle``.
Doing so results in a dead-lock. For such routines, the ``native_handle`` gives access to the
underlying type representing the torrent. This type does not have a stable API and should
be relied on as little as possible.
torrent_status
==============

View File

@ -70,6 +70,7 @@ namespace libtorrent
struct peer_info;
struct peer_list_entry;
struct torrent_status;
class torrent;
TORRENT_EXPORT std::size_t hash_value(torrent_status const& ts);
@ -417,6 +418,8 @@ namespace libtorrent
bool operator<(const torrent_handle& h) const
{ return m_torrent.lock() < h.m_torrent.lock(); }
boost::shared_ptr<torrent> native_handle() const;
private:
torrent_handle(boost::weak_ptr<torrent> const& t)

View File

@ -411,6 +411,19 @@ namespace libtorrent {
mutex::scoped_lock lock(m_mutex);
post_impl(a);
#ifndef TORRENT_DISABLE_EXTENSIONS
lock.unlock();
for (ses_extension_list_t::iterator i = m_ses_extensions.begin()
, end(m_ses_extensions.end()); i != end; ++i)
{
TORRENT_TRY {
(*i)->on_alert(alert_);
} TORRENT_CATCH(std::exception&) {}
}
#endif
}
void alert_manager::post_alert(const alert& alert_)

View File

@ -1204,11 +1204,8 @@ namespace libtorrent
size = 0;
}
if (m_ses.m_alerts.should_post<read_piece_alert>())
{
m_ses.m_alerts.post_alert(read_piece_alert(
get_handle(), r.piece, rp->piece_data, size));
}
delete rp;
}
}

View File

@ -969,6 +969,11 @@ namespace libtorrent
TORRENT_ASYNC_CALL1(reset_piece_deadline, index);
}
boost::shared_ptr<torrent> torrent_handle::native_handle() const
{
return m_torrent.lock();
}
std::size_t hash_value(torrent_status const& ts)
{
return hash_value(ts.handle);
@ -978,5 +983,6 @@ namespace libtorrent
{
return std::size_t(th.m_torrent.lock().get());
}
}