ref: a43c1e6fab4d75c8d173a482ee8f4aa04de151c0
dir: /win32-386/tas.c/
// could also use windozy InterlockedCompareExchange(p, 1, 0), but why
int
tas(long *p)
{
int v;
_asm {
mov eax, p
mov ebx, 1
xchg ebx, [eax]
mov v, ebx
}
switch(v) {
case 0:
case 1:
return v;
default:
print("canlock: corrupted 0x%lux\n", v);
return 1;
}
}