Fix bug with Fence timeouts (#3243)

This commit is contained in:
Ben Doherty
2020-11-02 10:47:28 -07:00
committed by GitHub
parent 70dba2398e
commit dcca236f60
2 changed files with 2 additions and 0 deletions

View File

@@ -684,6 +684,7 @@ void MetalFence::onSignal(MetalFenceSignalBlock block) {
FenceStatus MetalFence::wait(uint64_t timeoutNs) {
if (@available(macOS 10.14, iOS 12, *)) {
std::unique_lock<std::mutex> guard(state->mutex);
timeoutNs = std::min(timeoutNs, (uint64_t) std::chrono::nanoseconds::max().count());
while (state->status == FenceStatus::TIMEOUT_EXPIRED) {
if (timeoutNs == 0 ||
state->cv.wait_for(guard, std::chrono::nanoseconds(timeoutNs)) ==

View File

@@ -71,6 +71,7 @@ FenceStatus FFence::waitAndDestroy(FFence* fence, Mode mode) noexcept {
UTILS_NOINLINE
FenceStatus FFence::wait(Mode mode, uint64_t timeout) noexcept {
ASSERT_PRECONDITION(UTILS_HAS_THREADING || timeout == 0, "Non-zero timeout requires threads.");
timeout = std::min(timeout, (uint64_t) ns::max().count());
FEngine& engine = mEngine;