mirror of
https://github.com/shadps4-emu/shadPS4.git
synced 2024-12-28 02:26:07 +00:00
semaphore: Attempt to acquire before checking timeout
* The posix specification says that if the object can be acquired immediately, timeout doesnt matter
This commit is contained in:
parent
c284cf72e1
commit
8f7eb2d0e9
|
@ -90,7 +90,7 @@ public:
|
||||||
const auto start_time = std::chrono::high_resolution_clock::now();
|
const auto start_time = std::chrono::high_resolution_clock::now();
|
||||||
auto rel_time_ms = std::chrono::ceil<std::chrono::milliseconds>(rel_time);
|
auto rel_time_ms = std::chrono::ceil<std::chrono::milliseconds>(rel_time);
|
||||||
|
|
||||||
while (rel_time_ms.count() > 0) {
|
do {
|
||||||
u64 timeout_ms = static_cast<u64>(rel_time_ms.count());
|
u64 timeout_ms = static_cast<u64>(rel_time_ms.count());
|
||||||
u64 res = WaitForSingleObjectEx(sem, timeout_ms, true);
|
u64 res = WaitForSingleObjectEx(sem, timeout_ms, true);
|
||||||
if (res == WAIT_OBJECT_0) {
|
if (res == WAIT_OBJECT_0) {
|
||||||
|
@ -101,7 +101,7 @@ public:
|
||||||
} else {
|
} else {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
}
|
} while (rel_time_ms.count() > 0);
|
||||||
|
|
||||||
return false;
|
return false;
|
||||||
#elif defined(__APPLE__)
|
#elif defined(__APPLE__)
|
||||||
|
@ -117,12 +117,9 @@ public:
|
||||||
bool try_acquire_until(const std::chrono::time_point<Clock, Duration>& abs_time) {
|
bool try_acquire_until(const std::chrono::time_point<Clock, Duration>& abs_time) {
|
||||||
#ifdef _WIN64
|
#ifdef _WIN64
|
||||||
const auto start_time = Clock::now();
|
const auto start_time = Clock::now();
|
||||||
if (start_time >= abs_time) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
auto rel_time = std::chrono::ceil<std::chrono::milliseconds>(abs_time - start_time);
|
auto rel_time = std::chrono::ceil<std::chrono::milliseconds>(abs_time - start_time);
|
||||||
while (rel_time.count() > 0) {
|
do {
|
||||||
u64 timeout_ms = static_cast<u64>(rel_time.count());
|
u64 timeout_ms = static_cast<u64>(rel_time.count());
|
||||||
u64 res = WaitForSingleObjectEx(sem, timeout_ms, true);
|
u64 res = WaitForSingleObjectEx(sem, timeout_ms, true);
|
||||||
if (res == WAIT_OBJECT_0) {
|
if (res == WAIT_OBJECT_0) {
|
||||||
|
@ -133,7 +130,7 @@ public:
|
||||||
} else {
|
} else {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
}
|
} while (rel_time.count() > 0);
|
||||||
|
|
||||||
return false;
|
return false;
|
||||||
#elif defined(__APPLE__)
|
#elif defined(__APPLE__)
|
||||||
|
|
Loading…
Reference in a new issue