From c57c3c99301cc884e154ea10ad4efd3874d6fd53 Mon Sep 17 00:00:00 2001 From: Olivier Galibert Date: Wed, 3 Mar 2021 11:34:55 +0100 Subject: views: Keep a reference to the handlers so that installs overlapping them don't kill them --- src/emu/emumem.h | 1 + src/emu/emumem_mview.cpp | 10 ++++++++++ 2 files changed, 11 insertions(+) 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 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); -- cgit v1.2.3