From 1949b85c8153522224df691034fb0eef65f23b74 Mon Sep 17 00:00:00 2001 From: hap Date: Wed, 14 Aug 2024 13:43:58 +0200 Subject: memory_view: fix possible nullptr crash, add exists() getter --- src/emu/emumem.h | 3 ++- src/emu/emumem_mview.cpp | 25 ++++++++++++++----------- 2 files changed, 16 insertions(+), 12 deletions(-) diff --git a/src/emu/emumem.h b/src/emu/emumem.h index 1b9b6363622..ce55ed86a36 100644 --- a/src/emu/emumem.h +++ b/src/emu/emumem.h @@ -2645,13 +2645,13 @@ public: void select(int entry); void disable(); + bool exists() const { return m_config != nullptr; } std::optional entry() const { return m_cur_id == -1 ? std::optional() : m_cur_slot; } const std::string &name() const { return m_name; } private: - device_t & m_device; std::string m_name; std::map m_entry_mapping; @@ -2671,6 +2671,7 @@ private: void make_subdispatch(std::string context); int id_to_slot(int id) const; void register_state(); + void refresh_id(); }; diff --git a/src/emu/emumem_mview.cpp b/src/emu/emumem_mview.cpp index 2456cadc7f9..f29f5070f21 100644 --- a/src/emu/emumem_mview.cpp +++ b/src/emu/emumem_mview.cpp @@ -505,18 +505,25 @@ void memory_view::register_state() { m_device.machine().save().save_item(&m_device, "view", m_device.subtag(m_name).c_str(), 0, NAME(m_cur_slot)); m_device.machine().save().save_item(&m_device, "view", m_device.subtag(m_name).c_str(), 0, NAME(m_cur_id)); - m_device.machine().save().register_postload(save_prepost_delegate(NAME([this]() { m_handler_read->select_a(m_cur_id); m_handler_write->select_a(m_cur_id); }))); + m_device.machine().save().register_postload(save_prepost_delegate(FUNC(memory_view::refresh_id), this)); +} + +void memory_view::refresh_id() +{ + if (m_handler_read) { + m_handler_read->select_a(m_cur_id); + m_handler_write->select_a(m_cur_id); + } + + if (m_space) + m_space->invalidate_caches(read_or_write::READWRITE); } void memory_view::disable() { m_cur_slot = -1; m_cur_id = -1; - m_handler_read->select_a(-1); - m_handler_write->select_a(-1); - - if(m_space) - m_space->invalidate_caches(read_or_write::READWRITE); + refresh_id(); } void memory_view::select(int slot) @@ -527,11 +534,7 @@ void memory_view::select(int slot) m_cur_slot = slot; m_cur_id = i->second; - m_handler_read->select_a(m_cur_id); - m_handler_write->select_a(m_cur_id); - - if(m_space) - m_space->invalidate_caches(read_or_write::READWRITE); + refresh_id(); } int memory_view::id_to_slot(int id) const -- cgit v1.2.3