|
|
@ -15,7 +15,7 @@ typedef struct KeyNode_r{ |
|
|
|
struct KeyNode_r *next; |
|
|
|
} KeyNode; |
|
|
|
|
|
|
|
bool isNotLocked(KeyNode *LockedHead, int KeyIx){ |
|
|
|
bool isNotCurLocked(KeyNode *LockedHead, int KeyIx){ |
|
|
|
KeyNode *temp = LockedHead; |
|
|
|
while (temp != NULL){ |
|
|
|
if (temp->KeyIx == KeyIx) |
|
|
@ -62,7 +62,7 @@ ERL_NIF_TERM tryLock(ErlNifEnv *env, int, const ERL_NIF_TERM argv[]){ |
|
|
|
while (enif_get_list_cell(env, allList, &head, &allList)){ |
|
|
|
KeyIx = enif_hash(ERL_NIF_INTERNAL_HASH, head, HashSalt) % LockSize; |
|
|
|
KeyNode OneKeyNode = {KeyIx, LockedHead}; |
|
|
|
if (isNotLocked(LockedHead, KeyIx)){ |
|
|
|
if (isNotCurLocked(LockedHead, KeyIx)){ |
|
|
|
if (lockOne(env, &ThePid, KeyIx, Val)){ |
|
|
|
LockedHead = &OneKeyNode; |
|
|
|
}else{ |
|
|
|