Fix: threads should be created in DETACHED state
authorMichael Greene <michael.greene@gmail.com>
Thu, 16 Aug 2012 20:42:02 +0000 (16:42 -0400)
committerMathieu Desnoyers <mathieu.desnoyers@efficios.com>
Thu, 16 Aug 2012 20:42:02 +0000 (16:42 -0400)
Signed-off-by: Michael Greene <michael.greene@gmail.com>
Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
liblttng-ust/lttng-ust-comm.c

index cca5dcf83716d9ce0e854305185689290b3e72aa..842876fb743c857cf519ff5161d8d333d639bd16 100644 (file)
@@ -928,6 +928,7 @@ void __attribute__((constructor)) lttng_ust_init(void)
 {
        struct timespec constructor_timeout;
        sigset_t sig_all_blocked, orig_parent_mask;
+       pthread_attr_t thread_attr;
        int timeout_mode;
        int ret;
 
@@ -977,13 +978,22 @@ void __attribute__((constructor)) lttng_ust_init(void)
                ERR("pthread_sigmask: %s", strerror(ret));
        }
 
-       ret = pthread_create(&global_apps.ust_listener, NULL,
+       ret = pthread_attr_init(&thread_attr);
+       if (ret) {
+               ERR("pthread_attr_init: %s", strerror(ret));
+       }
+       ret = pthread_attr_setdetachstate(&thread_attr, PTHREAD_CREATE_DETACHED);
+       if (ret) {
+               ERR("pthread_attr_setdetachstate: %s", strerror(ret));
+       }
+
+       ret = pthread_create(&global_apps.ust_listener, &thread_attr,
                        ust_listener_thread, &global_apps);
        if (ret) {
                ERR("pthread_create global: %s", strerror(ret));
        }
        if (local_apps.allowed) {
-               ret = pthread_create(&local_apps.ust_listener, NULL,
+               ret = pthread_create(&local_apps.ust_listener, &thread_attr,
                                ust_listener_thread, &local_apps);
                if (ret) {
                        ERR("pthread_create local: %s", strerror(ret));
@@ -991,6 +1001,10 @@ void __attribute__((constructor)) lttng_ust_init(void)
        } else {
                handle_register_done(&local_apps);
        }
+       ret = pthread_attr_destroy(&thread_attr);
+       if (ret) {
+               ERR("pthread_attr_destroy: %s", strerror(ret));
+       }
 
        /* Restore original signal mask in parent */
        ret = pthread_sigmask(SIG_SETMASK, &orig_parent_mask, NULL);
This page took 0.028098 seconds and 4 git commands to generate.