From d7e58ce2d094d1990abbd8ac96f6a0600855d34a Mon Sep 17 00:00:00 2001 From: Aaron Giles Date: Mon, 31 Dec 2007 01:57:54 +0000 Subject: [PATCH] (From Oliver Stoneberg) Fixed several memory leaks related to SCSI CD emulation. --- src/emu/machine/53c810.c | 10 ++++++++++ src/emu/machine/53c810.h | 1 + src/emu/machine/am53cf96.c | 10 ++++++++++ src/emu/machine/am53cf96.h | 1 + src/emu/machine/wd33c93.c | 10 ++++++++++ src/emu/machine/wd33c93.h | 1 + src/mame/drivers/konamigq.c | 6 ++++++ src/mame/drivers/konamigv.c | 6 ++++++ 8 files changed, 45 insertions(+) diff --git a/src/emu/machine/53c810.c b/src/emu/machine/53c810.c index 8c182413843..4ccd1c16543 100644 --- a/src/emu/machine/53c810.c +++ b/src/emu/machine/53c810.c @@ -698,6 +698,16 @@ extern void lsi53c810_init(const struct LSI53C810interface *interface) } } +extern void lsi53c810_exit(const struct LSI53C810interface *interface) +{ + int i; + + for (i = 0; i < interface->scsidevs->devs_present; i++) + { + SCSIDeleteInstance( devices[interface->scsidevs->devices[i].scsiID] ); + } +} + void lsi53c810_read_data(int bytes, UINT8 *pData) { if (devices[last_id]) diff --git a/src/emu/machine/53c810.h b/src/emu/machine/53c810.h index 8818ee9f3b3..860a4776135 100644 --- a/src/emu/machine/53c810.h +++ b/src/emu/machine/53c810.h @@ -12,6 +12,7 @@ struct LSI53C810interface }; extern void lsi53c810_init(const struct LSI53C810interface *interface); +extern void lsi53c810_exit(const struct LSI53C810interface *interface); extern void lsi53c810_read_data(int bytes, UINT8 *pData); extern void lsi53c810_write_data(int bytes, UINT8 *pData); diff --git a/src/emu/machine/am53cf96.c b/src/emu/machine/am53cf96.c index 0dce33a9e54..b930d6796a3 100644 --- a/src/emu/machine/am53cf96.c +++ b/src/emu/machine/am53cf96.c @@ -231,6 +231,16 @@ void am53cf96_init( const struct AM53CF96interface *interface ) state_save_register_global(last_id); } +void am53cf96_exit( const struct AM53CF96interface *interface ) +{ + int i; + + for (i = 0; i < interface->scsidevs->devs_present; i++) + { + SCSIDeleteInstance( devices[interface->scsidevs->devices[i].scsiID] ); + } +} + // retrieve data from the SCSI controller void am53cf96_read_data(int bytes, UINT8 *pData) { diff --git a/src/emu/machine/am53cf96.h b/src/emu/machine/am53cf96.h index ea893904f1d..de2b00600ae 100644 --- a/src/emu/machine/am53cf96.h +++ b/src/emu/machine/am53cf96.h @@ -15,6 +15,7 @@ struct AM53CF96interface }; extern void am53cf96_init( const struct AM53CF96interface *interface ); +extern void am53cf96_exit( const struct AM53CF96interface *interface ); extern void am53cf96_read_data(int bytes, UINT8 *pData); void am53cf96_write_data(int bytes, UINT8 *pData); void *am53cf96_get_device(int id); diff --git a/src/emu/machine/wd33c93.c b/src/emu/machine/wd33c93.c index 03b8f4455b0..f93f1190bf8 100644 --- a/src/emu/machine/wd33c93.c +++ b/src/emu/machine/wd33c93.c @@ -809,6 +809,16 @@ extern void wd33c93_init( const struct WD33C93interface *interface ) // state_save_register_item_array("wd33c93", 0, scsi_data); } +extern void wd33c93_exit( const struct WD33C93interface *interface ) +{ + int i; + + for (i = 0; i < interface->scsidevs->devs_present; i++) + { + SCSIDeleteInstance( devices[interface->scsidevs->devices[i].scsiID] ); + } +} + void wd33c93_get_dma_data( int bytes, UINT8 *pData ) { int len = bytes; diff --git a/src/emu/machine/wd33c93.h b/src/emu/machine/wd33c93.h index 4e967941465..fdeb206cc38 100644 --- a/src/emu/machine/wd33c93.h +++ b/src/emu/machine/wd33c93.h @@ -15,6 +15,7 @@ struct WD33C93interface }; extern void wd33c93_init( const struct WD33C93interface *interface ); +extern void wd33c93_exit( const struct WD33C93interface *interface ); extern void wd33c93_get_dma_data(int bytes, UINT8 *pData); extern void wd33c93_write_data(int bytes, UINT8 *pData); extern void *wd33c93_get_device(int id); diff --git a/src/mame/drivers/konamigq.c b/src/mame/drivers/konamigq.c index 7342cb131a2..a0b0af1981f 100644 --- a/src/mame/drivers/konamigq.c +++ b/src/mame/drivers/konamigq.c @@ -346,10 +346,16 @@ static DRIVER_INIT( konamigq ) m_p_n_pcmram = memory_region( REGION_SOUND1 ) + 0x80000; } +static void konamigq_exit(running_machine *machine) +{ + am53cf96_exit(&scsi_intf); +} + static MACHINE_START( konamigq ) { /* init the scsi controller and hook up it's DMA */ am53cf96_init(&scsi_intf); + add_exit_callback(machine, konamigq_exit); psx_dma_install_read_handler(5, scsi_dma_read); psx_dma_install_write_handler(5, scsi_dma_write); diff --git a/src/mame/drivers/konamigv.c b/src/mame/drivers/konamigv.c index 88e01ac121f..104c1342fbd 100644 --- a/src/mame/drivers/konamigv.c +++ b/src/mame/drivers/konamigv.c @@ -306,12 +306,18 @@ static const struct AM53CF96interface scsi_intf = &scsi_irq, /* command completion IRQ */ }; +static void konamigv_exit(running_machine *machine) +{ + am53cf96_exit(&scsi_intf); +} + static DRIVER_INIT( konamigv ) { psx_driver_init(); /* init the scsi controller and hook up it's DMA */ am53cf96_init(&scsi_intf); + add_exit_callback(machine, konamigv_exit); psx_dma_install_read_handler(5, scsi_dma_read); psx_dma_install_write_handler(5, scsi_dma_write); }