I agree with your points in general. I didn't have the code available to check when I first replied but it looks like the error message from the index inputs would be ok if you keep using the reader in another thread. I'd still be interested in other opinions regarding whether it would be ok to rely more on ByteBufferGuard to have exceptions rather than segfaults when reading closed index inputs given that comments say it is only a best effort.
Regarding your point about concurrent calls to close() and decref(), I don't see how doClose() may be called twice. The `closed` boolean is only used to make close() idempotent. Do I miss something?
