Skip to content

Commit bc1f642

Browse files
committed
Fixed assertion in DROP DATABASE reported in devel
1 parent d0756f3 commit bc1f642

2 files changed

Lines changed: 15 additions & 5 deletions

File tree

src/jrd/Relation.cpp

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -778,6 +778,10 @@ bool GCLock::acquire(thread_db* tdbb, int wait)
778778
oldFlags = gcFlags.load(std::memory_order_acquire); // and retry
779779
}
780780

781+
// No need to use LM for LTT
782+
if (gcRel->isLTT())
783+
return true;
784+
781785
// We incremented counter from 0 to 1 - take care about lck
782786
if (!gcLck)
783787
gcLck = gcRel->createLock(tdbb, LCK_rel_gc, false);
@@ -826,7 +830,7 @@ void GCLock::downgrade(thread_db* tdbb)
826830
checkGuard(newFlags);
827831
} while (!gcFlags.compare_exchange_weak(oldFlags, newFlags, std::memory_order_release, std::memory_order_acquire));
828832

829-
if ((newFlags & GC_counterMask == 0) && (newFlags & GC_blocking))
833+
if ((!gcRel->isLTT()) && (newFlags & GC_counterMask == 0) && (newFlags & GC_blocking))
830834
{
831835
fb_assert(newFlags & GC_locked);
832836
fb_assert(gcLck->lck_id);
@@ -886,6 +890,9 @@ bool GCLock::disable(thread_db* tdbb, int wait, Lock*& tempLock)
886890
return false;
887891
}
888892

893+
if (gcRel->isLTT())
894+
return true;
895+
889896
ensureReleased(tdbb);
890897

891898
// we need no AST here
@@ -901,6 +908,9 @@ bool GCLock::disable(thread_db* tdbb, int wait, Lock*& tempLock)
901908

902909
void GCLock::ensureReleased(thread_db* tdbb)
903910
{
911+
if (!gcLck)
912+
return;
913+
904914
unsigned oldFlags = gcFlags.load(std::memory_order_acquire);
905915
for (;;)
906916
{
@@ -980,7 +990,7 @@ const QualifiedName& IndexPermanent::getName()
980990

981991
FB_UINT64 IndexPermanent::makeLockId(MetaId relId, MetaId indexId)
982992
{
983-
if (MetadataCache::isLtt(relId))
993+
if (MetadataCache::isLTT(relId))
984994
return ElementBase::NO_METALOCK;
985995

986996
const int REL_ID_KEY_OFFSET = 16;

src/jrd/met.h

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -439,7 +439,7 @@ class MetadataCache : public Firebird::PermanentStorage
439439
return rc;
440440
}
441441

442-
static bool isLtt(MetaId id)
442+
static bool isLTT(MetaId id)
443443
{
444444
return (id >= MIN_LTT_ID && id <= MAX_LTT_ID);
445445
}
@@ -618,7 +618,7 @@ template <>
618618
inline jrd_rel* MetadataCache::getVersioned<Cached::Relation, jrd_rel>(thread_db* tdbb,
619619
MetaId id, ObjectBase::Flag flags)
620620
{
621-
if (isLtt(id))
621+
if (isLTT(id))
622622
return getLtt(tdbb, id);
623623

624624
auto& vector = getCache(tdbb)->mdc_relations;
@@ -642,7 +642,7 @@ template <>
642642
inline Cached::Relation* MetadataCache::getPerm<Cached::Relation>(thread_db* tdbb,
643643
MetaId id, ObjectBase::Flag flags)
644644
{
645-
if (isLtt(id))
645+
if (isLTT(id))
646646
return getPermanent(getLtt(tdbb, id));
647647

648648
auto& vector = getCache(tdbb)->mdc_relations;

0 commit comments

Comments
 (0)