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