Module: xenomai-forge
Branch: master
Commit: 83b187f61d730d7b1edb1e83199854d04a1bd219
URL:    
http://git.xenomai.org/?p=xenomai-forge.git;a=commit;h=83b187f61d730d7b1edb1e83199854d04a1bd219

Author: Philippe Gerum <r...@xenomai.org>
Date:   Fri Sep  6 19:15:14 2013 +0200

cobalt/posix/thread: fix potential race in exit handler

---

 kernel/cobalt/posix/thread.c |    5 ++++-
 1 files changed, 4 insertions(+), 1 deletions(-)

diff --git a/kernel/cobalt/posix/thread.c b/kernel/cobalt/posix/thread.c
index 83f94d0..68d15f1 100644
--- a/kernel/cobalt/posix/thread.c
+++ b/kernel/cobalt/posix/thread.c
@@ -213,6 +213,7 @@ EXPORT_SYMBOL_GPL(cobalt_thread_find_local);
 struct xnpersonality *cobalt_thread_exit(struct xnthread *curr)
 {
        struct cobalt_thread *thread;
+       spl_t s;
 
        thread = container_of(curr, struct cobalt_thread, threadbase);
        /*
@@ -220,11 +221,13 @@ struct xnpersonality *cobalt_thread_exit(struct xnthread 
*curr)
         * userland.
         */
        thread_unhash(&thread->hkey);
+       xnlock_get_irqsave(&nklock, s);
        cobalt_mark_deleted(thread);
+       list_del(&thread->link);
+       xnlock_put_irqrestore(&nklock, s);
        cobalt_signal_flush(thread);
        xnsynch_destroy(&thread->monitor_synch);
        xnsynch_destroy(&thread->sigwait);
-       list_del(&thread->link);
 
        /* We don't stack over any personality, no chaining. */
        return NULL;


_______________________________________________
Xenomai-git mailing list
Xenomai-git@xenomai.org
http://www.xenomai.org/mailman/listinfo/xenomai-git

Reply via email to