Make Barrier robust against spurious wakeups

Fix Barrier implementation so that Wait cannot return prematurely
due to a spurious condition variable wakeup or interrupted futex call.

Document the resulting semantics of barrier.h, which are a bit surprising,
but appear to be exactly what current clients need.

Fix the test so that it actually passes with the fixed barrier.h,
and no longer tests for properties that can't be correctly satisfied.

Improve comment for InitTimeSpec, which we almost used.

(Differs from AOSP patch in that Increment returns void here,
as does cv TimedWait.  In AOSP they return bool.)


Change-Id: I0b25f33bcd22322ba04e3951cd484843788c2bf5
(cherry picked from commit 5567c11b9157eec110c0631aa2bff5836631e868)
4 files changed