Skip to content

Commit f952e35

Browse files
eder-matheusclaude
andcommitted
dbSta: fix STA cleanup for database reload
Clear staCell pointers on all masters before freeing the network to prevent the GUI render thread from accessing freed ConcreteCell objects. Recreate the default scene after deleteScenes() so cmd_scene_ remains valid for heatmap settings queries on exit. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com> Signed-off-by: Eder Monteiro <emrmonteiro@precisioninno.com>
1 parent 886e1bc commit f952e35

1 file changed

Lines changed: 9 additions & 0 deletions

File tree

src/dbSta/src/dbSta.cc

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -326,9 +326,18 @@ void dbSta::postReadDb(odb::dbDatabase* db)
326326
void dbSta::preDbClear(odb::dbDatabase* db)
327327
{
328328
db_cbk_->removeOwner();
329+
// Clear staCell pointers on all masters before freeing the network.
330+
// The GUI render thread may still be accessing these concurrently.
331+
for (odb::dbLib* lib : db->getLibs()) {
332+
for (odb::dbMaster* master : lib->getMasters()) {
333+
master->staSetCell(nullptr);
334+
}
335+
}
329336
// Delete scenes before clearing the network, since scenes hold
330337
// LibertyLibrary pointers that ConcreteNetwork::clear() will free.
338+
// Recreate the default scene so cmd_scene_ remains valid.
331339
deleteScenes();
340+
makeDefaultScene();
332341
clear();
333342
db_network_->clear();
334343
// Restore db_ since dbNetwork::clear() nulls it, but we need it for reload

0 commit comments

Comments
 (0)