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);
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
if (EBIT_TEST(entry->flags, ENTRY_SPECIAL))
return;
- if (CheckQuickAbort2(entry) == 0)
+ if (!CheckQuickAbortIsReasonable(entry))
return;
entry->abort();