Stroika Library 3.0d16
 
Loading...
Searching...
No Matches
SignalBlock.cpp
1/*
2 * Copyright(c) Sophist Solutions, Inc. 1990-2025. All rights reserved
3 */
4#include "Stroika/Foundation/StroikaPreComp.h"
5
6#include <mutex>
7
8#include "SignalBlock.h"
9
10using namespace Stroika::Foundation;
11using namespace Stroika::Foundation::Execution;
13
14// Comment this in to turn on aggressive noisy DbgTrace in this module
15//#define USE_NOISY_TRACE_IN_THIS_MODULE_ 1
16
17/*
18 ********************************************************************************
19 ************* Execution::ScopedBlockCurrentThreadSignal ************************
20 ********************************************************************************
21 */
22ScopedBlockCurrentThreadSignal::ScopedBlockCurrentThreadSignal ()
23 : fRestoreMask_{}
24{
25#if USE_NOISY_TRACE_IN_THIS_MODULE_
26 DbgTrace (L"ScopedBlockCurrentThreadSignal blocking signals all signals"_f);
27#endif
28 sigset_t mySet;
29 Verify (sigemptyset (&mySet) == 0); // nb: cannot use :: cuz crapple uses macro --LGP 2016-12-31
30 Verify (sigfillset (&mySet) == 0); // ""
31 Verify (sigemptyset (&fRestoreMask_) == 0); // Unclear if this emptyset call is needed?
32 Verify (::pthread_sigmask (SIG_BLOCK, &mySet, &fRestoreMask_) == 0);
33}
34
35ScopedBlockCurrentThreadSignal::ScopedBlockCurrentThreadSignal (SignalID signal)
36 : fRestoreMask_{}
37{
38#if USE_NOISY_TRACE_IN_THIS_MODULE_
39 DbgTrace ("ScopedBlockCurrentThreadSignal blocking signals for {}"_f, SignalToName (signal).);
40#endif
41 sigset_t mySet;
42 Verify (sigemptyset (&mySet) == 0); // nb: cannot use :: cuz crapple uses macro --LGP 2016-12-31
43 Verify (sigaddset (&mySet, signal) == 0);
44 Verify (sigemptyset (&fRestoreMask_) == 0); // Unclear if this emptyset call is needed?
45 Verify (::pthread_sigmask (SIG_BLOCK, &mySet, &fRestoreMask_) == 0);
46}
47
48ScopedBlockCurrentThreadSignal::~ScopedBlockCurrentThreadSignal ()
49{
50#if USE_NOISY_TRACE_IN_THIS_MODULE_
51 DbgTrace (L"ScopedBlockCurrentThreadSignal restoring signals"_f);
52#endif
53 Verify (::pthread_sigmask (SIG_SETMASK, &fRestoreMask_, nullptr) == 0);
54}
#define Verify(c)
Definition Assertions.h:419
#define DbgTrace
Definition Trace.h:309