]> git.ipfire.org Git - thirdparty/squid.git/commitdiff
Do not let cache manager requests kill SMP Squid using isOpen() assertion.
authorAlex Rousskov <rousskov@measurement-factory.com>
Thu, 15 Sep 2011 18:16:59 +0000 (12:16 -0600)
committerAlex Rousskov <rousskov@measurement-factory.com>
Thu, 15 Sep 2011 18:16:59 +0000 (12:16 -0600)
As the comment above the close call implies, we have not imported the foreign
socket descriptor into our fd_table yet. We must use raw close(2), just like
the corresponding Mgr::Request::Request(msg) code that allocates request.conn,
uses raw assignment to give that half-baked connection a descriptor.

TODO: This direct manipulation of Connection::fd is ugly, and this half-baked
connection will most likely cause more [hidden] problems down the road. For
example, Mgr::Request destructor will assert in a similar way if the request
object is destroyed before Action::respond() is called.

src/mgr/Action.cc

index 5fa0e4ba7940d9ce3ac90e3033a7d28b5626c81f..44b88a4b3cd6aa5f63987b31a86556ed3487a00d 100644 (file)
@@ -70,7 +70,8 @@ Mgr::Action::respond(const Request& request)
     // Assume most kid classes are fully aggregatable (i.e., they do not dump
     // local info at all). Do not import the remote HTTP fd into our Comm
     // space; collect and send an IPC msg with collected info to Coordinator.
-    request.conn->close();
+    ::close(request.conn->fd);
+    request.conn->fd = -1;
     collect();
     sendResponse(request.requestId);
 }