From e9939cf574133d0beb5e9cfb37c7666109ac19df Mon Sep 17 00:00:00 2001 From: Sebastien Helleu Date: Wed, 25 Oct 2006 07:38:56 +0000 Subject: [PATCH] Fixed crash when unloading/reloading scripts using modifiers --- src/plugins/scripts/weechat-script.c | 15 +++++++++++++++ weechat/src/plugins/scripts/weechat-script.c | 15 +++++++++++++++ 2 files changed, 30 insertions(+) diff --git a/src/plugins/scripts/weechat-script.c b/src/plugins/scripts/weechat-script.c index 8163fc054..799138141 100644 --- a/src/plugins/scripts/weechat-script.c +++ b/src/plugins/scripts/weechat-script.c @@ -235,6 +235,7 @@ weechat_script_remove (t_weechat_plugin *plugin, t_plugin_script **script_list, t_plugin_script *script) { t_plugin_handler *ptr_handler, *next_handler; + t_plugin_modifier *ptr_modifier, *next_modifier; /* remove all handlers pointing to script */ ptr_handler = plugin->handlers; @@ -250,6 +251,20 @@ weechat_script_remove (t_weechat_plugin *plugin, ptr_handler = ptr_handler->next_handler; } + /* remove all modifiers pointing to script */ + ptr_modifier = plugin->modifiers; + while (ptr_modifier) + { + if ((t_plugin_script *)ptr_modifier->modifier_pointer == script) + { + next_modifier = ptr_modifier->next_modifier; + plugin->modifier_remove (plugin, ptr_modifier); + ptr_modifier = next_modifier; + } + else + ptr_modifier = ptr_modifier->next_modifier; + } + /* free data */ if (script->filename) free (script->filename); diff --git a/weechat/src/plugins/scripts/weechat-script.c b/weechat/src/plugins/scripts/weechat-script.c index 8163fc054..799138141 100644 --- a/weechat/src/plugins/scripts/weechat-script.c +++ b/weechat/src/plugins/scripts/weechat-script.c @@ -235,6 +235,7 @@ weechat_script_remove (t_weechat_plugin *plugin, t_plugin_script **script_list, t_plugin_script *script) { t_plugin_handler *ptr_handler, *next_handler; + t_plugin_modifier *ptr_modifier, *next_modifier; /* remove all handlers pointing to script */ ptr_handler = plugin->handlers; @@ -250,6 +251,20 @@ weechat_script_remove (t_weechat_plugin *plugin, ptr_handler = ptr_handler->next_handler; } + /* remove all modifiers pointing to script */ + ptr_modifier = plugin->modifiers; + while (ptr_modifier) + { + if ((t_plugin_script *)ptr_modifier->modifier_pointer == script) + { + next_modifier = ptr_modifier->next_modifier; + plugin->modifier_remove (plugin, ptr_modifier); + ptr_modifier = next_modifier; + } + else + ptr_modifier = ptr_modifier->next_modifier; + } + /* free data */ if (script->filename) free (script->filename);