Blame SOURCES/irssi-0.8.15-no-static-unload.patch

66dc4b
--- irssi-0.8.15/src/fe-common/core/fe-modules.c.old	2010-04-03 18:19:24.000000000 +0200
66dc4b
+++ irssi-0.8.15/src/fe-common/core/fe-modules.c	2010-10-12 14:43:52.586315553 +0200
66dc4b
@@ -195,6 +195,8 @@
66dc4b
         MODULE_FILE_REC *file;
66dc4b
         char *rootmodule, *submodule;
66dc4b
 	void *free_arg;
66dc4b
+	GSList *tmp;
66dc4b
+	int all_dynamic;
66dc4b
 
66dc4b
 	g_return_if_fail(data != NULL);
66dc4b
 
66dc4b
@@ -204,12 +206,19 @@
66dc4b
 
66dc4b
 	module = module_find(rootmodule);
66dc4b
 	if (module != NULL) {
66dc4b
-		if (*submodule == '\0')
66dc4b
-			module_unload(module);
66dc4b
+		if (*submodule == '\0') {
66dc4b
+			all_dynamic = 1;
66dc4b
+			for (tmp = module->files; tmp != NULL; tmp = tmp->next)
66dc4b
+				all_dynamic &= !MODULE_IS_STATIC((MODULE_FILE_REC*) tmp->data);
66dc4b
+			if (all_dynamic)
66dc4b
+				module_unload(module);
66dc4b
+		}
66dc4b
 		else {
66dc4b
 			file = module_file_find(module, submodule);
66dc4b
-                        if (file != NULL)
66dc4b
-				module_file_unload(file);
66dc4b
+                        if (file != NULL) {
66dc4b
+				if (!MODULE_IS_STATIC(file))
66dc4b
+					module_file_unload(file);
66dc4b
+			}
66dc4b
 			else
66dc4b
                                 module = NULL;
66dc4b
 		}