handle requests completions in netdb requests thread

This commit is contained in:
orignal 2024-05-22 10:07:01 -04:00
parent 265bb8b779
commit c00eb8cf44

View File

@ -173,25 +173,28 @@ namespace data
void NetDbRequests::RequestComplete (const IdentHash& ident, std::shared_ptr<RouterInfo> r) void NetDbRequests::RequestComplete (const IdentHash& ident, std::shared_ptr<RouterInfo> r)
{ {
std::shared_ptr<RequestedDestination> request; GetIOService ().post ([this, ident, r]()
{
std::unique_lock<std::mutex> l(m_RequestedDestinationsMutex);
auto it = m_RequestedDestinations.find (ident);
if (it != m_RequestedDestinations.end ())
{ {
request = it->second; std::shared_ptr<RequestedDestination> request;
if (request->IsExploratory ()) {
m_RequestedDestinations.erase (it); std::unique_lock<std::mutex> l(m_RequestedDestinationsMutex);
// otherwise cache for a while auto it = m_RequestedDestinations.find (ident);
} if (it != m_RequestedDestinations.end ())
} {
if (request) request = it->second;
{ if (request->IsExploratory ())
if (r) m_RequestedDestinations.erase (it);
request->Success (r); // otherwise cache for a while
else }
request->Fail (); }
} if (request)
{
if (r)
request->Success (r);
else
request->Fail ();
}
});
} }
std::shared_ptr<RequestedDestination> NetDbRequests::FindRequest (const IdentHash& ident) const std::shared_ptr<RequestedDestination> NetDbRequests::FindRequest (const IdentHash& ident) const