blob: 099c6b28bf6fc1c7309ea5a047c6f1957dcf8c90 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
|
#include <winbase.h>
void llvm::call_once(once_flag &flag, void (*fptr)(void)) {
while (flag != Done) {
if (flag == Wait) {
::Sleep(1);
continue;
}
sys::cas_flag old_val = sys::CompareAndSwap(&flag, Wait, Uninitialized);
if (old_val == Uninitialized) {
fptr();
sys::MemoryFence();
flag = Done;
return;
}
}
sys::MemoryFence();
}
|