]> git.ipfire.org Git - thirdparty/squid.git/commitdiff
Temporary fix: Avoid killing Coordinator with unregistered cache mgr actions take09
authorAlex Rousskov <rousskov@measurement-factory.com>
Wed, 21 Sep 2011 18:07:29 +0000 (12:07 -0600)
committerAlex Rousskov <rousskov@measurement-factory.com>
Wed, 21 Sep 2011 18:07:29 +0000 (12:07 -0600)
that cause isOpen() assertions.

Same as trunk r11748.

src/ipc/Coordinator.cc

index 6379f4b59e42048ebf3411d8123269ee8c8d4a16..7bc106ffce2c26a4a6abcedbf88f5d840112ae34 100644 (file)
@@ -164,15 +164,26 @@ Ipc::Coordinator::handleCacheMgrRequest(const Mgr::Request& request)
 {
     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