https://issues.dlang.org/show_bug.cgi?id=14868
--- Comment #5 from Sergei Degtiarev <[email protected]> --- MmFile class destructor makes only two system calls: ~this() { unmap(); errnoEnforce(fd == -1 || fd <= 2 || .close(fd) != -1, "Could not close handle"); } and the second one, .close(fd), fails with EBADF errno, obviously the file descriptor is already closed. Somehow GC converts descriptive error message into general InvalidMemoryOperationError. What I found, if the File is created as independent instance, it is always deleted first, so the file descriptor is closed once in File destructor and after that is tried to be closed in MmFile destructor resulting to an exception. I would recommend (at least as temporary fix for POSIX) to exclude .close() result check, the only meaningful error returned is due to close() duplicate call, which is harmless. Also a question, how it happens that File destructor is always called before MmFile one? I tried all possible combinations to create them with same result. --
