MCPcopy Create free account
hub / github.com/Snapchat/KeyDB / unlock_futex

Function unlock_futex

src/fastlock.cpp:454–469  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

452#ifdef __linux__
453#define ROL32(v, shift) ((v << shift) | (v >> (32-shift)))
454extern "C" void unlock_futex(struct fastlock *lock, uint16_t ifutex)
455{
456 unsigned mask = (1U << (ifutex % 32));
457 unsigned futexT;
458
459 for (;;)
460 {
461 __atomic_load(&lock->futex, &futexT, __ATOMIC_ACQUIRE);
462 futexT &= mask;
463 if (!futexT)
464 break;
465
466 if (futex(&lock->m_ticket.u, FUTEX_WAKE_BITSET_PRIVATE, INT_MAX, nullptr, mask) == 1)
467 break;
468 }
469}
470#endif
471
472extern "C" void fastlock_free(struct fastlock *lock)

Callers 1

fastlock_unlockFunction · 0.85

Calls 1

futexFunction · 0.85

Tested by

no test coverage detected