diff options
author | Mark Doliner <markdoliner@pidgin.im> | 2009-03-27 09:09:00 +0000 |
---|---|---|
committer | Mark Doliner <markdoliner@pidgin.im> | 2009-03-27 09:09:00 +0000 |
commit | e828a578a2ec71a000e95e9a8a524d9e24676dec (patch) | |
tree | 355b7aa56b845130b4cce4cef2c95981f2233c44 /libpurple/plugins/mono | |
parent | 01355bdb6362819d186adb5604bb9248a4c3b6e5 (diff) | |
download | pidgin-e828a578a2ec71a000e95e9a8a524d9e24676dec.tar.gz |
Free some memory if we exit early due to an error. Thanks to
Mayank Jain Nawal's email to the devel list for pointing this
out. Oh, and I didn't test these changes at all... I guess I
probably should.
Diffstat (limited to 'libpurple/plugins/mono')
-rw-r--r-- | libpurple/plugins/mono/loader/mono.c | 11 |
1 files changed, 9 insertions, 2 deletions
diff --git a/libpurple/plugins/mono/loader/mono.c b/libpurple/plugins/mono/loader/mono.c index 6810ef42a0..1f378e0901 100644 --- a/libpurple/plugins/mono/loader/mono.c +++ b/libpurple/plugins/mono/loader/mono.c @@ -44,11 +44,11 @@ static gboolean probe_mono_plugin(PurplePlugin *plugin) purple_debug(PURPLE_DEBUG_INFO, "mono", "Probing plugin\n"); if (ml_is_api_dll(mono_assembly_get_image(assm))) { - purple_debug(PURPLE_DEBUG_INFO, "mono", "Found our PurpleAPI.dll\n"); + purple_debug_info("mono", "Found our PurpleAPI.dll\n"); + mono_assembly_close(assm); return FALSE; } - info = g_new0(PurplePluginInfo, 1); mplug = g_new0(PurpleMonoPlugin, 1); mplug->signal_data = NULL; @@ -58,12 +58,16 @@ static gboolean probe_mono_plugin(PurplePlugin *plugin) mplug->klass = ml_find_plugin_class(mono_assembly_get_image(mplug->assm)); if (!mplug->klass) { purple_debug(PURPLE_DEBUG_ERROR, "mono", "no plugin class in \'%s\'\n", file); + mono_assembly_close(assm); + g_free(mplug); return FALSE; } mplug->obj = mono_object_new(ml_get_domain(), mplug->klass); if (!mplug->obj) { purple_debug(PURPLE_DEBUG_ERROR, "mono", "obj not valid\n"); + mono_assembly_close(assm); + g_free(mplug); return FALSE; } @@ -85,6 +89,8 @@ static gboolean probe_mono_plugin(PurplePlugin *plugin) if (!(found_load && found_unload && found_destroy)) { purple_debug(PURPLE_DEBUG_ERROR, "mono", "did not find the required methods\n"); + mono_assembly_close(assm); + g_free(mplug); return FALSE; } @@ -93,6 +99,7 @@ static gboolean probe_mono_plugin(PurplePlugin *plugin) /* now that the methods are filled out we can populate the info struct with all the needed info */ + info = g_new0(PurplePluginInfo, 1); info->id = ml_get_prop_string(plugin_info, "Id"); info->name = ml_get_prop_string(plugin_info, "Name"); info->version = ml_get_prop_string(plugin_info, "Version"); |