Module: kamailio Branch: master Commit: 914b154a9096f2c17a4aa362f54358e10c2cce76 URL: https://github.com/kamailio/kamailio/commit/914b154a9096f2c17a4aa362f54358e10c2cce76
Author: Daniel-Constantin Mierla <mico...@gmail.com> Committer: Daniel-Constantin Mierla <mico...@gmail.com> Date: 2025-02-18T15:49:51+01:00 core: added option 'o' for loadmodule - do not error and exit when a module is already loaded - GH #4126 --- Modified: src/core/sr_module.c --- Diff: https://github.com/kamailio/kamailio/commit/914b154a9096f2c17a4aa362f54358e10c2cce76.diff Patch: https://github.com/kamailio/kamailio/commit/914b154a9096f2c17a4aa362f54358e10c2cce76.patch --- diff --git a/src/core/sr_module.c b/src/core/sr_module.c index f19a2d3812b..a2e28acf030 100644 --- a/src/core/sr_module.c +++ b/src/core/sr_module.c @@ -567,6 +567,7 @@ int ksr_load_module(char *mod_path, char *opts) module_exports_t *exp; struct sr_module *t; int dlflags; + int ldopt; int new_dlflags; int retries; char *path = NULL; @@ -592,11 +593,14 @@ int ksr_load_module(char *mod_path, char *opts) retries = 2; dlflags = RTLD_NOW; + ldopt = 0; if(opts != NULL) { for(p = opts; *p != '\0'; p++) { if(*p == 'G' || *p == 'g') { dlflags |= RTLD_GLOBAL; + } else if(*p == 'O' || *p == 'o') { + ldopt = 1; } else { LM_INFO("unknown option: %c\n", *p); } @@ -612,6 +616,13 @@ int ksr_load_module(char *mod_path, char *opts) for(t = modules; t; t = t->next) { if(t->handle == handle) { + if(ldopt == 1) { + if(path && path != mod_path) { + pkg_free(path); + } + LM_DBG("skip loading optional module twice (%s)\n", path); + return 0; + } LM_WARN("attempting to load the same module twice (%s)\n", path); goto skip; } _______________________________________________ Kamailio - Development Mailing List -- sr-dev@lists.kamailio.org To unsubscribe send an email to sr-dev-le...@lists.kamailio.org Important: keep the mailing list in the recipients, do not reply only to the sender!