-
-retry:
- switch (prevState) {
- case IN_SHUTDOWN:
- std::this_thread::sleep_for(std::chrono::milliseconds(1));
- goto retry_load;
- case FREE:
- LOG(FATAL) << "Invalid prev state for fd " << fd << ": " << int(prevState);
- }
-
- if (!sref.compare_exchange_weak(prevState,
- FREE,
- std::memory_order_acq_rel)) {
- goto retry;
- }
+ do {
+ switch (prevState) {
+ case IN_SHUTDOWN:
+ std::this_thread::sleep_for(std::chrono::milliseconds(1));
+ prevState = sref.load(std::memory_order_relaxed);
+ continue;
+ case FREE:
+ LOG(FATAL) << "Invalid prev state for fd " << fd << ": "
+ << int(prevState);
+ }
+ } while (
+ !sref.compare_exchange_weak(prevState, FREE, std::memory_order_relaxed));