@@ -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
902909void 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
981991FB_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 ;
0 commit comments