void erts_lc_check_exact(erts_lc_lock_t *have, int have_len) { erts_lc_locked_locks_t *l_lcks = get_my_locked_locks(); if (!l_lcks) { if (have && have_len > 0) lock_mismatch(NULL, 1, -1, have, have_len, -1, NULL, 0); } else { int i; erts_lc_locked_lock_t *l_lck = l_lcks->locked.first; for (i = 0; i < have_len; i++) { if (!find_lock(&l_lck, &have[i])) lock_mismatch(l_lcks, 1, i, have, have_len, -1, NULL, 0); } for (i = 0, l_lck = l_lcks->locked.first; l_lck; l_lck = l_lck->next) i++; if (i != have_len) lock_mismatch(l_lcks, 1, -1, have, have_len, -1, NULL, 0); } }
void erts_lc_check_exact(erts_lc_lock_t *have, int have_len) { lc_thread_t *thr = get_my_locked_locks(); if (!thr) { if (have && have_len > 0) lock_mismatch(NULL, 1, -1, have, have_len, -1, NULL, 0); } else { int i; lc_locked_lock_t *ll = thr->locked.first; for (i = 0; i < have_len; i++) { if (!find_lock(&ll, &have[i])) lock_mismatch(thr, 1, i, have, have_len, -1, NULL, 0); } for (i = 0, ll = thr->locked.first; ll; ll = ll->next) i++; if (i != have_len) lock_mismatch(thr, 1, -1, have, have_len, -1, NULL, 0); } }
void erts_lc_check(erts_lc_lock_t *have, int have_len, erts_lc_lock_t *have_not, int have_not_len) { int i; erts_lc_locked_locks_t *l_lcks = get_my_locked_locks(); erts_lc_locked_lock_t *l_lck; if (have && have_len > 0) { if (!l_lcks) lock_mismatch(NULL, 0, -1, have, have_len, -1, have_not, have_not_len); l_lck = l_lcks->locked.first; for (i = 0; i < have_len; i++) { if (!find_lock(&l_lck, &have[i])) lock_mismatch(l_lcks, 0, i, have, have_len, -1, have_not, have_not_len); } } if (have_not && have_not_len > 0 && l_lcks) { l_lck = l_lcks->locked.first; for (i = 0; i < have_not_len; i++) { if (find_lock(&l_lck, &have_not[i])) lock_mismatch(l_lcks, 0, -1, have, have_len, i, have_not, have_not_len); } } }
void erts_lc_check(erts_lc_lock_t *have, int have_len, erts_lc_lock_t *have_not, int have_not_len) { int i; lc_thread_t *thr = get_my_locked_locks(); lc_locked_lock_t *ll; if (have && have_len > 0) { if (!thr) lock_mismatch(NULL, 0, -1, have, have_len, -1, have_not, have_not_len); ll = thr->locked.first; for (i = 0; i < have_len; i++) { if (!find_lock(&ll, &have[i])) lock_mismatch(thr, 0, i, have, have_len, -1, have_not, have_not_len); } } if (have_not && have_not_len > 0 && thr) { ll = thr->locked.first; for (i = 0; i < have_not_len; i++) { if (find_lock(&ll, &have_not[i])) lock_mismatch(thr, 0, -1, have, have_len, i, have_not, have_not_len); } } }