(void)__db_mutex_unlock(&lockp->mutex, lt->fd);
(void)__db_mutex_unlock(&lockp->mutex, lt->reginfo.fd);
__dd_abort(dbenv, info)	DB_ENV *dbenv;	locker_info *info;{	struct __db_lock *lockp;	DB_LOCKTAB *lt;	DB_LOCKOBJ *lockerp, *sh_obj;	int ret;	lt = dbenv->lk_info;	LOCK_LOCKREGION(lt);	/* Find the locker's last lock. */	if ((ret =	    __lock_getobj(lt, info->id, NULL, DB_LOCK_LOCKER, &lockerp)) != 0)		goto out;	lockp = SH_LIST_FIRST(&lockerp->heldby, __db_lock);	if (LOCK_TO_OFFSET(lt, lockp) != info->last_lock ||	    lockp == NULL || lockp->status != DB_LSTAT_WAITING)		goto out;	/* Abort lock, take it off list, and wake up this lock. */	lockp->status = DB_LSTAT_ABORTED;	lt->region->ndeadlocks++;	SH_LIST_REMOVE(lockp, locker_links, __db_lock);	sh_obj = (DB_LOCKOBJ *)((u_int8_t *)lockp + lockp->obj);	SH_TAILQ_REMOVE(&sh_obj->waiters, lockp, links, __db_lock);        (void)__db_mutex_unlock(&lockp->mutex, lt->fd);	ret = 0;out:	UNLOCK_LOCKREGION(lt);	return (ret);}