5#include "qplatformdefs.h"
9#include "private/qcore_unix_p.h"
18QMutexPrivate::QMutexPrivate()
20 kern_return_t r = semaphore_create(mach_task_self(), &mach_semaphore, SYNC_POLICY_FIFO, 0);
21 if (r != KERN_SUCCESS)
22 qWarning(
"QMutex: failed to create semaphore, error %d", r);
25QMutexPrivate::~QMutexPrivate()
27 kern_return_t r = semaphore_destroy(mach_task_self(), mach_semaphore);
28 if (r != KERN_SUCCESS)
29 qWarning(
"QMutex: failed to destroy semaphore, error %d", r);
32bool QMutexPrivate::wait(QDeadlineTimer timeout)
35 if (timeout.isForever()) {
37 r = semaphore_wait(mach_semaphore);
38 }
while (r == KERN_ABORTED);
39 Q_ASSERT(r == KERN_SUCCESS);
41 timespec tv = durationToTimespec(timeout.remainingTimeAsDuration());
43 ts.tv_nsec = tv.tv_nsec;
44 ts.tv_sec = tv.tv_sec;
45 r = semaphore_timedwait(mach_semaphore, ts);
47 return (r == KERN_SUCCESS);
50void QMutexPrivate::wakeUp()
noexcept
52 semaphore_signal(mach_semaphore);