From: wessels <> Date: Tue, 30 Jun 1998 05:29:16 +0000 (+0000) Subject: lock store entry during peer selection phase, esp important for ICP X-Git-Tag: SQUID_3_0_PRE1~3120 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=73a201f80770f71216171bd8c65dd7767a4611c6;p=thirdparty%2Fsquid.git lock store entry during peer selection phase, esp important for ICP because of delays. check the cbdata status of the peer select callback in peerSelectTimeout() --- diff --git a/src/peer_select.cc b/src/peer_select.cc index a9ea8d36f2..673c61aede 100644 --- a/src/peer_select.cc +++ b/src/peer_select.cc @@ -1,6 +1,6 @@ /* - * $Id: peer_select.cc,v 1.66 1998/06/05 19:02:52 wessels Exp $ + * $Id: peer_select.cc,v 1.67 1998/06/29 23:29:16 wessels Exp $ * * DEBUG: section 44 Peer Selection Algorithm * AUTHOR: Duane Wessels @@ -83,6 +83,10 @@ peerSelectStateFree(ps_state * psstate) } requestUnlink(psstate->request); psstate->request = NULL; + if (psstate->entry) { + storeUnlockObject(psstate->entry); + psstate->entry = NULL; + } cbdataFree(psstate); } @@ -142,6 +146,7 @@ peerSelect(request_t * request, else debug(44, 3) ("peerSelect: %s\n", RequestMethodStr[request->method]); cbdataAdd(psstate, MEM_NONE); + storeLockObject(entry); psstate->request = requestLink(request); psstate->entry = entry; psstate->callback = callback; @@ -368,6 +373,12 @@ peerPingTimeout(void *data) { ps_state *psstate = data; StoreEntry *entry = psstate->entry; + if (!cbdataValid(psstate->callback_data)) { + /* request aborted */ + cbdataUnlock(psstate->callback_data); + peerSelectStateFree(psstate); + return; + } if (entry) debug(44, 3) ("peerPingTimeout: '%s'\n", storeUrl(entry)); entry->ping_status = PING_TIMEOUT;