@@ -191,7 +191,7 @@ int RelationPermanent::partners_ast_relation(void* ast_object)
191191
192192 AsyncContextHolder tdbb (dbb, FB_FUNCTION );
193193
194- auto oldFlags = relation->rel_flags .fetch_or (REL_check_partners);
194+ const auto oldFlags = relation->rel_flags .fetch_or (REL_check_partners);
195195 if (!(oldFlags & REL_check_partners))
196196 LCK_release (tdbb, lock);
197197 }
@@ -248,10 +248,15 @@ Record* RelationPermanent::getGCRecord(thread_db* tdbb, const Format* const form
248248
249249void RelationPermanent::checkPartners (thread_db* tdbb)
250250{
251- rel_flags |= REL_check_partners;
251+ const auto oldFlags = rel_flags.fetch_or (REL_check_partners);
252+ if (!(oldFlags & REL_check_partners))
253+ LCK_release (tdbb, rel_partners_lock);
254+
255+ Lock tempLock (tdbb, 0 , LCK_rel_partners);
256+ tempLock.setKey (rel_id);
252257
253- LCK_lock (tdbb, rel_partners_lock , LCK_EX , LCK_WAIT );
254- LCK_release (tdbb, rel_partners_lock );
258+ if ( LCK_lock (tdbb, &tempLock , LCK_EX , LCK_WAIT ))
259+ LCK_release (tdbb, &tempLock );
255260}
256261
257262bool RelationPermanent::isReplicating (thread_db* tdbb)
0 commit comments