mirror of
https://github.com/Atmosphere-NX/Atmosphere.git
synced 2024-11-23 04:12:02 +00:00
libstratosphere: Fix condvar wrapper primitives
This commit is contained in:
parent
fa0e906129
commit
0cad1935dd
1 changed files with 28 additions and 14 deletions
|
@ -20,61 +20,75 @@
|
||||||
class HosMutex {
|
class HosMutex {
|
||||||
private:
|
private:
|
||||||
Mutex m;
|
Mutex m;
|
||||||
|
Mutex *GetMutex() {
|
||||||
|
return &this->m;
|
||||||
|
}
|
||||||
public:
|
public:
|
||||||
HosMutex() {
|
HosMutex() {
|
||||||
mutexInit(&this->m);
|
mutexInit(GetMutex());
|
||||||
}
|
}
|
||||||
|
|
||||||
void lock() {
|
void lock() {
|
||||||
mutexLock(&this->m);
|
mutexLock(GetMutex());
|
||||||
}
|
}
|
||||||
|
|
||||||
void unlock() {
|
void unlock() {
|
||||||
mutexUnlock(&this->m);
|
mutexUnlock(GetMutex());
|
||||||
}
|
}
|
||||||
|
|
||||||
bool try_lock() {
|
bool try_lock() {
|
||||||
return mutexTryLock(&this->m);
|
return mutexTryLock(GetMutex());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
friend class HosCondVar;
|
||||||
};
|
};
|
||||||
|
|
||||||
class HosRecursiveMutex {
|
class HosRecursiveMutex {
|
||||||
private:
|
private:
|
||||||
RMutex m;
|
RMutex m;
|
||||||
|
RMutex *GetMutex() {
|
||||||
|
return &this->m;
|
||||||
|
}
|
||||||
public:
|
public:
|
||||||
HosRecursiveMutex() {
|
HosRecursiveMutex() {
|
||||||
rmutexInit(&this->m);
|
rmutexInit(GetMutex());
|
||||||
}
|
}
|
||||||
|
|
||||||
void lock() {
|
void lock() {
|
||||||
rmutexLock(&this->m);
|
rmutexLock(GetMutex());
|
||||||
}
|
}
|
||||||
|
|
||||||
void unlock() {
|
void unlock() {
|
||||||
rmutexUnlock(&this->m);
|
rmutexUnlock(GetMutex());
|
||||||
}
|
}
|
||||||
|
|
||||||
bool try_lock() {
|
bool try_lock() {
|
||||||
return rmutexTryLock(&this->m);
|
return rmutexTryLock(GetMutex());
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
class HosCondVar {
|
class HosCondVar {
|
||||||
private:
|
private:
|
||||||
CondVar cv;
|
CondVar cv;
|
||||||
Mutex m;
|
|
||||||
public:
|
public:
|
||||||
HosCondVar() {
|
HosCondVar() {
|
||||||
mutexInit(&m);
|
|
||||||
condvarInit(&cv);
|
condvarInit(&cv);
|
||||||
}
|
}
|
||||||
|
|
||||||
Result WaitTimeout(u64 timeout) {
|
Result WaitTimeout(u64 timeout, HosMutex *hm) {
|
||||||
return condvarWaitTimeout(&cv, &m, timeout);
|
return WaitTimeout(timeout, hm->GetMutex());
|
||||||
}
|
}
|
||||||
|
|
||||||
Result Wait() {
|
Result Wait(HosMutex *hm) {
|
||||||
return condvarWait(&cv, &m);
|
return Wait(hm->GetMutex());
|
||||||
|
}
|
||||||
|
|
||||||
|
Result WaitTimeout(u64 timeout, Mutex *m) {
|
||||||
|
return condvarWaitTimeout(&cv, m, timeout);
|
||||||
|
}
|
||||||
|
|
||||||
|
Result Wait(Mutex *m) {
|
||||||
|
return condvarWait(&cv, m);
|
||||||
}
|
}
|
||||||
|
|
||||||
Result Wake(int num) {
|
Result Wake(int num) {
|
||||||
|
|
Loading…
Reference in a new issue