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);