Bufix: LVS browser crashed on 'unload' and 'unload all'

This commit is contained in:
Matthias Koefferlein 2021-03-14 19:30:55 +01:00
parent 7bd9e8dc1b
commit 19741c9fb2
3 changed files with 13 additions and 9 deletions

View File

@ -772,10 +772,7 @@ NetlistBrowserDialog::update_content ()
m_reload_action->setEnabled (l2ndb != 0);
browser_page->enable_updates (false); // Avoid building the internal lists several times ...
if (browser_page->db () != l2ndb) {
db_changed = true;
browser_page->set_db (l2ndb);
}
db_changed = browser_page->set_db (l2ndb);
browser_page->set_max_shape_count (m_max_shape_count);
browser_page->set_highlight_style (m_marker_color, m_marker_line_width, m_marker_vertex_size, m_marker_halo, m_marker_dither_pattern, m_marker_intensity, m_use_original_colors, m_auto_color_enabled ? &m_auto_colors : 0);
browser_page->set_window (m_window, m_window_dim);

View File

@ -118,6 +118,7 @@ NetlistBrowserPage::NetlistBrowserPage (QWidget * /*parent*/)
mp_view (0),
m_cv_index (0),
mp_plugin_root (0),
mp_last_db (0),
m_history_ptr (0),
m_signals_enabled (true),
m_enable_updates (true),
@ -606,7 +607,7 @@ NetlistBrowserPage::rerun_macro ()
{
BEGIN_PROTECTED
if (! mp_database->generator ().empty ()) {
if (mp_database.get () && ! mp_database->generator ().empty ()) {
std::map<std::string, tl::Variant> add_pars;
@ -764,12 +765,14 @@ NetlistBrowserPage::show_all (bool f)
}
}
void
bool
NetlistBrowserPage::set_db (db::LayoutToNetlist *l2ndb)
{
if (l2ndb == mp_database.get ()) {
// NOTE: mp_last_db mirrors mp_database, but does not automatically fall back to 0 when the DB is deleted. This way we can call
// set_db(0) with the correct behavior after the DB has been destroyed.
if (l2ndb == mp_last_db) {
// not change
return;
return false;
}
if (mp_info_dialog) {
@ -779,6 +782,7 @@ NetlistBrowserPage::set_db (db::LayoutToNetlist *l2ndb)
db::LayoutVsSchematic *lvsdb = dynamic_cast<db::LayoutVsSchematic *> (l2ndb);
mp_database.reset (l2ndb);
mp_last_db = l2ndb;
rerun_button->setEnabled (mp_database.get () && ! mp_database->generator ().empty ());
if (rerun_button->isEnabled ()) {
@ -807,6 +811,8 @@ NetlistBrowserPage::set_db (db::LayoutToNetlist *l2ndb)
setup_trees ();
selection_changed_event ();
return true;
}
void

View File

@ -91,7 +91,7 @@ public:
/**
* @brief Attaches the page to a L2N DB
*/
void set_db (db::LayoutToNetlist *database);
bool set_db(db::LayoutToNetlist *database);
/**
* @brief Gets the database the page is connected to
@ -228,6 +228,7 @@ private:
unsigned int m_cv_index;
lay::Dispatcher *mp_plugin_root;
tl::weak_ptr<db::LayoutToNetlist> mp_database;
db::LayoutToNetlist *mp_last_db;
std::vector<QModelIndex> m_history;
size_t m_history_ptr;
bool m_signals_enabled;