|
|
@ -26,11 +26,7 @@ bool lockOne(ErlNifEnv *env, ErlNifPid *ThePid, int KeyIx, uint64_t Val){ |
|
|
|
if (enif_is_process_alive(env, ThePid)){ |
|
|
|
return false; |
|
|
|
}else{ |
|
|
|
if (LockSlot[KeyIx].compare_exchange_strong(Expected, Val)){ |
|
|
|
return true; |
|
|
|
}else{ |
|
|
|
return false; |
|
|
|
} |
|
|
|
return LockSlot[KeyIx].compare_exchange_strong(Expected, Val); |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
@ -42,11 +38,7 @@ ERL_NIF_TERM tryLock(ErlNifEnv *env, int, const ERL_NIF_TERM argv[]){ |
|
|
|
enif_self(env, &ThePid); |
|
|
|
uint64_t Val = (uint64_t)(ThePid.pid); |
|
|
|
|
|
|
|
if (lockOne(env, &ThePid, KeyIx, Val)){ |
|
|
|
return atomTrue; |
|
|
|
}else{ |
|
|
|
return atomFalse; |
|
|
|
} |
|
|
|
return lockOne(env, &ThePid, KeyIx, Val) ? atomTrue : atomFalse; |
|
|
|
} |
|
|
|
|
|
|
|
ERL_NIF_TERM tryLocks(ErlNifEnv *env, int, const ERL_NIF_TERM argv[]){ |
|
|
@ -82,11 +74,7 @@ ERL_NIF_TERM releaseLock(ErlNifEnv *env, int, const ERL_NIF_TERM argv[]){ |
|
|
|
enif_self(env, &ThePid); |
|
|
|
uint64_t Expected = (uint64_t)(ThePid.pid); |
|
|
|
|
|
|
|
if (LockSlot[KeyIx].compare_exchange_strong(Expected, 0)){ |
|
|
|
return atomTrue; |
|
|
|
}else{ |
|
|
|
return atomFalse; |
|
|
|
} |
|
|
|
return LockSlot[KeyIx].compare_exchange_strong(Expected, 0) ? atomTrue : atomFalse; |
|
|
|
} |
|
|
|
|
|
|
|
ERL_NIF_TERM releaseLocks(ErlNifEnv *env, int, const ERL_NIF_TERM argv[]){ |
|
|
|