@@ -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);
0 commit comments