summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJaroslav Škarvada <jskarvad@redhat.com>2013-09-16 14:59:32 +0200
committerAlexander Færøy <ahf@0x90.dk>2014-06-15 22:48:43 +0200
commitd1e60a3b8f8a154a33e935279a6aeb356686efda (patch)
treedf0961a376e5d345b1cb9a17a17205825251d0ff
parent75d7e1b0bbf02b2453e3bcc678d0fc47fe00134d (diff)
downloadirssi-d1e60a3b8f8a154a33e935279a6aeb356686efda.zip
Disallow unloading of static modules
-rw-r--r--src/fe-common/core/fe-modules.c19
1 files changed, 14 insertions, 5 deletions
diff --git a/src/fe-common/core/fe-modules.c b/src/fe-common/core/fe-modules.c
index 4a13f668..df97ceb1 100644
--- a/src/fe-common/core/fe-modules.c
+++ b/src/fe-common/core/fe-modules.c
@@ -195,6 +195,8 @@ static void cmd_unload(const char *data)
MODULE_FILE_REC *file;
char *rootmodule, *submodule;
void *free_arg;
+ GSList *tmp;
+ int all_dynamic;
g_return_if_fail(data != NULL);
@@ -204,14 +206,21 @@ static void cmd_unload(const char *data)
module = module_find(rootmodule);
if (module != NULL) {
- if (*submodule == '\0')
- module_unload(module);
+ if (*submodule == '\0') {
+ all_dynamic = 1;
+ for (tmp = module->files; tmp != NULL; tmp = tmp->next)
+ all_dynamic &= !MODULE_IS_STATIC((MODULE_FILE_REC*) tmp->data);
+ if (all_dynamic)
+ module_unload(module);
+ }
else {
file = module_file_find(module, submodule);
- if (file != NULL)
- module_file_unload(file);
+ if (file != NULL) {
+ if (!MODULE_IS_STATIC(file))
+ module_file_unload(file);
+ }
else
- module = NULL;
+ module = NULL;
}
}