Lines Matching refs:lt
44 lock_id(lt, idp)
45 DB_LOCKTAB *lt;
50 LOCK_PANIC_CHECK(lt);
52 LOCK_LOCKREGION(lt);
53 if (lt->region->id >= DB_LOCK_MAXID)
54 lt->region->id = 0;
55 id = ++lt->region->id;
56 UNLOCK_LOCKREGION(lt);
63 lock_vec(lt, locker, flags, list, nlist, elistp)
64 DB_LOCKTAB *lt;
69 return (__lock_vec_internal(lt,
74 lock_tvec(lt, txn, flags, list, nlist, elistp)
75 DB_LOCKTAB *lt;
81 return (__lock_vec_internal(lt,
86 __lock_vec_internal(lt, locker, txn, flags, list, nlist, elistp)
87 DB_LOCKTAB *lt;
98 LOCK_PANIC_CHECK(lt);
102 __db_fchk(lt->dbenv, "lock_vec", flags, DB_LOCK_NOWAIT)) != 0)
105 LOCK_LOCKREGION(lt);
107 if ((ret = __lock_validate_region(lt)) != 0) {
108 UNLOCK_LOCKREGION(lt);
116 ret = __lock_get_internal(lt, locker, txn, flags,
119 list[i].lock = LOCK_TO_OFFSET(lt, lp);
120 lt->region->nrequests++;
125 if ((ret = __lock_getobj(lt, locker,
133 if ((ret = __lock_getobj(lt, txn->parent->txnid,
150 __lock_freeobj(lt, sh_locker);
151 lt->region->nlockers--;
154 lp = OFFSET_TO_LOCK(lt, list[i].lock);
161 ret = __lock_put_internal(lt, lp, 0);
162 __lock_checklocker(lt, lp, 0);
166 if ((ret = __lock_getobj(lt, locker,
173 if ((ret = __lock_put_internal(lt, lp, 1)) != 0)
176 __lock_freeobj(lt, sh_locker);
177 lt->region->nlockers--;
182 HASHLOOKUP(lt->hashtab, __db_lockobj, links,
183 list[i].obj, sh_obj, lt->region->table_size,
198 lt->region->nreleases += lp->refcount;
199 __lock_remove_waiter(lt, sh_obj, lp,
201 __lock_checklocker(lt, lp, 1);
208 lt->region->nreleases += lp->refcount;
213 SH_TAILQ_INSERT_HEAD(<->region->free_locks,
218 __lock_freeobj(lt, sh_obj);
223 if ((ret = __lock_getobj(lt, locker,
230 __lock_printlock(lt, lp, 1);
234 __lock_freeobj(lt, sh_locker);
235 lt->region->nlockers--;
245 if (lt->region->need_dd && lt->region->detect != DB_LOCK_NORUN) {
247 lt->region->need_dd = 0;
251 UNLOCK_LOCKREGION(lt);
254 lock_detect(lt, 0, lt->region->detect);
262 lock_get(lt, locker, flags, obj, lock_mode, lock)
263 DB_LOCKTAB *lt;
272 LOCK_PANIC_CHECK(lt);
275 if ((ret = __db_fchk(lt->dbenv,
279 LOCK_LOCKREGION(lt);
281 if ((ret = __lock_validate_region(lt)) == 0) {
283 lockp = OFFSET_TO_LOCK(lt, *lock);
285 if ((ret = __lock_get_internal(lt,
288 *lock = LOCK_TO_OFFSET(lt, lockp);
289 lt->region->nrequests++;
293 UNLOCK_LOCKREGION(lt);
298 lock_tget(lt, txn, flags, obj, lock_mode, lock)
299 DB_LOCKTAB *lt;
309 LOCK_PANIC_CHECK(lt);
312 if ((ret = __db_fchk(lt->dbenv,
316 LOCK_LOCKREGION(lt);
318 if ((ret = __lock_validate_region(lt)) == 0) {
320 lockp = OFFSET_TO_LOCK(lt, *lock);
322 if ((ret = __lock_get_internal(lt,
325 *lock = LOCK_TO_OFFSET(lt, lockp);
326 lt->region->nrequests++;
330 UNLOCK_LOCKREGION(lt);
334 lock_put(lt, lock)
335 DB_LOCKTAB *lt;
341 LOCK_PANIC_CHECK(lt);
343 LOCK_LOCKREGION(lt);
345 if ((ret = __lock_validate_region(lt)) != 0)
348 lockp = OFFSET_TO_LOCK(lt, lock);
349 ret = __lock_put_internal(lt, lockp, 0);
352 __lock_checklocker(lt, lockp, 0);
354 if (lt->region->need_dd && lt->region->detect != DB_LOCK_NORUN) {
356 lt->region->need_dd = 0;
360 UNLOCK_LOCKREGION(lt);
363 lock_detect(lt, 0, lt->region->detect);
369 __lock_put_internal(lt, lockp, do_all)
370 DB_LOCKTAB *lt;
379 __db_err(lt->dbenv, "lock_put: invalid lock %lu",
380 (u_long)((u_int8_t *)lockp - (u_int8_t *)lt->region));
385 lt->region->nreleases += lockp->refcount;
387 lt->region->nreleases++;
401 __lock_remove_waiter(lt, sh_obj, lockp, DB_LSTAT_FREE);
405 state_changed = __lock_promote(lt, sh_obj);
409 HASHREMOVE_EL(lt->hashtab, __db_lockobj,
410 links, sh_obj, lt->region->table_size, __lock_lhash);
412 __db_shalloc_free(lt->mem,
414 SH_TAILQ_INSERT_HEAD(<->region->free_objs, sh_obj, links,
421 SH_TAILQ_INSERT_HEAD(<->region->free_locks, lockp, links, __db_lock);
428 lt->region->need_dd = 1;
434 __lock_get_internal(lt, locker, txn, flags, obj, lock_mode, lockp)
435 DB_LOCKTAB *lt;
453 lrp = lt->region;
455 __db_err(lt->dbenv,
462 if ((ret = __lock_grow_region(lt, DB_LOCK_LOCK, 0)) != 0)
464 lrp = lt->region;
467 newl_off = LOCK_TO_OFFSET(lt, newl);
477 if ((ret = __lock_getobj(lt, 0, obj, DB_LOCK_OBJTYPE, &sh_obj)) != 0)
480 lrp = lt->region; /* getobj might have grown */
481 newl = OFFSET_TO_LOCK(lt, newl_off);
529 } else if (CONFLICTS(lt, lp->mode, lock_mode))
552 if (CONFLICTS(lt, lp->mode, lock_mode) &&
573 __lock_getobj(lt, locker, NULL, DB_LOCK_LOCKER, &sh_locker)) != 0)
577 lrp = lt->region;
587 MUTEX_LOCK_OFFSET(lt->region, &newl->mutex));
588 (void)__db_mutex_lock(&newl->mutex, lt->reginfo.fd);
599 lt->region->need_dd = 1;
600 UNLOCK_LOCKREGION(lt);
607 (void)lock_detect(lt, 0, lrp->detect);
609 (void)__db_mutex_lock(&newl->mutex, lt->reginfo.fd);
611 LOCK_LOCKREGION(lt);
618 (void)__lock_promote(lt, sh_obj);
620 __lock_checklocker(lt, newl, 0);
670 __lock_is_locked(lt, locker, dbt, mode)
671 DB_LOCKTAB *lt;
680 lrp = lt->region;
683 HASHLOOKUP(lt->hashtab, __db_lockobj, links,
704 __lock_printlock(lt, lp, ispgno)
705 DB_LOCKTAB *lt;
774 obj = (u_int8_t *)lp + lp->obj - (u_int8_t *)lt->region;
786 __lock_getobj(lt, locker, dbt, type, objp)
787 DB_LOCKTAB *lt;
798 lrp = lt->region;
802 HASHLOOKUP(lt->hashtab, __db_lockobj, links, dbt, sh_obj,
806 HASHLOOKUP(lt->hashtab, __db_lockobj, links, locker,
820 if ((ret = __lock_grow_region(lt, DB_LOCK_OBJ, 0)) != 0)
822 lrp = lt->region;
834 __db_shalloc(lt->mem, obj_size, 0, &p)) != 0) {
835 if ((ret = __lock_grow_region(lt,
838 lrp = lt->region;
842 (void)__db_shalloc(lt->mem, obj_size, 0, &p);
859 HASHINSERT(lt->hashtab,
878 __lock_remove_waiter(lt, sh_obj, lockp, status)
879 DB_LOCKTAB *lt;
888 (void)__db_mutex_unlock(&lockp->mutex, lt->reginfo.fd);
892 __lock_checklocker(lt, lockp, do_remove)
893 DB_LOCKTAB *lt;
903 if (__lock_getobj(lt, lockp->holder, NULL, DB_LOCK_LOCKER, &sh_locker)
905 __lock_freeobj(lt, sh_locker);
906 lt->region->nlockers--;
911 __lock_freeobj(lt, obj)
912 DB_LOCKTAB *lt;
915 HASHREMOVE_EL(lt->hashtab,
916 __db_lockobj, links, obj, lt->region->table_size, __lock_lhash);
918 __db_shalloc_free(lt->mem, SH_DBT_PTR(&obj->lockobj));
919 SH_TAILQ_INSERT_HEAD(<->region->free_objs, obj, links, __db_lockobj);
931 __lock_downgrade(lt, lock, new_mode, flags)
932 DB_LOCKTAB *lt;
942 LOCK_PANIC_CHECK(lt);
943 LOCK_LOCKREGION(lt);
945 if ((ret = __lock_validate_region(lt)) == 0) {
946 lockp = OFFSET_TO_LOCK(lt, lock);
951 (void)__lock_promote(lt, obj);
952 ++lt->region->nreleases;
955 UNLOCK_LOCKREGION(lt);
967 __lock_promote(lt, obj)
968 DB_LOCKTAB *lt;
995 if (CONFLICTS(lt, lp_h->mode, lp_w->mode) &&
999 __txn_is_ancestor(lt->dbenv->tx_info,
1012 (void)__db_mutex_unlock(&lp_w->mutex, lt->reginfo.fd);