Mercurial > pidgin
comparison src/plugin.c @ 12985:de3a3669dbe1
[gaim-migrate @ 15338]
Fix a looping oddness I was seeing, it didn't seem to hurt anything that I
saw, but it certainly wasn't right.
committer: Tailor Script <tailor@pidgin.im>
| author | Etan Reisner <pidgin@unreliablesource.net> |
|---|---|
| date | Sun, 22 Jan 2006 07:06:30 +0000 |
| parents | 92ae94619e2c |
| children | 9d8025ec5e23 |
comparison
equal
deleted
inserted
replaced
| 12984:d1e6890ed062 | 12985:de3a3669dbe1 |
|---|---|
| 605 | 605 |
| 606 gboolean | 606 gboolean |
| 607 gaim_plugin_unload(GaimPlugin *plugin) | 607 gaim_plugin_unload(GaimPlugin *plugin) |
| 608 { | 608 { |
| 609 #ifdef GAIM_PLUGINS | 609 #ifdef GAIM_PLUGINS |
| 610 GList *l; | 610 GList *l, *l_next; |
| 611 | 611 |
| 612 g_return_val_if_fail(plugin != NULL, FALSE); | 612 g_return_val_if_fail(plugin != NULL, FALSE); |
| 613 | 613 |
| 614 loaded_plugins = g_list_remove(loaded_plugins, plugin); | 614 loaded_plugins = g_list_remove(loaded_plugins, plugin); |
| 615 if ((plugin->info != NULL) && GAIM_IS_PROTOCOL_PLUGIN(plugin)) | 615 if ((plugin->info != NULL) && GAIM_IS_PROTOCOL_PLUGIN(plugin)) |
| 616 protocol_plugins = g_list_remove(protocol_plugins, plugin); | 616 protocol_plugins = g_list_remove(protocol_plugins, plugin); |
| 624 gaim_notify_close_with_handle(plugin); | 624 gaim_notify_close_with_handle(plugin); |
| 625 | 625 |
| 626 plugin->loaded = FALSE; | 626 plugin->loaded = FALSE; |
| 627 | 627 |
| 628 /* Unload all plugins that depend on this plugin. */ | 628 /* Unload all plugins that depend on this plugin. */ |
| 629 for (l = plugin->dependent_plugins; l != NULL; l = l->next) | 629 /* XXX Does this want to be while (plugin->dependent_plugins != NULL) |
| 630 * instead of this loop? I fixed it to get l->next before calling | |
| 631 * gaim_plugin_unload (which can change the list here). This worked | |
| 632 * much better for me but I'm not 100% sure it will always work. */ | |
| 633 for (l = plugin->dependent_plugins; l != NULL; l = l_next) | |
| 630 { | 634 { |
| 631 const char * dep_name = (const char *)l->data; | 635 const char * dep_name = (const char *)l->data; |
| 632 GaimPlugin *dep_plugin; | 636 GaimPlugin *dep_plugin; |
| 637 | |
| 638 l_next = l->next; | |
| 633 | 639 |
| 634 dep_plugin = gaim_plugins_find_with_id(dep_name); | 640 dep_plugin = gaim_plugins_find_with_id(dep_name); |
| 635 | 641 |
| 636 if (dep_plugin != NULL && gaim_plugin_is_loaded(dep_plugin)) | 642 if (dep_plugin != NULL && gaim_plugin_is_loaded(dep_plugin)) |
| 637 { | 643 { |
