Making signal API real-time signal aware #2451
Open
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Currently, the
nix::sys::signal::sigaction()
function uses theSignal
enum, which only covers standard signals, but not real-time signals. Using real-time signals withnix
requires using thestd::mem::transmute()
function to assign an impossible value to theSignal
enum, which is undefined behavior (and is unsafe for any other use than passing tonix
functions, and possible even then).What does this PR do
In this PR, the
nix::sys::signal
API is made real-time signal aware by adding the new enumSignalValue
that has two variants:Standard
that takesSignal
values, andRealtime
, that takes real-time signal numbersSIGRTMIN+n
, wheren
is the passed number. Most of the functions are left untouched, instead, real-time signal aware versions of the were added with thert_
prefix (similar to the real-time signal aware system calls in the Linux kernel that glibc uses instead of the old system calls). However, two significant changes have been made: turningSigSet
into iterator returns aSignalSetIter
instead of real-time signal unawareSigSetIter
, and thesignal
field of structsSigevSignal
andSigevThreadId
takes the new enum instead of the old one.Checklist:
CONTRIBUTING.md