Closed
Description
Describe the bug
Throw unexpected filesystemerror (errno EINTR) in CIFS mounted disk.
terminate called after throwing an instance of 'ghc::filesystem::filesystem_error'
what(): Interrupted system call: '/mnt/nas_xxx'
strace shows:
...
openat(AT_FDCWD, "/mnt/nas_xxx", O_RDONLY|O_NONBLOCK|O_CLOEXEC|O_DIRECTORY) = 8
fstat(8, {st_mode=S_IFDIR|0777, st_size=0, ...}) = 0
getdents64(8, 0x5637c220a1c0, 1048576) = -1 EINTR (Interrupted system call)
close(8) = 0
...
To Reproduce
Use ghc::filesystem::recursive_directory_iterator in disk mounted by CIFS
Expected behavior
Retry syscall if errno is EINTR (in my case ::opendir
)
Additional context
std::filesystem in gcc 9.4 (Ubuntu 20.04) has same problem.
terminate called after throwing an instance of 'std::filesystem::__cxx11::filesystem_error'
what(): filesystem error: cannot increment recursive directory iterator: Interrupted system call
boost::filesystem 1.71.0 has same problem.
terminate called after throwing an instance of 'boost::filesystem::filesystem_error'
what(): filesystem::recursive_directory_iterator directory error: Interrupted system call
boost::filesystem >= 1.74.0 seems fix this problem by retry syscall in EINTR ?
https://www.boost.org/doc/libs/1_74_0/libs/filesystem/src/operations.cpp