Make TurnSequencer non-x86-safe
authorDelyan Kratunov <delyank@fb.com>
Fri, 29 May 2015 00:31:09 +0000 (17:31 -0700)
committerNoam Lerner <noamler@fb.com>
Wed, 3 Jun 2015 16:51:08 +0000 (09:51 -0700)
Summary:
`TurnSequencer` uses inline assembly, which obviously won't work on ARM.
Guard said assembly to x86{,_64} targets.

Test Plan:
Added an always-false `static_assert` to the `ifdef` block, confirmed it gets
triggered (i.e., we're not removing the `pause` on x86_64).

Reviewed By: ngbronson@fb.com

Subscribers: folly-diffs@, yfeldblum, chalfant

FB internal diff: D2069320

Signature: t1:2069320:1431663264:3b3fb4282cf2b755f9b26c76b608b91ff665e226

folly/detail/TurnSequencer.h

index 42bb7d01ffdc6d960e017e28e76d7466005c8d5f..9fdb5b1d7969f186e0c4783e47bf759e2fc1e6d0 100644 (file)
@@ -22,6 +22,7 @@
 #include <unistd.h>
 
 #include <folly/detail/Futex.h>
+#include <folly/Portability.h>
 
 namespace folly {
 
@@ -123,7 +124,9 @@ struct TurnSequencer {
       // the first effectSpinCutoff tries are spins, after that we will
       // record ourself as a waiter and block with futexWait
       if (tries < effectiveSpinCutoff) {
+#if defined(__i386__) || FOLLY_X64
         asm volatile ("pause");
+#endif
         continue;
       }