From 7f02a9e47b257bb9729bb44b985b53c4fc663800 Mon Sep 17 00:00:00 2001 From: Miodrag Milanovic Date: Thu, 14 Jan 2016 14:10:36 +0100 Subject: [PATCH] Fix image unload (nw) --- src/emu/image.cpp | 13 +++++++++++-- src/emu/image.h | 4 ++-- 2 files changed, 13 insertions(+), 4 deletions(-) diff --git a/src/emu/image.cpp b/src/emu/image.cpp index 1a82f01ba2e..d49c395bbdf 100644 --- a/src/emu/image.cpp +++ b/src/emu/image.cpp @@ -51,6 +51,9 @@ image_manager::image_manager(running_machine &machine) std::string image_err = std::string(image->error()); std::string image_basename(image_name); + /* unload all images */ + unload_all(); + fatalerror_exitcode(machine, MAMERR_DEVICE, "Device %s load (%s) failed: %s", image->device().name(), image_basename.c_str(), @@ -63,9 +66,10 @@ image_manager::image_manager(running_machine &machine) } //------------------------------------------------- -// image_manager - destructor +// unload_all - unload all images and +// extract options //------------------------------------------------- -image_manager::~image_manager() +void image_manager::unload_all() { // extract the options options_extract(); @@ -227,11 +231,16 @@ void image_manager::postdevice_init() { /* retrieve image error message */ std::string image_err = std::string(image->error()); + + /* unload all images */ + unload_all(); fatalerror_exitcode(machine(), MAMERR_DEVICE, "Device %s load failed: %s", image->device().name(), image_err.c_str()); } } + /* add a callback for when we shut down */ + machine().add_notifier(MACHINE_NOTIFY_EXIT, machine_notify_delegate(FUNC(image_manager::unload_all), this)); } diff --git a/src/emu/image.h b/src/emu/image.h index 0961203f376..99fc61c3bda 100644 --- a/src/emu/image.h +++ b/src/emu/image.h @@ -20,8 +20,8 @@ class image_manager public: // construction/destruction image_manager(running_machine &machine); - ~image_manager(); - + + void unload_all(); void postdevice_init(); std::string &mandatory_scan(std::string &mandatory);