]> git.ipfire.org Git - thirdparty/squid.git/commitdiff
Backed out change where clientReplyContext held a FwdState::Pointer.
authorwessels <>
Sun, 7 May 2006 21:13:24 +0000 (21:13 +0000)
committerwessels <>
Sun, 7 May 2006 21:13:24 +0000 (21:13 +0000)
That change was to fix problems with re-forwarded reqeusts where
the FwdState refcount would go to zero.  But it also introduced a new
bug where errors would not be sent to clients because the refcount
did NOT go to zero.

src/client_side_reply.cc
src/client_side_reply.h
src/forward.cc
src/forward.h

index 8c10027ba6266b453a78f83be9b2136e6db2fcf6..de5dae337c8511d81b4f056f518a2fc58893de55 100644 (file)
@@ -1,6 +1,6 @@
 
 /*
- * $Id: client_side_reply.cc,v 1.103 2006/05/06 22:13:18 wessels Exp $
+ * $Id: client_side_reply.cc,v 1.104 2006/05/07 15:13:24 wessels Exp $
  *
  * DEBUG: section 88    Client-side Reply Routines
  * AUTHOR: Robert Collins (Originally Duane Wessels in client_side.c)
@@ -80,7 +80,6 @@ clientReplyContext::~clientReplyContext()
     safe_free(tempBuffer.data);
     cbdataReferenceDone(http);
     HTTPMSGUNLOCK(reply);
-    fwd = NULL;                // refcounted
 }
 
 clientReplyContext::clientReplyContext(ClientHttpRequest *clientContext) : http (cbdataReference(clientContext)), old_entry (NULL), old_sc(NULL), deleting(false)
@@ -273,9 +272,9 @@ clientReplyContext::processExpired()
      * A refcounted pointer so that FwdState stays around as long as
      * this clientReplyContext does
      */
-    fwd = FwdState::fwdStart(http->getConn().getRaw() != NULL ? http->getConn()->fd : -1,
-                             http->storeEntry(),
-                             http->request);
+    FwdState::fwdStart(http->getConn().getRaw() != NULL ? http->getConn()->fd : -1,
+                       http->storeEntry(),
+                       http->request);
     /* Register with storage manager to receive updates when data comes in. */
 
     if (EBIT_TEST(entry->flags, ENTRY_ABORTED))
@@ -842,9 +841,9 @@ clientReplyContext::processMiss()
         if (http->flags.internal)
             r->protocol = PROTO_INTERNAL;
 
-        fwd = FwdState::fwdStart(http->getConn().getRaw() != NULL ? http->getConn()->fd : -1,
-                                 http->storeEntry(),
-                                 r);
+        FwdState::fwdStart(http->getConn().getRaw() != NULL ? http->getConn()->fd : -1,
+                           http->storeEntry(),
+                           r);
     }
 }
 
index dda25ae70d5350a43144fc94e22bd6fdc5ba498a..121f9de90cb107652a9cb4c5590877b50d727aec 100644 (file)
@@ -1,6 +1,6 @@
 
 /*
- * $Id: client_side_reply.h,v 1.11 2006/05/05 21:33:56 wessels Exp $
+ * $Id: client_side_reply.h,v 1.12 2006/05/07 15:13:24 wessels Exp $
  *
  *
  * SQUID Web Proxy Cache          http://www.squid-cache.org/
@@ -138,7 +138,6 @@ private:
     void startSendProcess();
     StoreIOBuffer holdingBuffer;
     HttpReply *reply;
-    FwdState::Pointer fwd;
     void processReplyAccess();
     static PF ProcessReplyAccessResult;
     void processReplyAccessResult(bool accessAllowed);
index dc420957f7a454eaf0970cf8b2a571c614f89fa1..68c247b8145545ac00f72a696aa8030fe3c6a68d 100644 (file)
@@ -1,6 +1,6 @@
 
 /*
- * $Id: forward.cc,v 1.139 2006/05/05 21:33:56 wessels Exp $
+ * $Id: forward.cc,v 1.140 2006/05/07 15:13:24 wessels Exp $
  *
  * DEBUG: section 17    Request Forwarding
  * AUTHOR: Duane Wessels
@@ -137,7 +137,7 @@ FwdState::~FwdState()
  * a transaction.  It is a static method that may or may not
  * allocate a FwdState.
  */
-FwdState *
+void
 FwdState::fwdStart(int client_fd, StoreEntry *entry, HttpRequest *request)
 {
     /*
@@ -174,7 +174,7 @@ FwdState::fwdStart(int client_fd, StoreEntry *entry, HttpRequest *request)
 
             errorAppendEntry(entry, anErr);    // frees anErr
 
-            return NULL;
+            return;
         }
     }
 
@@ -194,27 +194,27 @@ FwdState::fwdStart(int client_fd, StoreEntry *entry, HttpRequest *request)
         ErrorState *anErr = errorCon(ERR_SHUTTING_DOWN, HTTP_SERVICE_UNAVAILABLE);
         anErr->request = HTTPMSGLOCK(request);
         errorAppendEntry(entry, anErr);        // frees anErr
-        return NULL;
+        return;
     }
 
     switch (request->protocol) {
 
     case PROTO_INTERNAL:
         internalStart(request, entry);
-        return NULL;
+        return;
 
     case PROTO_CACHEOBJ:
         cachemgrStart(client_fd, request, entry);
-        return NULL;
+        return;
 
     case PROTO_URN:
         urnStart(request, entry);
-        return NULL;
+        return;
 
     default:
         FwdState *fwd = new FwdState(client_fd, entry, request);
         peerSelect(request, entry, fwdStartCompleteWrapper, fwd);
-        return fwd;
+        return;
     }
 
     /* NOTREACHED */
index 44a806484edf780f6b1f0a82f3c2f21db783812d..12866d02967848a330daf13195e1ee85dad1592b 100644 (file)
@@ -19,7 +19,7 @@ public:
     ~FwdState();
     static void initModule();
 
-    static FwdState * fwdStart(int fd, StoreEntry *, HttpRequest *);
+    static void fwdStart(int fd, StoreEntry *, HttpRequest *);
     void startComplete(FwdServer *);
     void startFail();
     void fail(ErrorState *err);