Module: kamailio
Branch: master
Commit: e7f040f219b46592081a6053b4ed1ae0d0552b1a
URL: 
https://github.com/kamailio/kamailio/commit/e7f040f219b46592081a6053b4ed1ae0d0552b1a

Author: S-P Chan <shihping.c...@gmail.com>
Committer: S-P Chan <shihping.c...@gmail.com>
Date: 2024-03-04T22:00:38+08:00

core/rthreads.h: add new option tls_threads_mode = 2

- add global handling of thread-locals with
  tls_threads_mode = 2
- this will run a pthread_atfork handler to reset
  all thread-locals to 0x0
- alternative solution to running functions
  in thread executors
- requires tls.so to be loaded to be effective

---

Modified: src/core/rthreads.h

---

Diff:  
https://github.com/kamailio/kamailio/commit/e7f040f219b46592081a6053b4ed1ae0d0552b1a.diff
Patch: 
https://github.com/kamailio/kamailio/commit/e7f040f219b46592081a6053b4ed1ae0d0552b1a.patch

---

diff --git a/src/core/rthreads.h b/src/core/rthreads.h
index 1a04f9982c7..56d68cef276 100644
--- a/src/core/rthreads.h
+++ b/src/core/rthreads.h
@@ -40,7 +40,7 @@ static void *run_threadP(_thread_proto fn, void *arg)
        pthread_t tid;
        void *ret = NULL;
 
-       if(likely(ksr_tls_threads_mode == 0
+       if(likely(ksr_tls_threads_mode == 0 || ksr_tls_threads_mode == 2
                           || (ksr_tls_threads_mode == 1 && process_no > 0))) {
                return fn(arg);
        }
@@ -77,7 +77,7 @@ static void *run_threadPI(_thread_protoPI fn, void *arg1, int 
arg2)
        pthread_t tid;
        void *ret = NULL;
 
-       if(likely(ksr_tls_threads_mode == 0
+       if(likely(ksr_tls_threads_mode == 0 || ksr_tls_threads_mode == 2
                           || (ksr_tls_threads_mode == 1 && process_no > 0))) {
                return fn(arg1, arg2);
        }
@@ -113,7 +113,7 @@ static void run_threadV(_thread_protoV fn)
 #ifdef USE_TLS
        pthread_t tid;
 
-       if(likely(ksr_tls_threads_mode == 0
+       if(likely(ksr_tls_threads_mode == 0 || ksr_tls_threads_mode == 2
                           || (ksr_tls_threads_mode == 1 && process_no > 0))) {
                fn();
                return;
@@ -152,7 +152,7 @@ static int run_thread4PP(_thread_proto4PP fn, void *arg1, 
void *arg2)
        pthread_t tid;
        int ret = 0;
 
-       if(likely(ksr_tls_threads_mode == 0
+       if(likely(ksr_tls_threads_mode == 0 || ksr_tls_threads_mode == 2
                           || (ksr_tls_threads_mode == 1 && process_no > 0))) {
                return fn(arg1, arg2);
        }
@@ -188,7 +188,7 @@ static void run_thread0P(_thread_proto0P fn, void *arg1)
 #ifdef USE_TLS
        pthread_t tid;
 
-       if(likely(ksr_tls_threads_mode == 0
+       if(likely(ksr_tls_threads_mode == 0 || ksr_tls_threads_mode == 2
                           || (ksr_tls_threads_mode == 1 && process_no > 0))) {
                fn(arg1);
                return;
@@ -240,7 +240,7 @@ static int run_thread4P5I2P2(_thread_proto4P5I2P2 fn, void 
*arg1, void *arg2,
        pthread_t tid;
        int ret = 0;
 
-       if(likely(ksr_tls_threads_mode == 0
+       if(likely(ksr_tls_threads_mode == 0 || ksr_tls_threads_mode == 2
                           || (ksr_tls_threads_mode == 1 && process_no > 0))) {
                return fn(arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9);
        }
@@ -278,7 +278,7 @@ static int run_thread4L(_thread_proto4L fn, long arg1)
        pthread_t tid;
        int ret = 0;
 
-       if(likely(ksr_tls_threads_mode == 0
+       if(likely(ksr_tls_threads_mode == 0 || ksr_tls_threads_mode == 2
                           || (ksr_tls_threads_mode == 1 && process_no > 0))) {
                return fn(arg1);
        }

_______________________________________________
Kamailio (SER) - Development Mailing List
To unsubscribe send an email to sr-dev-le...@lists.kamailio.org

Reply via email to