summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMathias Agopian <mathias@google.com>2012-10-09 14:38:19 -0700
committerMathias Agopian <mathias@google.com>2012-10-09 14:38:19 -0700
commitb5c9dcdf3bdab1862047060b8e18c9d1831db8bb (patch)
tree7f29502d0b3e27fcd41e7e511d813426d2369134
parentcb55857bbde34a06c19dde3db5064d1717a0173e (diff)
downloadframeworks_native-b5c9dcdf3bdab1862047060b8e18c9d1831db8bb.tar.gz
frameworks_native-b5c9dcdf3bdab1862047060b8e18c9d1831db8bb.tar.bz2
frameworks_native-b5c9dcdf3bdab1862047060b8e18c9d1831db8bb.zip
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
-rw-r--r--include/ui/Fence.h4
-rw-r--r--libs/ui/Fence.cpp11
2 files changed, 8 insertions, 7 deletions
diff --git a/include/ui/Fence.h b/include/ui/Fence.h
index a8460c2e3..ff6cefef9 100644
--- a/include/ui/Fence.h
+++ b/include/ui/Fence.h
@@ -60,14 +60,14 @@ public:
// before the fence signals then -ETIME is returned. A timeout of
// TIMEOUT_NEVER may be used to indicate that the call should wait
// indefinitely for the fence to signal.
- int wait(unsigned int timeout);
+ status_t wait(unsigned int timeout);
// waitForever is a convenience function for waiting forever for a fence to
// signal (just like wait(TIMEOUT_NEVER)), but issuing an error to the
// system log and fence state to the kernel log if the wait lasts longer
// than warningTimeout. The logname argument should be a string identifying
// the caller and will be included in the log message.
- int waitForever(unsigned int warningTimeout, const char* logname);
+ status_t waitForever(unsigned int warningTimeout, const char* logname);
// TIMEOUT_NEVER may be passed to the wait method to indicate that it
// should wait indefinitely for the fence to signal.
diff --git a/libs/ui/Fence.cpp b/libs/ui/Fence.cpp
index d2dbad276..d214b9761 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> Fence::merge(const String8& name, const sp<Fence>& f1,