*/
-#include "config.h"
+#include "squid.h"
#include "base/Subscription.h"
#include "base/TextException.h"
#include "CacheManager.h"
if (i->tag == strand.tag) {
notifySearcher(*i, strand);
i = searchers.erase(i);
- } else {
+ } else {
++i;
- }
+ }
}
}
{
debugs(54, 4, HERE);
+ try {
+ Mgr::Action::Pointer action =
+ CacheManager::GetInstance()->createRequestedAction(request.params);
+ AsyncJob::Start(new Mgr::Inquirer(action, request, strands_));
+ } catch (const std::exception &ex) {
+ debugs(54, DBG_IMPORTANT, "BUG: cannot aggregate mgr:" <<
+ request.params.actionName << ": " << ex.what());
+ // TODO: Avoid half-baked Connections or teach them how to close.
+ ::close(request.conn->fd);
+ request.conn->fd = -1;
+ return; // the worker will timeout and close
+ }
+
// Let the strand know that we are now responsible for handling the request
Mgr::Response response(request.requestId);
TypedMsgHdr message;
response.pack(message);
SendMessage(MakeAddr(strandAddrPfx, request.requestorId), message);
- Mgr::Action::Pointer action =
- CacheManager::GetInstance()->createRequestedAction(request.params);
- AsyncJob::Start(new Mgr::Inquirer(action, request, strands_));
}
void
if (strand) {
notifySearcher(request, *strand);
return;
- }
+ }
searchers.push_back(request);
debugs(54, 3, HERE << "cannot yet tell kid" << request.requestorId <<
- " who " << request.tag << " is");
+ " who " << request.tag << " is");
}
void
const StrandCoord& strand)
{
debugs(54, 3, HERE << "tell kid" << request.requestorId << " that " <<
- request.tag << " is kid" << strand.kidId);
+ request.tag << " is kid" << strand.kidId);
const StrandSearchResponse response(strand);
TypedMsgHdr message;
response.pack(message);