diff options
| author | Matthias Krüger <matthias.krueger@famsik.de> | 2022-12-28 22:22:18 +0100 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2022-12-28 22:22:18 +0100 |
| commit | 22060f20ae0b92acd056c4f2c79d19dd1b73ab5c (patch) | |
| tree | 6ad221e04ee4387e35c3fb2ebf087ceb9c59838c /compiler/rustc_mir_transform/src/coverage/graph.rs | |
| parent | 2dd2fb728e61a6e7912e1e2818407625ad806bb9 (diff) | |
| parent | 980065ab23650452c33bb47ef66d75fbfbcb6e04 (diff) | |
| download | rust-22060f20ae0b92acd056c4f2c79d19dd1b73ab5c.tar.gz rust-22060f20ae0b92acd056c4f2c79d19dd1b73ab5c.zip | |
Rollup merge of #105359 - flba-eb:thread_local_key_sentinel_value, r=m-ou-se
Make sentinel value configurable in `library/std/src/sys_common/thread_local_key.rs` This is an excerpt of a changeset for the QNX/Neutrino OS. To make the patch for QNX smaller and easier to review, I've extracted this change (which is OS independent). I would be surprised if no other OS is also affected. All this patch does is to define a `const` for a sentinel value instead of using it directly at several places. There are OSs that always return the lowest free value. The algorithm in `lazy_init` always avoids keys with the sentinel value. In affected OSs, this means that each call to `lazy_init` will always request two keys from the OS and returns/frees the first one (with sentinel value) immediately afterwards. By making the sentinel value configurable, affected OSs can use a different value than zero to prevent this performance issue. On QNX/Neutrino, it is planned to use a different sentinel value: ```rust // Define a sentinel value that is unlikely to be returned // as a TLS key (but it may be returned). #[cfg(not(target_os = "nto"))] const KEY_SENTVAL: usize = 0; // On QNX/Neutrino, 0 is always returned when currently not in use. // Using 0 would mean to always create two keys and remote the first // one (with value of 0) immediately afterwards. #[cfg(target_os = "nto")] const KEY_SENTVAL: usize = libc::PTHREAD_KEYS_MAX + 1; ``` It seems like no other OS defines `PTHREAD_KEYS_MAX` in Rusts libc, but `limits.h` on unix systems does.
Diffstat (limited to 'compiler/rustc_mir_transform/src/coverage/graph.rs')
0 files changed, 0 insertions, 0 deletions
