Clean up error handling a bit.

This commit is contained in:
Themaister 2011-05-13 21:22:37 +02:00
parent 5ae4235545
commit 4cc17a74f7
1 changed files with 18 additions and 10 deletions

View File

@ -162,33 +162,41 @@ static void init_dsp_plugin(void)
if (!plugin_init) if (!plugin_init)
{ {
SSNES_ERR("Failed to find symbol \"ssnes_dsp_plugin_init\" in DSP plugin.\n"); SSNES_ERR("Failed to find symbol \"ssnes_dsp_plugin_init\" in DSP plugin.\n");
dylib_close(g_extern.audio_data.dsp_lib); goto error;
g_extern.audio_data.dsp_lib = NULL;
return;
} }
g_extern.audio_data.dsp_plugin = plugin_init(); g_extern.audio_data.dsp_plugin = plugin_init();
if (!g_extern.audio_data.dsp_plugin) if (!g_extern.audio_data.dsp_plugin)
{ {
SSNES_ERR("Failed to get a valid DSP plugin.\n"); SSNES_ERR("Failed to get a valid DSP plugin.\n");
dylib_close(g_extern.audio_data.dsp_lib); goto error;
g_extern.audio_data.dsp_lib = NULL; }
return;
if (g_extern.audio_data.dsp_plugin->api_version != SSNES_API_VERSION)
{
SSNES_ERR("DSP plugin API mismatch!\n");
goto error;
} }
ssnes_dsp_info_t info = { ssnes_dsp_info_t info = {
.input_rate = g_settings.audio.in_rate, .input_rate = g_settings.audio.in_rate,
.output_rate = g_settings.audio.out_rate .output_rate = g_settings.audio.out_rate
}; };
g_extern.audio_data.dsp_handle = g_extern.audio_data.dsp_plugin->init(&info); g_extern.audio_data.dsp_handle = g_extern.audio_data.dsp_plugin->init(&info);
if (!g_extern.audio_data.dsp_handle) if (!g_extern.audio_data.dsp_handle)
{ {
SSNES_ERR("Failed to init DSP plugin.\n"); SSNES_ERR("Failed to init DSP plugin.\n");
goto error;
}
return;
error:
if (g_extern.audio_data.dsp_lib)
dylib_close(g_extern.audio_data.dsp_lib); dylib_close(g_extern.audio_data.dsp_lib);
g_extern.audio_data.dsp_plugin = NULL; g_extern.audio_data.dsp_plugin = NULL;
g_extern.audio_data.dsp_lib = NULL; g_extern.audio_data.dsp_lib = NULL;
return;
}
} }
static void deinit_dsp_plugin(void) static void deinit_dsp_plugin(void)