From b5c9dcdf3bdab1862047060b8e18c9d1831db8bb Mon Sep 17 00:00:00 2001 From: Mathias Agopian Date: Tue, 9 Oct 2012 14:38:19 -0700 Subject: Fence didn't manager sync_wait error codes properly error codes are returned in errno, this caused ::waitForwever() to only wait for 1 second and return improper error code (-1). needed to help debugging 7316632 Bug: 7316632 Change-Id: Ie144f614a88393393972a3a770c6b4b0581f961a --- libs/ui/Fence.cpp | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) (limited to 'libs/ui/Fence.cpp') diff --git a/libs/ui/Fence.cpp b/libs/ui/Fence.cpp index d2dbad276a..d214b9761c 100644 --- a/libs/ui/Fence.cpp +++ b/libs/ui/Fence.cpp @@ -42,26 +42,27 @@ Fence::~Fence() { } } -int Fence::wait(unsigned int timeout) { +status_t Fence::wait(unsigned int timeout) { ATRACE_CALL(); if (mFenceFd == -1) { return NO_ERROR; } - return sync_wait(mFenceFd, timeout); + int err = sync_wait(mFenceFd, timeout); + return err < 0 ? -errno : status_t(NO_ERROR); } -int Fence::waitForever(unsigned int warningTimeout, const char* logname) { +status_t Fence::waitForever(unsigned int warningTimeout, const char* logname) { ATRACE_CALL(); if (mFenceFd == -1) { return NO_ERROR; } int err = sync_wait(mFenceFd, warningTimeout); - if (err == -ETIME) { + if (err < 0 && errno == ETIME) { ALOGE("%s: fence %d didn't signal in %u ms", logname, mFenceFd, warningTimeout); err = sync_wait(mFenceFd, TIMEOUT_NEVER); } - return err; + return err < 0 ? -errno : status_t(NO_ERROR); } sp Fence::merge(const String8& name, const sp& f1, -- cgit v1.2.3-59-g8ed1b