Module: xenomai-forge Branch: next Commit: ecc05c4aa9d7da2e124f19f5a08bf112927d459c URL: http://git.xenomai.org/?p=xenomai-forge.git;a=commit;h=ecc05c4aa9d7da2e124f19f5a08bf112927d459c
Author: Philippe Gerum <r...@xenomai.org> Date: Tue Jul 29 09:18:20 2014 +0200 copperplate/threadobj: protect lock in barrier wait --- lib/copperplate/threadobj.c | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/lib/copperplate/threadobj.c b/lib/copperplate/threadobj.c index 05bb6cb..48aa032 100644 --- a/lib/copperplate/threadobj.c +++ b/lib/copperplate/threadobj.c @@ -1045,9 +1045,11 @@ static int wait_on_barrier(struct threadobj *thobj, int mask) if (status & mask) break; oldstate = thobj->cancel_state; + push_cleanup_lock(&thobj->lock); __threadobj_tag_unlocked(thobj); __RT(pthread_cond_wait(&thobj->barrier, &thobj->lock)); __threadobj_tag_locked(thobj); + pop_cleanup_lock(&thobj->lock); thobj->cancel_state = oldstate; } @@ -1243,9 +1245,11 @@ static void cancel_sync(struct threadobj *thobj) /* thobj->lock held */ */ while (thobj->status & __THREAD_S_WARMUP) { oldstate = thobj->cancel_state; + push_cleanup_lock(&thobj->lock); __threadobj_tag_unlocked(thobj); __RT(pthread_cond_wait(&thobj->barrier, &thobj->lock)); __threadobj_tag_locked(thobj); + pop_cleanup_lock(&thobj->lock); thobj->cancel_state = oldstate; } _______________________________________________ Xenomai-git mailing list Xenomai-git@xenomai.org http://www.xenomai.org/mailman/listinfo/xenomai-git