audiohal: Check for EINTR and retry when waiting for EventFlag
EINTR can be returned in the case when a futex wait has been
interrupted by a signal. We need to retry in that case.
Bug: 35813113
Change-Id: I7eaee5298f5c0bc5cd62309c3fd8349ee3eae629
Test: make
diff --git a/media/libaudiohal/StreamHalHidl.cpp b/media/libaudiohal/StreamHalHidl.cpp
index 2a7a67f..26cd4b5 100644
--- a/media/libaudiohal/StreamHalHidl.cpp
+++ b/media/libaudiohal/StreamHalHidl.cpp
@@ -356,8 +356,8 @@
}
return ret;
}
- if (ret == -EAGAIN) {
- // This normally retries no more than once.
+ if (ret == -EAGAIN || ret == -EINTR) {
+ // Spurious wakeup. This normally retries no more than once.
goto retry;
}
return ret;
@@ -616,8 +616,8 @@
}
return ret;
}
- if (ret == -EAGAIN) {
- // This normally retries no more than once.
+ if (ret == -EAGAIN || ret == -EINTR) {
+ // Spurious wakeup. This normally retries no more than once.
goto retry;
}
return ret;