Various memory leaks and unnecessary checks removed by Oliver Stoneberg (no whatsnew)

This commit is contained in:
Miodrag Milanovic 2011-08-14 07:20:37 +00:00
parent b0e77ca0ee
commit 1d67e27539
8 changed files with 37 additions and 15 deletions

View File

@ -81,7 +81,7 @@ void device_sound_interface::static_add_route(device_t &device, UINT32 output, c
// append a new route to the list
astring devtag;
device.siblingtag(devtag, target);
sound->m_route_list.append(*global_alloc(sound_route(output, input, gain, core_strdup(devtag.cstr()))));
sound->m_route_list.append(*global_alloc(sound_route(output, input, gain, devtag.cstr())));
}
@ -229,10 +229,10 @@ bool device_sound_interface::interface_validity_check(emu_options &options, cons
for (const sound_route *route = first_route(); route != NULL; route = route->next())
{
// find a device with the requested tag
const device_t *target = device().mconfig().devicelist().find(route->m_target);
const device_t *target = device().mconfig().devicelist().find(route->m_target.cstr());
if (target == NULL)
{
mame_printf_error("%s: %s attempting to route sound to non-existant device '%s'\n", driver.source_file, driver.name, route->m_target);
mame_printf_error("%s: %s attempting to route sound to non-existant device '%s'\n", driver.source_file, driver.name, route->m_target.cstr());
error = true;
}
@ -240,7 +240,7 @@ bool device_sound_interface::interface_validity_check(emu_options &options, cons
const device_sound_interface *sound;
if (target != NULL && target->type() != SPEAKER && !target->interface(sound))
{
mame_printf_error("%s: %s attempting to route sound to a non-sound device '%s' (%s)\n", driver.source_file, driver.name, route->m_target, target->name());
mame_printf_error("%s: %s attempting to route sound to a non-sound device '%s' (%s)\n", driver.source_file, driver.name, route->m_target.cstr(), target->name());
error = true;
}
}
@ -316,13 +316,13 @@ void device_sound_interface::interface_post_start()
int streamoutputnum;
sound_stream *outputstream = sound->output_to_stream_output(outputnum, streamoutputnum);
if (outputstream == NULL)
fatalerror("Sound device '%s' specifies route for non-existant output #%d", route->m_target, outputnum);
fatalerror("Sound device '%s' specifies route for non-existant output #%d", route->m_target.cstr(), outputnum);
// find the input stream to connect to
int streaminputnum;
sound_stream *inputstream = input_to_stream_input(inputnum++, streaminputnum);
if (inputstream == NULL)
fatalerror("Sound device '%s' targeted output #%d to non-existant device '%s' input %d", route->m_target, outputnum, m_device.tag(), inputnum - 1);
fatalerror("Sound device '%s' targeted output #%d to non-existant device '%s' input %d", route->m_target.cstr(), outputnum, m_device.tag(), inputnum - 1);
// set the input
inputstream->set_input(streaminputnum, outputstream, streamoutputnum, route->m_gain);

View File

@ -109,7 +109,7 @@ public:
UINT32 m_output; // output index, or ALL_OUTPUTS
UINT32 m_input; // target input index
float m_gain; // gain
const char * m_target; // target tag
astring m_target; // target tag
};
// construction/destruction

View File

@ -999,12 +999,9 @@ static STREAM_UPDATE( custom_stream_callback )
rightand = (ldcore->audiosquelch & 2) ? 0x0000 : 0xffff;
/* see if we have enough samples to fill the buffer; if not, drop out */
if (ld != NULL)
{
samples_avail = ldcore->audiobufin - ldcore->audiobufout;
if (samples_avail < 0)
samples_avail += ldcore->audiobufsize;
}
samples_avail = ldcore->audiobufin - ldcore->audiobufout;
if (samples_avail < 0)
samples_avail += ldcore->audiobufsize;
/* if no attached ld, just clear the buffers */
if (samples_avail < samples)

View File

@ -224,7 +224,11 @@ core_options::~core_options()
{
// delete all entries from the list
while (m_entrylist != NULL)
{
core_options::entry *e = m_entrylist;
remove_entry(*m_entrylist);
delete e;
}
}
@ -290,7 +294,11 @@ void core_options::add_entries(const options_entry *entrylist, bool override_exi
{
// if we're overriding existing entries, then remove the old one
if (override_existing)
{
core_options::entry *e = m_entrylist;
remove_entry(*existing);
delete e;
}
// otherwise, just override the default and current values and throw out the new entry
else
@ -608,7 +616,11 @@ void core_options::reset()
{
// remove all entries from the list
while (m_entrylist != NULL)
{
core_options::entry *e = m_entrylist;
remove_entry(*m_entrylist);
delete e;
}
// reset the map
m_entrymap.reset();

View File

@ -1,6 +1,6 @@
//============================================================
//
// watchdog.h - watchdog handling
// watchdog.c - watchdog handling
//
// Copyright (c) 1996-2011, Nicola Salmoria and the MAME Team.
// Visit http://mamedev.org for licensing and usage restrictions.

View File

@ -99,6 +99,7 @@ static const translation_info gcc_translate[] =
{ VS2005, "-fno-strict-aliasing", "" }, // deprecated in VS2005
{ 0, "-fno-strict-aliasing", "/Oa" },
{ 0, "-fno-omit-frame-pointer", "" },
{ 0, "-fomit-frame-pointer", "" },
{ 0, "-Werror", "/WX" },
{ VS7, "-Wall", "/Wall /W3 /wd4003 /wd4018 /wd4146 /wd4242 /wd4244 /wd4619 /wd4702 /wd4706 /wd4710 /wd4711 /wd4738 /wd4826" },
{ 0, "-Wall", "/W0" },

View File

@ -642,8 +642,10 @@ void windows_osd_interface::init(running_machine &machine)
astring tempstring;
for (win_window_info *info = win_window_list; info != NULL; info = info->next)
{
tempstring.printf("Orientation(%s)", utf8_from_tstring(info->monitor->info.szDevice));
char *tmp = utf8_from_tstring(info->monitor->info.szDevice);
tempstring.printf("Orientation(%s)", tmp);
output_set_value(tempstring, info->targetorient);
osd_free(tmp);
}
// hook up the debugger log

View File

@ -279,6 +279,14 @@ INLINE void scalable_lock_release(scalable_lock *lock, INT32 myslot)
}
INLINE void scalable_lock_delete(scalable_lock *lock)
{
#if USE_SCALABLE_LOCKS
#else
DeleteCriticalSection(&lock->section);
#endif
}
//============================================================
// osd_work_queue_alloc
@ -486,6 +494,8 @@ void osd_work_queue_free(osd_work_queue *queue)
// free the list
if (queue->thread != NULL)
free(queue->thread);
scalable_lock_delete(&queue->lock);
// free all the events
if (queue->doneevent != NULL)