@@ -4562,7 +4562,7 @@ static bool delete_index(thread_db* tdbb, SSHORT phase, DeferredWork* work, jrd_
45624562 case 0:
45634563 index = relation->getIndexLock(tdbb, id);
45644564 if (index)
4565- index->idl_lock.releaseLock (tdbb);
4565+ index->idl_lock.unlock (tdbb);
45664566 return false;
45674567
45684568 case 1:
@@ -4647,33 +4647,30 @@ static bool delete_index(thread_db* tdbb, SSHORT phase, DeferredWork* work, jrd_
46474647 {
46484648 // if we are here that means we got exclLock() on step 3
46494649 fb_assert(index->idl_lock.hasExclLock(tdbb));
4650- //if (index->idl_lock.hasExLock(tdbb))
4651- {
4652- // Release index existence lock and memory.
4653- fb_assert(relation->rel_index_locks.load(tdbb, index->idl_id) == index);
46544650
4655- HazardPtr<IndexLock> arrVal = index;
4656- if (!relation->rel_index_locks.replace(tdbb, index->idl_id, arrVal, nullptr))
4657- ERR_post(Arg::Gds(isc_random) << "Index block gone unexpestedly");
4658- fb_assert(!arrVal);
4659- index->idl_lock.releaseLock(tdbb);
4660- index->delayedDelete(tdbb);
4651+ // Release index existence lock and memory.
4652+ fb_assert(relation->rel_index_locks.load(tdbb, index->idl_id) == index);
46614653
4662- // Release index refresh lock and memory.
4654+ HazardPtr<IndexLock> arrVal = index;
4655+ if (!relation->rel_index_locks.replace(tdbb, index->idl_id, arrVal, nullptr))
4656+ ERR_post(Arg::Gds(isc_random) << "Index block gone unexpestedly");
4657+ fb_assert(!arrVal);
4658+ index->idl_lock.releaseLock(tdbb, ExistenceLock::ReleaseMethod::DropObject);
4659+ index->delayedDelete(tdbb);
46634660
4664- for (IndexBlock** iptr = &relation->rel_index_blocks; *iptr; iptr = &(*iptr)->idb_next)
4661+ // Release index refresh lock and memory.
4662+ for (IndexBlock** iptr = &relation->rel_index_blocks; *iptr; iptr = &(*iptr)->idb_next)
4663+ {
4664+ if ((*iptr)->idb_id == id)
46654665 {
4666- if ((*iptr)->idb_id == id)
4667- {
4668- IndexBlock* index_block = *iptr;
4669- *iptr = index_block->idb_next;
4666+ IndexBlock* index_block = *iptr;
4667+ *iptr = index_block->idb_next;
46704668
4671- // Lock was released in IDX_delete_index().
4669+ // Lock was released in IDX_delete_index().
46724670
4673- delete index_block->idb_lock;
4674- delete index_block;
4675- break;
4676- }
4671+ delete index_block->idb_lock;
4672+ delete index_block;
4673+ break;
46774674 }
46784675 }
46794676 }
@@ -4932,7 +4929,9 @@ static bool delete_relation(thread_db* tdbb, SSHORT phase, DeferredWork* work, j
49324929 END_FOR
49334930
49344931 // Release relation locks
4935- relation->rel_existence_lock->releaseLock(tdbb);
4932+ if (relation->rel_existence_lock) {
4933+ relation->rel_existence_lock->releaseLock(tdbb, ExistenceLock::ReleaseMethod::DropObject);
4934+ }
49364935 if (relation->rel_partners_lock) {
49374936 LCK_release(tdbb, relation->rel_partners_lock);
49384937 }
0 commit comments