Module: xenomai-gch
Branch: for-forge
Commit: 7aed6ca79e60d7d8b3d12fbffbf48d859c58ebea
URL:    
http://git.xenomai.org/?p=xenomai-gch.git;a=commit;h=7aed6ca79e60d7d8b3d12fbffbf48d859c58ebea

Author: Gilles Chanteperdrix <gilles.chanteperd...@xenomai.org>
Date:   Wed Jan  8 13:28:16 2014 +0100

cobalt/ppd: clarify process finalization

---

 kernel/cobalt/shadow.c |   20 ++++++++++++--------
 1 file changed, 12 insertions(+), 8 deletions(-)

diff --git a/kernel/cobalt/shadow.c b/kernel/cobalt/shadow.c
index 3b6a920..cea76bc 100644
--- a/kernel/cobalt/shadow.c
+++ b/kernel/cobalt/shadow.c
@@ -161,15 +161,18 @@ static void *private_lookup(unsigned int muxid)
 
 static inline void process_remove(struct xnshadow_process *p)
 {
-       unsigned i;
+       unsigned muxid;
        spl_t s;
 
        xnlock_get_irqsave(&nklock, s);
-       for (i = ARRAY_SIZE(p->priv); i != 0; i--) {
+       for (muxid = 0; muxid < NR_PERSONALITIES; muxid++) {
                struct xnpersonality *personality;
-               unsigned muxid = i - 1;
-               void *priv = p->priv[muxid];
+               void *priv;
+
+               if (muxid == user_muxid)
+                       continue;
 
+               priv = p->priv[muxid];
                if (priv == NULL)
                        continue;
 
@@ -180,11 +183,12 @@ static inline void process_remove(struct xnshadow_process 
*p)
                if (personality->module)
                        module_put(personality->module);
                
-               if (muxid > 0) {
-                       xnlock_get_irqsave(&nklock, s);
-                       p->priv[muxid] = NULL;
-               }
+               xnlock_get_irqsave(&nklock, s);
+               p->priv[muxid] = NULL;
        }
+       xnlock_put_irqrestore(&nklock, s);
+
+       personalities[user_muxid]->ops.detach_process(p); /* Destroys p */
 }
 
 static void request_syscall_restart(struct xnthread *thread,


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

Reply via email to