MCPcopy Create free account
hub / github.com/alibaba/PhotonLibOS / cvar_do_wait

Function cvar_do_wait

thread/thread.cpp:1800–1815  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

1798 return ((spinlock*)arg)->lock();
1799 }
1800 static int cvar_do_wait(thread_list* q, void* m, Timeout timeout, int(*lock)(void*), void(*unlock)(void*)) {
1801 assert(m);
1802 if (!m)
1803 LOG_ERROR_RETURN(EINVAL, -1, "there must be a lock");
1804 int ret = thread_usleep_defer(timeout, q, unlock, m);
1805 auto en = ret < 0 ? errno : 0;
1806 while (true) {
1807 int lock_ret = lock(m);
1808 if (lock_ret == 0) break;
1809 LOG_ERROR("failed to get mutex lock, ` `, try again", VALUE(ret), ERRNO());
1810 thread_usleep(1000, nullptr);
1811 }
1812 if (ret < 0) errno = en;
1813 return waitq_translate_errno(ret);
1814
1815 }
1816 int condition_variable::wait(mutex* m, Timeout timeout)
1817 {
1818 return cvar_do_wait((thread_list*)&q, m, timeout, mutex_lock, mutex_unlock);

Callers 1

waitMethod · 0.85

Calls 4

waitq_translate_errnoFunction · 0.85
thread_usleep_deferFunction · 0.70
thread_usleepFunction · 0.70
ERRNOClass · 0.50

Tested by

no test coverage detected