summaryrefslogtreecommitdiffstatshomepage
path: root/src
diff options
context:
space:
mode:
author Olivier Galibert <galibert@pobox.com>2021-03-03 11:34:55 +0100
committer Olivier Galibert <galibert@pobox.com>2021-03-03 11:35:38 +0100
commitc57c3c99301cc884e154ea10ad4efd3874d6fd53 (patch)
treeb530f7ae12c1e344198d84d0420da260ae313b83 /src
parent7a9e85c6270f0aeeabeaceb62560b4a3220a7c54 (diff)
views: Keep a reference to the handlers so that installs overlapping them don't kill them
Diffstat (limited to 'src')
-rw-r--r--src/emu/emumem.h1
-rw-r--r--src/emu/emumem_mview.cpp10
2 files changed, 11 insertions, 0 deletions
diff --git a/src/emu/emumem.h b/src/emu/emumem.h
index aeeef578500..ef47941290a 100644
--- a/src/emu/emumem.h
+++ b/src/emu/emumem.h
@@ -1844,6 +1844,7 @@ public:
};
memory_view(device_t &device, std::string name);
+ ~memory_view();
memory_view_entry &operator[](int slot);
diff --git a/src/emu/emumem_mview.cpp b/src/emu/emumem_mview.cpp
index 34e6883b3c0..d8a442e8ff2 100644
--- a/src/emu/emumem_mview.cpp
+++ b/src/emu/emumem_mview.cpp
@@ -637,6 +637,14 @@ memory_view::memory_view(device_t &device, std::string name) : m_device(device),
device.view_register(this);
}
+memory_view::~memory_view()
+{
+ if (m_handler_read) {
+ m_handler_read->unref();
+ m_handler_write->unref();
+ }
+}
+
void memory_view::register_state()
{
m_device.machine().save().save_item(&m_device, "view", m_name.c_str(), 0, NAME(m_cur_slot));
@@ -776,6 +784,8 @@ std::pair<handler_entry *, handler_entry *> memory_view::make_handlers(address_s
}
h_make(awidth, m_config->data_width(), m_config->addr_shift(), m_config->endianness(), space, *this, m_handler_read, m_handler_write);
+ m_handler_read->ref();
+ m_handler_write->ref();
}
return std::make_pair(m_handler_read, m_handler_write);