diff --git a/ChangeLog b/ChangeLog index 092291c8..ee5f24d2 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,9 @@ +2009-11-01 Tatsuhiro Tsujikawa + + Fixed the bug that DHTAbstractNodeLookupTask never finishes if + error occurred in DHTMessageDispatcherImpl::sendMessage(). + * src/DHTMessageDispatcherImpl.cc + 2009-11-01 Tatsuhiro Tsujikawa Don't reuse URI if Request pool is not empty. diff --git a/src/DHTMessageDispatcherImpl.cc b/src/DHTMessageDispatcherImpl.cc index d847595c..e308647d 100644 --- a/src/DHTMessageDispatcherImpl.cc +++ b/src/DHTMessageDispatcherImpl.cc @@ -82,6 +82,13 @@ DHTMessageDispatcherImpl::sendMessage(const SharedHandle& entry } } catch(RecoverableException& e) { _logger->error("Failed to send message: %s", e, entry->_message->toString().c_str()); + // Add message to DHTMessageTracker with timeout 0 to treat it as + // time out. Without this, we have untracked message and some of + // DHTTask(such as DHTAbstractNodeLookupTask) don't finish + // forever. + if(!entry->_message->isReply()) { + _tracker->addMessage(entry->_message, 0, entry->_callback); + } } return true; }