forked from premiere/premiere-libtorrent
Fix bug caused by RP #96.
This commit is contained in:
parent
cc29a99c90
commit
71b6b3c262
|
@ -302,14 +302,23 @@ bool rpc_manager::incoming(msg const& m, node_id* id
|
||||||
|
|
||||||
if (m.message.dict_find_string_value("y") == "e")
|
if (m.message.dict_find_string_value("y") == "e")
|
||||||
{
|
{
|
||||||
// it's an error.
|
// It's an error.
|
||||||
#ifndef TORRENT_DISABLE_LOGGING
|
#ifndef TORRENT_DISABLE_LOGGING
|
||||||
bdecode_node err_ent = m.message.dict_find("e");
|
bdecode_node err_ent = m.message.dict_find("e");
|
||||||
TORRENT_ASSERT(err_ent);
|
TORRENT_ASSERT(err_ent);
|
||||||
m_log->log(dht_logger::rpc_manager, "reply with error from %s: %s"
|
m_log->log(dht_logger::rpc_manager, "reply with error from %s: %s"
|
||||||
, print_endpoint(m.addr).c_str(), err_ent.list_string_value_at(1).c_str());
|
, print_endpoint(m.addr).c_str(), err_ent.list_string_value_at(1).c_str());
|
||||||
#endif
|
#endif
|
||||||
o->reply(m);
|
// Logically, we should call o->reply(m) since we get a reply.
|
||||||
|
// a reply could be "response" or "error", here the reply is an "error".
|
||||||
|
// if the reply is an "error", basically the observer could/will
|
||||||
|
// do nothing with it, especially when observer::reply() is intended to
|
||||||
|
// handle a "response", not an "error".
|
||||||
|
// A "response" should somehow call algorithm->finished(), and an error/timeout
|
||||||
|
// should call algorithm->failed(). From this point of view,
|
||||||
|
// we should call o->timeout() instead of o->reply(m) because o->reply()
|
||||||
|
// will call algorithm->finished().
|
||||||
|
o->timeout();
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue