Module: kamailio Branch: master Commit: 761eb0616fea2a859a2c0abb652b22feb6f59859 URL: https://github.com/kamailio/kamailio/commit/761eb0616fea2a859a2c0abb652b22fe...
Author: Daniel-Constantin Mierla miconda@gmail.com Committer: Daniel-Constantin Mierla miconda@gmail.com Date: 2020-09-09T17:57:10+02:00
kex: use mutex to sync the mod mem stats rpc commands
- related to GH #2433
---
Modified: src/modules/kex/mod_stats.c
---
Diff: https://github.com/kamailio/kamailio/commit/761eb0616fea2a859a2c0abb652b22fe... Patch: https://github.com/kamailio/kamailio/commit/761eb0616fea2a859a2c0abb652b22fe...
---
diff --git a/src/modules/kex/mod_stats.c b/src/modules/kex/mod_stats.c index a19a3ed3c3..25e3285c78 100644 --- a/src/modules/kex/mod_stats.c +++ b/src/modules/kex/mod_stats.c @@ -35,7 +35,9 @@ #include "../../core/pt.h" #include "../../core/sr_module.h" #include "../../core/events.h" -#include "../../core/mem/f_malloc.h" +#include "../../core/mem/pkg.h" +#include "../../core/mem/shm.h" +#include "../../core/locking.h" #include "../../core/rpc.h" #include "../../core/rpc_lookup.h"
@@ -47,6 +49,9 @@ #define DBG_MOD_ALL_FLAG 3 /* 1|2 - print pkg+shm (1+2) memory stats */ #define DBG_MOD_INF_FLAG 4 /* 1<<2 - print more info in the stats */
+ +static gen_lock_t *kex_rpc_mod_mem_stats_lock = NULL; + /** * */ @@ -248,7 +253,9 @@ static void rpc_mod_mem_stats_mode(rpc_t *rpc, void *ctx, int fmode) */ static void rpc_mod_mem_stats(rpc_t *rpc, void *ctx) { - rpc_mod_mem_stats_mode(rpc, ctx, 0); + lock_get(kex_rpc_mod_mem_stats_lock); + rpc_mod_mem_stats_mode(rpc, ctx, 0); + lock_release(kex_rpc_mod_mem_stats_lock); }
/** @@ -256,7 +263,9 @@ static void rpc_mod_mem_stats(rpc_t *rpc, void *ctx) */ static void rpc_mod_mem_statsx(rpc_t *rpc, void *ctx) { - rpc_mod_mem_stats_mode(rpc, ctx, DBG_MOD_INF_FLAG); + lock_get(kex_rpc_mod_mem_stats_lock); + rpc_mod_mem_stats_mode(rpc, ctx, DBG_MOD_INF_FLAG); + lock_release(kex_rpc_mod_mem_stats_lock); }
@@ -275,6 +284,15 @@ rpc_export_t kex_mod_rpc[] = { */ int mod_stats_init_rpc(void) { + kex_rpc_mod_mem_stats_lock = lock_alloc(); + if(kex_rpc_mod_mem_stats_lock == NULL) { + LM_ERR("failed to allocate the lock\n"); + return -1; + } + if(lock_init(kex_rpc_mod_mem_stats_lock) == NULL) { + LM_ERR("failed to init the lock\n"); + return -1; + } if (rpc_register_array(kex_mod_rpc)!=0) { LM_ERR("failed to register RPC commands\n");