From 3b01fd9a7621aabc9f358aa91b6bb5291d8f3745 Mon Sep 17 00:00:00 2001 From: smf- Date: Sat, 7 May 2011 09:41:21 +0000 Subject: [PATCH] optimised device removal & prevent accessing removed devices --- src/emu/mconfig.c | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/src/emu/mconfig.c b/src/emu/mconfig.c index 5e90a05b618..f62b99c6d3b 100644 --- a/src/emu/mconfig.c +++ b/src/emu/mconfig.c @@ -140,12 +140,14 @@ void machine_config::device_remove_subdevices(const device_t *device) device_t *sub_device = m_devicelist.first(); while (sub_device != NULL) { - device_t *next_device = sub_device->next(); if (sub_device->owner() == device) - { device_remove_subdevices(sub_device); - m_devicelist.remove(sub_device->tag()); - } + + device_t *next_device = sub_device->next(); + + if (sub_device->owner() == device) + m_devicelist.remove(*sub_device); + sub_device = next_device; } } @@ -192,8 +194,9 @@ device_t *machine_config::device_remove(device_t *owner, const char *tag) { astring tempstring; const char *fulltag = owner->subtag(tempstring, tag); - device_remove_subdevices(m_devicelist.find(fulltag)); - m_devicelist.remove(fulltag); + device_t *device=m_devicelist.find(fulltag); + device_remove_subdevices(device); + m_devicelist.remove(*device); return NULL; }