From 0522e3d8723b0e06a67a22e68016cc9b63c83d4a Mon Sep 17 00:00:00 2001 From: Russell Bryant Date: Thu, 6 Dec 2007 19:11:35 +0000 Subject: [PATCH] Add a new module flag to indicate that a build sum is present. Modules built against older Asterisk 1.4 headers will now load properly with just a warning indicating that they are old and may cause problems. (patch by paravoid) git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.4@91501 65c4cc65-6c06-0410-ace0-fbb531ad65f3 --- include/asterisk/module.h | 5 +++-- main/loader.c | 6 ++++-- 2 files changed, 7 insertions(+), 4 deletions(-) diff --git a/include/asterisk/module.h b/include/asterisk/module.h index b867f6517b..4c1e40b1db 100644 --- a/include/asterisk/module.h +++ b/include/asterisk/module.h @@ -179,6 +179,7 @@ struct ast_module_user_list; enum ast_module_flags { AST_MODFLAG_DEFAULT = 0, AST_MODFLAG_GLOBAL_SYMBOLS = (1 << 0), + AST_MODFLAG_BUILDSUM = (1 << 1), }; struct ast_module_info { @@ -233,7 +234,7 @@ void ast_module_unref(struct ast_module *); AST_MODULE, \ desc, \ keystr, \ - flags_to_set, \ + flags_to_set | AST_MODFLAG_BUILDSUM, \ AST_BUILDOPT_SUM, \ }; \ static void __attribute__ ((constructor)) __reg_module(void) \ @@ -261,7 +262,7 @@ const static __attribute__((unused)) struct ast_module_info *ast_module_info; #define AST_MODULE_INFO(keystr, flags_to_set, desc, fields...) \ static struct ast_module_info __mod_info = { \ .name = AST_MODULE, \ - .flags = flags_to_set, \ + .flags = flags_to_set | AST_MODFLAG_BUILDSUM, \ .description = desc, \ .key = keystr, \ .buildopt_sum = AST_BUILDOPT_SUM, \ diff --git a/main/loader.c b/main/loader.c index aa17fcb31e..d920c0c074 100644 --- a/main/loader.c +++ b/main/loader.c @@ -616,8 +616,10 @@ static unsigned int inspect_module(const struct ast_module *mod) return 1; } - if (!ast_strlen_zero(mod->info->buildopt_sum) && - strcmp(buildopt_sum, mod->info->buildopt_sum)) { + if (!ast_test_flag(mod->info, AST_MODFLAG_BUILDSUM)) { + ast_log(LOG_WARNING, "Module '%s' was not compiled against a recent version of Asterisk and may cause instability.\n", mod->resource); + } else if (!ast_strlen_zero(mod->info->buildopt_sum) && + strcmp(buildopt_sum, mod->info->buildopt_sum)) { ast_log(LOG_WARNING, "Module '%s' was not compiled with the same compile-time options as this version of Asterisk.\n", mod->resource); ast_log(LOG_WARNING, "Module '%s' will not be initialized as it may cause instability.\n", mod->resource); return 1;