Merge "Fence didn't manager sync_wait error codes properly" into jb-mr1-dev
diff --git a/include/ui/Fence.h b/include/ui/Fence.h
index a8460c2..ff6cefe 100644
--- a/include/ui/Fence.h
+++ b/include/ui/Fence.h
@@ -60,14 +60,14 @@
     // 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 d2dbad2..d214b97 100644
--- a/libs/ui/Fence.cpp
+++ b/libs/ui/Fence.cpp
@@ -42,26 +42,27 @@
     }
 }
 
-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,