|
|
@ -64,13 +64,11 @@ ERL_NIF_TERM tryLocks(ErlNifEnv *env, int, const ERL_NIF_TERM argv[]){ |
|
|
|
if(lockOne(env, &ThePid, KeyIx, Val)){ |
|
|
|
cnt++; |
|
|
|
}else{ |
|
|
|
uint64_t RExpected; |
|
|
|
allList = argv[0]; |
|
|
|
for(int i = 0; i <= cnt; i++){ |
|
|
|
enif_get_list_cell(env, allList, &head, &allList); |
|
|
|
enif_get_int(env, head, &KeyIx); |
|
|
|
RExpected = Val; |
|
|
|
LockSlot[KeyIx].compare_exchange_strong(RExpected, 0); |
|
|
|
LockSlot[KeyIx].store(0); |
|
|
|
} |
|
|
|
return atomFalse; |
|
|
|
} |
|
|
@ -114,7 +112,7 @@ ERL_NIF_TERM releaseLocks(ErlNifEnv *env, int, const ERL_NIF_TERM argv[]){ |
|
|
|
|
|
|
|
ERL_NIF_TERM getLockPid(ErlNifEnv *env, int, const ERL_NIF_TERM argv[]){ |
|
|
|
int KeyIx; |
|
|
|
KeyIx = enif_hash(ERL_NIF_INTERNAL_HASH, argv[0], HashSalt) % LockSize; |
|
|
|
enif_get_int(env, argv[0], &KeyIx); |
|
|
|
ErlNifPid ThePid; |
|
|
|
|
|
|
|
uint64_t Var = LockSlot[KeyIx].load(); |
|
|
|