On Fri, 2006-12-08 at 20:05 +0100, Jan Kiszka wrote: > Philippe Gerum wrote: > > On Fri, 2006-12-08 at 19:02 +0100, Gilles Chanteperdrix wrote: > >> Jan Kiszka wrote: > >>> Gilles Chanteperdrix wrote: > >>>> Index: ksrc/nucleus/shadow.c > >>>> =================================================================== > >>>> --- ksrc/nucleus/shadow.c (révision 1930) > >>>> +++ ksrc/nucleus/shadow.c (copie de travail) > >>>> @@ -888,6 +888,9 @@ > >>>> > >>>> p = xnthread_archtcb(thread)->user_task; /* May be != current */ > >>>> > >>>> + if (!xnshadow_thrptd(p)) > >>>> + return; > >>>> + > >>>> magic = xnthread_get_magic(thread); > >>>> > >>>> for (muxid = 0; muxid < XENOMAI_MUX_NR; muxid++) { > >>>> @@ -1639,8 +1642,6 @@ > >>>> xnshadow_relax(0); > >>>> > >>>> xnlock_get_irqsave(&nklock, s); > >>>> - /* Prevent wakeup call from xnshadow_unmap(). */ > >>>> - xnshadow_thrptd(p) = NULL; > >>>> xnthread_archtcb(thread)->user_task = NULL; > >>>> /* xnpod_delete_thread() -> hook -> xnshadow_unmap(). */ > >>>> xnpod_delete_thread(thread); > >>> > >>> Can't comment on the correctness of the second hunk, but it > >>> unfortunately doesn't change the situation that test case does not > >>> longer terminate with the first hunk applied. May look like a trivial > >>> issue - but it isn't. :-> > >>> > >> Indeed. And xnshadow_thrptd(current) == NULL is used by xnpod_schedule, > >> so the patch is probably completely incorrect. > >> > > > > We should rather check the TCB backlink to the Linux task. Could someone > > who can reproduce this issue, test the following patch? TIA, > > > > --- ksrc/nucleus/shadow.c (revision 1931) > > +++ ksrc/nucleus/shadow.c (working copy) > > @@ -888,6 +888,10 @@ > > > > p = xnthread_archtcb(thread)->user_task; /* May be != current */ > > > > + xnltt_log_event(xeno_ev_shadowunmap, thread->name, p ? p->pid : -1); > > + if (!p) > > + goto renice_and_exit; > > + > > magic = xnthread_get_magic(thread); > > > > for (muxid = 0; muxid < XENOMAI_MUX_NR; muxid++) { > > @@ -907,10 +911,6 @@ > > } > > } > > > > - xnltt_log_event(xeno_ev_shadowunmap, thread->name, p ? p->pid : -1); > > - if (!p) > > - goto renice_and_exit; > > - > > xnshadow_thrptd(p) = NULL; > > > > if (p->state != TASK_RUNNING) { > > > > Doesn't work, usage counter is now incremented. BTW, this patch slipped
Ok, I will try to reproduce it here before fixing. > into SVN with the iobitmap fix. > Should be reverted now. -- Philippe. _______________________________________________ Xenomai-core mailing list Xenomai-core@gna.org https://mail.gna.org/listinfo/xenomai-core