Skip to content

Commit 5d8e6d2

Browse files
authored
Merge pull request #7203 from andyfox-rushc/master
Delete module inst after moditerms
2 parents 9d59854 + c717078 commit 5d8e6d2

2 files changed

Lines changed: 24 additions & 16 deletions

File tree

src/odb/src/db/dbModInst.cpp

Lines changed: 14 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -237,16 +237,6 @@ void dbModInst::destroy(dbModInst* modinst)
237237

238238
_dbModule* _master = (_dbModule*) modinst->getMaster();
239239

240-
if (_block->_journal) {
241-
_block->_journal->beginAction(dbJournal::DELETE_OBJECT);
242-
_block->_journal->pushParam(dbModInstObj);
243-
_block->_journal->pushParam(modinst->getName());
244-
_block->_journal->pushParam(modinst->getId());
245-
_block->_journal->pushParam(_module->getId());
246-
_block->_journal->pushParam(_master->getId());
247-
_block->_journal->endAction();
248-
}
249-
250240
_master->_mod_inst = dbId<_dbModInst>(); // clear
251241

252242
// Note that we only destroy the module instance, not the module
@@ -256,6 +246,8 @@ void dbModInst::destroy(dbModInst* modinst)
256246
dbSet<dbModITerm>::iterator moditerm_itr;
257247
for (moditerm_itr = moditerms.begin(); moditerm_itr != moditerms.end();) {
258248
dbModITerm* moditerm = *moditerm_itr;
249+
// pins disconnected before deletion, so we restore pin before
250+
// trying to connect on journalling restore of modInst.
259251
moditerm->disconnect();
260252
moditerm_itr = dbModITerm::destroy(moditerm_itr);
261253
}
@@ -283,6 +275,18 @@ void dbModInst::destroy(dbModInst* modinst)
283275
}
284276

285277
dbProperty::destroyProperties(_modinst);
278+
279+
// Assure that dbModInst obj is restored first by being journalled last.
280+
if (_block->_journal) {
281+
_block->_journal->beginAction(dbJournal::DELETE_OBJECT);
282+
_block->_journal->pushParam(dbModInstObj);
283+
_block->_journal->pushParam(modinst->getName());
284+
_block->_journal->pushParam(modinst->getId());
285+
_block->_journal->pushParam(_module->getId());
286+
_block->_journal->pushParam(_master->getId());
287+
_block->_journal->endAction();
288+
}
289+
286290
_dbModule* _parent = (_dbModule*) (modinst->getParent());
287291
_parent->_modinst_hash.erase(modinst->getName());
288292
_block->_modinst_tbl->destroy(_modinst);

src/odb/src/db/dbModule.cpp

Lines changed: 10 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -419,18 +419,23 @@ void dbModule::destroy(dbModule* module)
419419
inst_itr = dbInst::destroy(inst_itr);
420420
}
421421

422+
dbSet<dbModNet> modnets = module->getModNets();
423+
dbSet<dbModNet>::iterator modnet_itr;
424+
for (modnet_itr = modnets.begin(); modnet_itr != modnets.end();) {
425+
modnet_itr = dbModNet::destroy(modnet_itr);
426+
}
427+
422428
dbSet<dbModBTerm> modbterms = module->getModBTerms();
423429
dbSet<dbModBTerm>::iterator modbterm_itr;
424430
for (modbterm_itr = modbterms.begin(); modbterm_itr != modbterms.end();) {
425431
modbterm_itr = dbModBTerm::destroy(modbterm_itr);
426432
}
427433

428-
dbSet<dbModNet> modnets = module->getModNets();
429-
dbSet<dbModNet>::iterator modnet_itr;
430-
for (modnet_itr = modnets.begin(); modnet_itr != modnets.end();) {
431-
modnet_itr = dbModNet::destroy(modnet_itr);
432-
}
434+
dbProperty::destroyProperties(_module);
433435

436+
// Journal the deletion of the dbModule after its ports
437+
// and properties deleted, so that on restore we have
438+
// dbModule to hang objects on.
434439
if (block->_journal) {
435440
block->_journal->beginAction(dbJournal::DELETE_OBJECT);
436441
block->_journal->pushParam(dbModuleObj);
@@ -439,7 +444,6 @@ void dbModule::destroy(dbModule* module)
439444
block->_journal->endAction();
440445
}
441446

442-
dbProperty::destroyProperties(_module);
443447
block->_module_hash.remove(_module);
444448
block->_module_tbl->destroy(_module);
445449
}

0 commit comments

Comments
 (0)