Mercurial > pidgin
comparison libpurple/plugin.c @ 21193:67940cc52dc4
Re-add a loop I removed in b5acf346a6ed692acc613d71a9ebbfcf4726cc63. It's
necessary to update the dependent_plugins of each dependency of a plugin
being unloaded. Without this, unloading the dependency later will result
in a crash.
author | Richard Laager <rlaager@wiktel.com> |
---|---|
date | Sun, 07 Oct 2007 14:25:17 +0000 |
parents | 5d93e197ba44 |
children | a4a55a096ac8 |
comparison
equal
deleted
inserted
replaced
21192:5d93e197ba44 | 21193:67940cc52dc4 |
---|---|
674 plugin->dependent_plugins = g_list_remove(plugin->dependent_plugins, dep_name); | 674 plugin->dependent_plugins = g_list_remove(plugin->dependent_plugins, dep_name); |
675 } | 675 } |
676 } | 676 } |
677 } | 677 } |
678 | 678 |
679 /* Remove this plugin from each dependency's dependent_plugins list. */ | |
680 for (l = plugin->info->dependencies; l != NULL; l = l->next) | |
681 { | |
682 const char *dep_name = (const char *)l->data; | |
683 PurplePlugin *dependency; | |
684 | |
685 dependency = purple_plugins_find_with_id(dep_name); | |
686 | |
687 if (dependency != NULL) | |
688 dependency->dependent_plugins = g_list_remove(dependency->dependent_plugins, plugin->info->id); | |
689 else | |
690 purple_debug_error("plugins", "Unable to remove from dependency list for %s\n", dep_name); | |
691 } | |
692 | |
679 if (plugin->native_plugin) { | 693 if (plugin->native_plugin) { |
680 if (plugin->info->unload != NULL) | 694 if (plugin->info->unload != NULL) |
681 if (!plugin->info->unload(plugin)) | 695 if (!plugin->info->unload(plugin)) |
682 return FALSE; | 696 return FALSE; |
683 | 697 |