]> git.ipfire.org Git - thirdparty/squid.git/commitdiff
peerSelectCallbackFail probably needs to set ping_state to PING_DONE.
authorwessels <>
Fri, 18 Sep 1998 23:13:42 +0000 (23:13 +0000)
committerwessels <>
Fri, 18 Sep 1998 23:13:42 +0000 (23:13 +0000)
Otherwise, late-arriving ICP replies will be incorrectly handled.

src/peer_select.cc

index 1a0a7cb82ca04375b7f80bc262d9ee4c1672dcf6..6ea7f183f2de54ac0d9931d64197f60fa487c8b9 100644 (file)
@@ -1,6 +1,6 @@
 
 /*
- * $Id: peer_select.cc,v 1.81 1998/09/14 21:58:52 wessels Exp $
+ * $Id: peer_select.cc,v 1.82 1998/09/18 17:13:42 wessels Exp $
  *
  * DEBUG: section 44    Peer Selection Algorithm
  * AUTHOR: Duane Wessels
@@ -95,6 +95,7 @@ peerSelectStateFree(ps_state * psstate)
     requestUnlink(psstate->request);
     psstate->request = NULL;
     if (psstate->entry) {
+       assert(psstate->entry->ping_status != PING_WAITING);
        storeUnlockObject(psstate->entry);
        psstate->entry = NULL;
     }
@@ -215,6 +216,8 @@ peerSelectCallbackFail(ps_state * psstate)
     request_t *request = psstate->request;
     void *data = psstate->callback_data;
     const char *url = psstate->entry ? storeUrl(psstate->entry) : urlCanonical(request);
+    if (psstate->entry)
+       psstate->entry->ping_status = PING_DONE;
     debug(44, 1) ("Failed to select source for '%s'\n", url);
     debug(44, 1) ("  always_direct = %d\n", psstate->always_direct);
     debug(44, 1) ("   never_direct = %d\n", psstate->never_direct);
@@ -223,7 +226,6 @@ peerSelectCallbackFail(ps_state * psstate)
        psstate->fail_callback(NULL, data);
     cbdataUnlock(data);
     peerSelectStateFree(psstate);
-    /* XXX When this happens, the client request just hangs */
 }
 
 static int