Skip to content

Commit 6adf768

Browse files
committed
Temporary fix for races while scanning partner concurrently. Synchronization should be re-implemented, single atomic flag is not enough.
1 parent adf5176 commit 6adf768

2 files changed

Lines changed: 5 additions & 2 deletions

File tree

src/jrd/Relation.h

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -871,8 +871,9 @@ class RelationPermanent : public Firebird::PermanentStorage
871871
return rel_indices.erase(tdbb, id);
872872
}
873873

874-
Lock* rel_partners_lock; // partners lock
875-
GCLock rel_gc_lock; // garbage collection lock
874+
Firebird::Mutex rel_scan_partners_mutex;
875+
Lock* rel_partners_lock; // partners lock
876+
GCLock rel_gc_lock; // garbage collection lock
876877

877878
void releaseLock(thread_db* tdbb);
878879

src/jrd/met.epp

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4296,6 +4296,8 @@ void RelationPermanent::scanPartners(thread_db* tdbb)
42964296

42974297
Attachment* attachment = tdbb->getAttachment();
42984298

4299+
MutexLockGuard guard(rel_scan_partners_mutex, FB_FUNCTION);
4300+
42994301
if (rel_flags & REL_check_partners)
43004302
{
43014303
LCK_lock(tdbb, rel_partners_lock, LCK_SR, LCK_WAIT);

0 commit comments

Comments
 (0)