News for hackers. Stuff that matters.
Re:Don't trust default timeouts by Arnavion on Saturday August 29, 2020 @02:52PM (#24318512)
>Go, Rust, and Zig make it impossible to interrupt most blocking syscalls, because they automatically retry on EINTR.

This is not true of Rust. Some of the convenience wrappers (std::io::Read::read_exact, etc) on top of the basic primitives (std::io::Read::read, etc) do retry for you (and explicitly document it), but not "Rust" as a whole. The primitives map one-to-one to calls of read/write/sendto/recvfrom and bubble up ErrorKind::Interrupted to the caller just fine.

Re:Don't trust default timeouts by networkimprov on Saturday August 29, 2020 @03:33PM (#24318810)
The Rust filesystem API works (or once did) as I described. This can render an application unusable when trying a network filesystem or storage device that's unavailable.

https://github.com/rust-lang/rust/issues/11214

To support user intervention when a task takes longer than expected, all blocking syscalls should be interruptible.

Re:Don't trust default timeouts by Arnavion on Saturday August 29, 2020 @03:40PM (#24318860)
Linking to discussions from pre-1.0 does not help your assertion.

std::fs::File's impl of std::io::Read:

https://github.com/rust-lang/rust/blob/7fc048f0712ba515ca11f...

-> https://github.com/rust-lang/rust/blob/7fc048f0712ba515ca11f...

-> https://github.com/rust-lang/rust/blob/7fc048f0712ba515ca11f...

Again, as I said, it corresponds one-to-one with a call to the underlying read API. The retries for ErrorKind::Interrupted are done by higher abstractions like std::io::Read::read_exact, and they explicitly document that they do this.

https://github.com/rust-lang/rust/blob/7fc048f0712ba515ca11f...

Re:Don't trust default timeouts by networkimprov on Saturday August 29, 2020 @04:04PM (#24319022)
Apologies if I got this wrong, but you've linked read(), and I'm referring to mkdir() et al.

Have they taken out the EINTR retries which were added for the issue I linked?