I/O code refuses to read or write when file error is set, but canRead()
and canWrite() ignored that fact, allowing broken files to be selected for
writing (at least). SwapDir::createStoreIO() would then return nil, leading
to missed swapout opportunities (if other cache_dirs could write) and wasted
CPU cycles.
bool
IpcIoFile::canRead() const
{
- return diskId >= 0 && canWait();
+ return diskId >= 0 && !error_ && canWait();
}
bool
IpcIoFile::canWrite() const
{
- return diskId >= 0 && canWait();
+ return diskId >= 0 && !error_ && canWait();
}
bool