What Can Cause Close(2) To Fail With EIO For A Read-only File?
Solution 1:
I'm guessing the EIO
comes from bad_file_flush
in fs/bad_inode.c
. It seems when the kernel has any failure accessing an inode, it transforms the open file description to a pseudo-open-file of with bad_inode_ops
as its file ops. I can't find the code that does this for FAT-based filesystems, but perhaps there's some generic code.
As for the reason, it's probably something like attaching a USB cable and mounting the filesystem from an attached computer, removing the SD card, etc.
Solution 2:
In general, you should always anticipate IOExceptions when closing streams. The code is very straightforward, but see here for the cleanest example Java can afford:
https://stackoverflow.com/a/156520/1489860
However, in your specific case, I imagine an exception is being thrown because it appears you are changing the value of the InputStream in the unzipOrPassthrough(InputStream) method and then later trying to close it:
if (entry == null) {
is = new ByteArrayInputStream(baos.toByteArray());
When you later call close on the FileInputStream class, it probably freaks out because it is now a ByteArrayInputStream and no longer a FileInputStream.
Post a Comment for "What Can Cause Close(2) To Fail With EIO For A Read-only File?"