4#include "Stroika/Foundation/StroikaPreComp.h"
8#include "Stroika/Foundation/Execution/Exceptions.h"
10#include "SemWaitableEvent.h"
24SemWaitableEvent::SemWaitableEvent ()
26 [[maybe_unused]]
constexpr int kpshared = 0;
28#if qCompilerAndStdLib_unnamed_semaphores_Buggy
29 char nameBuf[1000] =
"/tmp/semaphore-XXXXXX";
30 ::close (::mkstemp (nameBuf));
31 Verify ((fSem_ = ::sem_open (nameBuf, O_CREAT, S_IRWXU | S_IRWXG, defaultValue)) != SEM_FAILED);
32 Verify (::sem_unlink (nameBuf) == 0);
34 Verify (::sem_init (&fSem_, kpshared, defaultValue) == 0);
38SemWaitableEvent::~SemWaitableEvent ()
40#if qCompilerAndStdLib_unnamed_semaphores_Buggy
41 Verify (::sem_close (fSem_) == 0);
43 Verify (::sem_destroy (&fSem_) == 0);
49#if qCompilerAndStdLib_unnamed_semaphores_Buggy
55 while ((s = ::sem_wait (pSem)) == -1 && errno == EINTR) {
64#if qCompilerAndStdLib_unnamed_semaphores_Buggy
71 Verify (::sem_post (pSem) == 0);
INT_TYPE ThrowPOSIXErrNoIfNegative(INT_TYPE returnCode)