Manish Goregaokar
eb860987cf
Rollup merge of #88828 - FabianWolff:issue-88585, r=dtolnay
Use `libc::sigaction()` instead of `sys::signal()` to prevent a deadlock
Fixes #88585. POSIX [specifies](https://man7.org/linux/man-pages/man3/fork.3p.html) that after forking,
> to avoid errors, the child process may only execute async-signal-safe operations until such time as one of the exec functions is called.
Rust's standard library does not currently adhere to this, as evidenced by #88585. The child process calls [`sys::signal()`](7bf0736e13/library/std/src/sys/unix/android.rs (L76)), which on Android calls [`libc::dlsym()`](7bf0736e13/library/std/src/sys/unix/weak.rs (L101)), which is [**not**](https://man7.org/linux/man-pages/man7/signal-safety.7.html) async-signal-safe, and in fact causes a deadlock in the example in #88585.
I think the easiest solution here would be to just call `libc::sigaction()` instead, which [is](https://man7.org/linux/man-pages/man7/signal-safety.7.html) async-signal-safe, provides the functionality we need, and is apparently available on all Android versions because it is also used e.g. [here](7bf0736e13/library/std/src/sys/unix/stack_overflow.rs (L112-L114)).
2021-10-05 12:52:42 -07:00
..
2021-08-19 12:02:39 -07:00
2021-02-22 21:41:32 +01:00
2021-07-21 10:53:43 -07:00
2021-07-03 03:01:36 +02:00
2021-10-05 12:52:42 -07:00
2021-08-10 12:09:00 +03:00
2021-07-10 12:55:09 -07:00
2021-08-10 12:09:00 +03:00
2021-04-28 14:25:04 +02:00
2021-08-10 12:09:00 +03:00
2021-08-10 12:09:00 +03:00
2021-08-19 12:02:39 -07:00
2021-09-14 19:10:05 -07:00
2020-11-12 03:40:15 +00:00
2021-07-10 12:55:09 -07:00
2021-08-30 13:42:52 -04:00
2021-09-16 15:20:44 +02:00
2020-10-20 00:00:00 +00:00
2021-08-30 14:00:21 -04:00
2021-07-03 03:01:36 +02:00
2021-10-04 23:56:15 -07:00
2021-08-19 12:02:39 -07:00
2021-08-10 12:09:00 +03:00
2021-06-01 09:07:55 +02:00
2021-08-27 17:31:42 -05:00
2021-08-19 12:02:39 -07:00
2021-04-19 13:29:22 +02:00
2021-10-02 13:24:30 +01:00
2021-08-10 12:09:00 +03:00
2021-08-01 11:19:24 -04:00