[PATCH 5/5] Don't unlock mutex in different threads

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



corosync_timer_init used to lock timer lock and unlock was made in
prioritized_timer_thread. Even this behavior works on Linux, NetBSD is
more strict. Mutex can be unlocked only by thread which locked it.

Solution is to use condition and synchronize start of timer thread and
main thread.

Signed-off-by: Jan Friesse <jfriesse@xxxxxxxxxx>
---
 exec/timer.c |   10 ++++++++++
 1 files changed, 10 insertions(+), 0 deletions(-)

diff --git a/exec/timer.c b/exec/timer.c
index 02ca51b..e894480 100644
--- a/exec/timer.c
+++ b/exec/timer.c
@@ -83,6 +83,8 @@
 
 static pthread_mutex_t timer_mutex = PTHREAD_MUTEX_INITIALIZER;
 
+static pthread_cond_t timer_mutex_cond = PTHREAD_COND_INITIALIZER;
+
 static pthread_t expiry_thread;
 
 static pthread_attr_t thread_attr;
@@ -116,6 +118,8 @@ static void *prioritized_timer_thread (void *data)
 	}
 #endif
 
+	pthread_mutex_lock (&timer_mutex);
+	pthread_cond_signal (&timer_mutex_cond);
 	pthread_mutex_unlock (&timer_mutex);
 	for (;;) {
 		timer_serialize_lock_fn ();
@@ -170,6 +174,12 @@ int corosync_timer_init (
 	res = pthread_create (&expiry_thread, &thread_attr,
 		prioritized_timer_thread, NULL);
 
+	/*
+	 * Wait for thread to really exec
+	 */
+	pthread_cond_wait (&timer_mutex_cond, &timer_mutex);
+	pthread_mutex_unlock (&timer_mutex);
+
 	return (res);
 }
 
-- 
1.7.7.2

_______________________________________________
discuss mailing list
discuss@xxxxxxxxxxxx
http://lists.corosync.org/mailman/listinfo/discuss


[Index of Archives]     [Linux Clusters]     [Corosync Project]     [Linux USB Devel]     [Linux Audio Users]     [Photo]     [Yosemite News]    [Yosemite Photos]    [Linux Kernel]     [Linux SCSI]     [X.Org]

  Powered by Linux