The misctest function(s) purpose is to test if internal locks are safe to use across many threads, added them to be able to test easier on different CPUs . Not sure if that's what you look for, you can add more if you need something else.
Cheers, Daniel
On 17.07.25 09:46, Henning Westerholt wrote:
Thanks for adding this. I was thinking of adding a timer-based approach for concurrent locking stress (similar as the memory tests), but this is probably more suitable. We will test it as well today.
Cheers,
Henning
-----Original Message----- From: Daniel-Constantin Mierla via sr-dev sr-dev@lists.kamailio.org Sent: Donnerstag, 17. Juli 2025 09:26 To: sr-dev@lists.kamailio.org Cc: Daniel-Constantin Mierla miconda@gmail.com Subject: [sr-dev] git:master:4e474036: misctest: modparam and function to test internal locks with pthreads
Module: kamailio Branch: master Commit: 4e474036be1d862e63536ad94cc284c52e04a8a6 URL: https://github.com/kamailio/kamailio/commit/4e474036be1d862e63536ad 94cc284c52e04a8a6
Author: Daniel-Constantin Mierla miconda@gmail.com Committer: Daniel-Constantin Mierla miconda@gmail.com Date: 2025-07-17T08:48:54+02:00
misctest: modparam and function to test internal locks with pthreads
Modified: src/modules/misctest/misctest_mod.c
Diff: https://github.com/kamailio/kamailio/commit/4e474036be1d862e63536ad 94cc284c52e04a8a6.diff Patch: https://github.com/kamailio/kamailio/commit/4e474036be1d862e63536ad 94cc284c52e04a8a6.patch
diff --git a/src/modules/misctest/misctest_mod.c b/src/modules/misctest/misctest_mod.c index 50863ea1554..519d68ab81a 100644 --- a/src/modules/misctest/misctest_mod.c +++ b/src/modules/misctest/misctest_mod.c @@ -59,6 +59,7 @@ static int mt_mem_alloc_f(struct sip_msg *, char *, char *); static int mt_mem_free_f(struct sip_msg *, char *, char *); static int mt_tcp_thread_exec_f(sip_msg_t *, char *, char *); static int mt_lock_test_f(struct sip_msg *, char *, char *); +static int mt_lock_threads_f(sip_msg_t *, char *, char *); static int mod_init(void); static void mod_destroy(void);
@@ -71,12 +72,17 @@ static int misctest_message = 0; static str misctest_message_data = STR_NULL; static str misctest_message_file = STR_NULL;
+static int misctest_lock_threads_mode = 0; gen_lock_t +*_misctest_lock_threads = NULL;
/* clang-format off */ static cmd_export_t cmds[]={ {"mt_mem_alloc", mt_mem_alloc_f, 1, fixup_var_int_1, 0, ANY_ROUTE}, {"mt_mem_free", mt_mem_free_f, 1, fixup_var_int_1, 0, ANY_ROUTE}, {"mt_tcp_thread_exec", mt_tcp_thread_exec_f, 1, fixup_spve_null, 0, ANY_ROUTE}, {"mt_lock_test", mt_lock_test_f, 1, fixup_var_int_1, 0, ANY_ROUTE},
- {"mt_lock_threads", mt_lock_threads_f, 1, fixup_igp_null,
{0, 0, 0, 0, 0}fixup_free_igp_null, ANY_ROUTE},
}; /* clang-format on */ @@ -125,6 +131,7 @@ static param_export_t params[]={ {"message_data", PARAM_STR, &misctest_message_data}, {"message_file", PARAM_STR, &misctest_message_file}, {"mem_check_content", PARAM_INT, &default_mt_cfg.mem_check_content},
- {"lock_threads_mode", PARAM_INT, &misctest_lock_threads_mode}, {0,0,0}
}; /* clang-format on */ @@ -285,6 +292,15 @@ static int mod_init(void) return -1; }
- if(misctest_lock_threads_mode != 0) {
_misctest_lock_threads = lock_alloc();
if(_misctest_lock_threads == NULL) {
LM_ERR("failed to alloc lock\n");
goto error;
}
lock_init(_misctest_lock_threads);
- }
- return 0;
error: return -1; @@ -1021,6 +1037,48 @@ static int mt_lock_test_f(struct sip_msg *msg, char *sz, char *foo) return lock_test(size) >= 0 ? 1 : -1; }
+static void *mt_lock_threads_exec(void *param) {
- int pidx = 0;
- pidx = (int)(long)param;
- while(1) {
LM_INFO("==== before acquiring the lock (idx: %d)\n", pidx);
lock_get(_misctest_lock_threads);
LM_INFO("==== after acquiring the lock (idx: %d)\n", pidx);
- }
- return NULL;
+}
+static int mt_lock_threads_f(sip_msg_t *msg, char *pn, char *p2) {
- int i;
- int n;
- pthread_t tid;
- if(fixup_get_ivalue(msg, (gparam_t *)pn, &n) < 0) {
LM_ERR("invalid parameter\n");
return -1;
- }
- if(_misctest_lock_threads == NULL) {
LM_ERR("the lock is not initialized\n");
goto error;
- }
- for(i = 0; i < n; i++) {
if(pthread_create(&tid, NULL, mt_lock_threads_exec, (void
*)(long)i)) {
LM_ERR("failed to start all worker threads\n");
goto error;
}
- }
- return 1;
+error:
- return -1;
+}
/* RPC exports: */
Kamailio - Development Mailing List -- sr-dev@lists.kamailio.org To unsubscribe send an email to sr-dev-leave@lists.kamailio.org Important: keep the mailing list in the recipients, do not reply only to the sender!