MCPcopy Create free account
hub / github.com/FirebirdSQL/firebird / LCK_lock

Function LCK_lock

src/jrd/lck.cpp:650–708  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

648
649
650bool LCK_lock(thread_db* tdbb, Lock* lock, USHORT level, SSHORT wait)
651{
652/**************************************
653 *
654 * L C K _ l o c k
655 *
656 **************************************
657 *
658 * Functional description
659 * Lock a block. There had better not have been a lock there.
660 *
661 **************************************/
662 SET_TDBB(tdbb);
663 fb_assert(LCK_CHECK_LOCK(lock));
664
665#ifdef DEBUG_LCK
666 LckSync sync(lock, "LCK_lock");
667#endif
668
669 Database* dbb = lock->lck_dbb;
670 lock->setLockAttachment(tdbb->getAttachment());
671
672 WaitCancelGuard guard(tdbb, lock, wait);
673 FbLocalStatus statusVector;
674
675 ENQUEUE(tdbb, &statusVector, lock, level, wait);
676 fb_assert(LCK_CHECK_LOCK(lock));
677
678 if (!lock->lck_id)
679 {
680 lock->setLockAttachment(NULL);
681 if (!wait)
682 {
683 statusVector.copyTo(tdbb->tdbb_status_vector);
684 return false;
685 }
686
687 switch (statusVector[1])
688 {
689 case isc_deadlock:
690 case isc_lock_conflict:
691 case isc_lock_timeout:
692 statusVector.copyTo(tdbb->tdbb_status_vector);
693 tdbb->checkCancelState();
694 return false;
695 case isc_lockmanerr:
696 dbb->dbb_flags |= DBB_bugcheck;
697 break;
698 }
699
700 statusVector.raise();
701 }
702
703 if (!lock->lck_compatible)
704 lock->lck_physical = lock->lck_logical = level;
705
706 fb_assert(LCK_CHECK_LOCK(lock));
707 return true;

Callers 15

purgeAllAttachmentsMethod · 0.85
ensureLockIsCreatedMethod · 0.85
eraseMethod · 0.85
acquireGCLockMethod · 0.85
acquireMethod · 0.85
lockAndReadHeaderMethod · 0.85
startCryptThreadMethod · 0.85
cryptThreadRoutineMethod · 0.85
init_database_lockFunction · 0.85
execute_looperFunction · 0.85
lookupCollationMethod · 0.85

Calls 7

SET_TDBBFunction · 0.85
ENQUEUEFunction · 0.85
setLockAttachmentMethod · 0.80
checkCancelStateMethod · 0.80
getAttachmentMethod · 0.45
copyToMethod · 0.45
raiseMethod · 0.45

Tested by

no test coverage detected