Add pthread cleanup to listener (to cleanup mutex)
authorMathieu Desnoyers <mathieu.desnoyers@efficios.com>
Thu, 3 Mar 2011 23:21:52 +0000 (18:21 -0500)
committerMathieu Desnoyers <mathieu.desnoyers@efficios.com>
Thu, 3 Mar 2011 23:21:52 +0000 (18:21 -0500)
Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
libust/tracectl.c

index 3b60975391abf72c155f9822a1b06fe3db68004d..b058cb3ce19d0d317790ddbf03103164508d1eb4 100644 (file)
@@ -543,6 +543,11 @@ unlock_traces:
        return retval;
 }
 
+static void release_listener_mutex(void *ptr)
+{
+       pthread_mutex_unlock(&listener_thread_data_mutex);
+}
+
 static void listener_cleanup(void *ptr)
 {
        pthread_mutex_lock(&listen_sock_mutex);
@@ -1096,6 +1101,7 @@ void *listener_main(void *p)
 
                for (i = 0; i < nfds; i++) {
                        pthread_mutex_lock(&listener_thread_data_mutex);
+                       pthread_cleanup_push(release_listener_mutex, NULL);
                        epoll_sock = (struct ustcomm_sock *)events[i].data.ptr;
                        if (epoll_sock == listen_sock) {
                                addr_size = sizeof(struct sockaddr);
@@ -1124,7 +1130,7 @@ void *listener_main(void *p)
                                                           epoll_sock->fd);
                                }
                        }
-                       pthread_mutex_unlock(&listener_thread_data_mutex);
+                       pthread_cleanup_pop(1); /* release listener mutex */
                }
        }
 
This page took 0.024427 seconds and 4 git commands to generate.