sc->readBody(buf, len);
}
-void
+bool
store_client::unpackHeader(char const *buf, ssize_t len)
{
debugs(90, 3, "store_client::unpackHeader: len " << len << "");
if (len < 0) {
- debugs(90, 3, "store_client::unpackHeader: " << xstrerror() << "");
- fail();
- return;
+ debugs(90, 3, "WARNING: unpack error: " << xstrerror());
+ return false;
}
int swap_hdr_sz = 0;
if (!aBuilder.isBufferSane()) {
/* oops, bad disk file? */
debugs(90, DBG_IMPORTANT, "WARNING: swapfile header inconsistent with available data");
- fail();
- return;
+ return false;
}
tlv *tlv_list = aBuilder.createStoreMeta ();
if (tlv_list == NULL) {
debugs(90, DBG_IMPORTANT, "WARNING: failed to unpack meta data");
- fail();
- return;
+ return false;
}
/*
for (tlv *t = tlv_list; t; t = t->next) {
if (!t->checkConsistency(entry)) {
storeSwapTLVFree(tlv_list);
- fail();
- return;
+ return false;
}
}
debugs(90, 5, "store_client::unpackHeader: swap_file_sz=" <<
entry->swap_file_sz << "( " << swap_hdr_sz << " + " <<
entry->mem_obj->object_sz << ")");
+ return true;
}
void
flags.disk_io_pending = false;
assert(_callback.pending());
- unpackHeader (buf, len);
-
+ // abort if we fail()'d earlier
if (!object_ok)
return;
+ if (!unpackHeader(buf, len)) {
+ fail();
+ return;
+ }
+
/*
* If our last read got some data the client wants, then give
* it to them, otherwise schedule another read.