aboutsummaryrefslogtreecommitdiff
path: root/src/libutil/util.hh
diff options
context:
space:
mode:
authorRobert Hensing <robert@roberthensing.nl>2023-02-01 18:38:54 +0100
committerRobert Hensing <robert@roberthensing.nl>2023-04-07 17:50:40 +0200
commit2196fd1146aa077419a113059ced924a648f9766 (patch)
tree7ffaa7d10e176b9dd9225240f6a99a9f8777c807 /src/libutil/util.hh
parent781d3dceb303d9fceabe9a39eae0f7f986e1adcc (diff)
libutil: Provide alternatives to startSignalHandlerThread
How signals should be handled depends on what kind of process Nix is integrated into. The signal handler thread used by the stand-alone Nix commands / processes may not work well in the context of other runtime systems, such as those of Python, Perl, or Haskell.
Diffstat (limited to 'src/libutil/util.hh')
-rw-r--r--src/libutil/util.hh19
1 files changed, 19 insertions, 0 deletions
diff --git a/src/libutil/util.hh b/src/libutil/util.hh
index 783a4a601..08993e1cf 100644
--- a/src/libutil/util.hh
+++ b/src/libutil/util.hh
@@ -448,6 +448,8 @@ void setStackSize(size_t stackSize);
/**
* Restore the original inherited Unix process context (such as signal
* masks, stack size).
+
+ * See startSignalHandlerThread(), saveSignalMask().
*/
void restoreProcessContext(bool restoreMounts = true);
@@ -817,9 +819,26 @@ class Callback;
/**
* Start a thread that handles various signals. Also block those signals
* on the current thread (and thus any threads created by it).
+ * Saves the signal mask before changing the mask to block those signals.
+ * See saveSignalMask().
*/
void startSignalHandlerThread();
+/**
+ * Saves the signal mask, which is the signal mask that nix will restore
+ * before creating child processes.
+ * See setChildSignalMask() to set an arbitrary signal mask instead of the
+ * current mask.
+ */
+void saveSignalMask();
+
+/**
+ * Sets the signal mask. Like saveSignalMask() but for a signal set that doesn't
+ * necessarily match the current thread's mask.
+ * See saveSignalMask() to set the saved mask to the current mask.
+ */
+void setChildSignalMask(sigset_t *sigs);
+
struct InterruptCallback
{
virtual ~InterruptCallback() { };