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 <mico...@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 <mico...@gmail.com> >> Committer: Daniel-Constantin Mierla <mico...@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, >> + fixup_free_igp_null, ANY_ROUTE}, >> {0, 0, 0, 0, 0} >> }; >> /* 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-le...@lists.kamailio.org >> Important: keep the mailing list in the recipients, do not reply only to the >> sender! -- Daniel-Constantin Mierla (@ asipto.com) twitter.com/miconda -- linkedin.com/in/miconda Kamailio Consultancy, Training and Development Services -- asipto.com
_______________________________________________ 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!