From: Amos Jeffries Date: Mon, 28 Jan 2013 11:23:27 +0000 (-0700) Subject: Polish quick_abort feature decision code X-Git-Tag: SQUID_3_2_7~13 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=35dac0ec5a4c2db65bf7e1181d0ca342f8666243;p=thirdparty%2Fsquid.git Polish quick_abort feature decision code Also, fixes a defect identified by Coverity Scan issues 740376, 740456 --- diff --git a/src/store_client.cc b/src/store_client.cc index 5275dafea6..5c1f34f01d 100644 --- a/src/store_client.cc +++ b/src/store_client.cc @@ -61,7 +61,7 @@ static StoreIOState::STRCB storeClientReadBody; static StoreIOState::STRCB storeClientReadHeader; static void storeClientCopy2(StoreEntry * e, store_client * sc); static EVH storeClientCopyEvent; -static int CheckQuickAbort2(StoreEntry * entry); +static bool CheckQuickAbortIsReasonable(StoreEntry * entry); static void CheckQuickAbort(StoreEntry * entry); CBDATA_CLASS_INIT(store_client); @@ -781,72 +781,72 @@ storePendingNClients(const StoreEntry * e) return npend; } -/* return 1 if the request should be aborted */ -static int -CheckQuickAbort2(StoreEntry * entry) +/* return true if the request should be aborted */ +static bool +CheckQuickAbortIsReasonable(StoreEntry * entry) { MemObject * const mem = entry->mem_obj; assert(mem); - debugs(90, 3, "CheckQuickAbort2: entry=" << entry << ", mem=" << mem); + debugs(90, 3, "entry=" << entry << ", mem=" << mem); if (mem->request && !mem->request->flags.cachable) { - debugs(90, 3, "CheckQuickAbort2: YES !mem->request->flags.cachable"); - return 1; + debugs(90, 3, "quick-abort? YES !mem->request->flags.cachable"); + return true; } if (EBIT_TEST(entry->flags, KEY_PRIVATE)) { - debugs(90, 3, "CheckQuickAbort2: YES KEY_PRIVATE"); - return 1; + debugs(90, 3, "quick-abort? YES KEY_PRIVATE"); + return true; } int64_t expectlen = entry->getReply()->content_length + entry->getReply()->hdr_sz; - if (expectlen < 0) + if (expectlen < 0) { /* expectlen is < 0 if *no* information about the object has been received */ - return 1; + debugs(90, 3, "quick-abort? YES no object data received yet"); + return true; + } - int64_t curlen = mem->endOffset (); + int64_t curlen = mem->endOffset(); if (Config.quickAbort.min < 0) { - debugs(90, 3, "CheckQuickAbort2: NO disabled"); - return 0; + debugs(90, 3, "quick-abort? NO disabled"); + return false; } - int64_t roffLimit = mem->request->getRangeOffsetLimit(); - - if ( roffLimit < 0 && mem->request && mem->request->range ) { + if (mem->request && mem->request->range && mem->request->getRangeOffsetLimit() < 0) { /* Don't abort if the admin has configured range_ofset -1 to download fully for caching. */ - debugs(90, 3, "CheckQuickAbort2: NO admin configured range replies to full-download"); - return 0; + debugs(90, 3, "quick-abort? NO admin configured range replies to full-download"); + return false; } if (curlen > expectlen) { - debugs(90, 3, "CheckQuickAbort2: YES bad content length"); - return 1; + debugs(90, 3, "quick-abort? YES bad content length"); + return true; } if ((expectlen - curlen) < (Config.quickAbort.min << 10)) { - debugs(90, 3, "CheckQuickAbort2: NO only little more left"); - return 0; + debugs(90, 3, "quick-abort? NO only a little more object left to receive"); + return false; } if ((expectlen - curlen) > (Config.quickAbort.max << 10)) { - debugs(90, 3, "CheckQuickAbort2: YES too much left to go"); - return 1; + debugs(90, 3, "quick-abort? YES too much left to go"); + return true; } if (expectlen < 100) { - debugs(90, 3, "CheckQuickAbort2: NO avoid FPE"); - return 0; + debugs(90, 3, "quick-abort? NO avoid FPE"); + return false; } if ((curlen / (expectlen / 100)) > (Config.quickAbort.pct)) { - debugs(90, 3, "CheckQuickAbort2: NO past point of no return"); - return 0; + debugs(90, 3, "quick-abort? NO past point of no return"); + return false; } - debugs(90, 3, "CheckQuickAbort2: YES default, returning 1"); - return 1; + debugs(90, 3, "quick-abort? YES default"); + return true; } static void @@ -863,7 +863,7 @@ CheckQuickAbort(StoreEntry * entry) if (EBIT_TEST(entry->flags, ENTRY_SPECIAL)) return; - if (CheckQuickAbort2(entry) == 0) + if (!CheckQuickAbortIsReasonable(entry)) return; entry->abort();