On Wed, 2007-05-09 at 11:57 +0200, Markus Osterried wrote:
> Hello Gerum,
> 
> actually, when the task's user function (the function which is given in
> t_start()) is entered, the arguments have been copied to the new context
> and are passed by value.
> This is true for real pSOS and also for Xenomai.
> But in Xenomai it's the trampoline which acts as a wrapper/prolog and is
> created and ready to run in a concurrent context, while still holding a
> reference to the arguments in the creator's context.
> Real pSOS is a blackbox, so I don't no whether there is a moment in time,
> where a new concurrent context is running while still holding a pointer to
> old context.

To explain how the pSOS skin currently works:

starter task:
        == syscall == t_start(targs[] by reference)
                kernel/skin: receives the genuine "targ" _pointer_, and copies 
it
unmodified to the new task's trampoline code in user-space + wakes up
the new task so that it really starts execution (i.e. it was locked into
the trampoline code).

new task (in trampoline code):
                ==syscall== wait on the start barrier
                        kernel/skin: makes caller wait until t_start is issued
                receives "targs" pointer verbatim, copied back by the last 
syscall,
and dereferences it to pass the 4 long words from the targs array to the
callback entry routine of the new task.

So, the issue that could happen, is the caller of the t_start() function
in user-space returning to its own caller, with "targs" being laid into
the stack space being unwound. _That_ would be a rainy day. The only
issue otherwise, is the caller of t_start() modifying the arguments
before or while the resumed task accesses them, but that would be more
of a reasonable side-effect of passing arguments by reference, that a
bug per se. Except of course, if pSOS does differently, and always
copies the argument array in the t_start() syscall.

> But it's the fact, we have sometimes seen problems with Xenomai, when our
> pSOS application changes the arguments value after t_start().
> We have never seen this in pSOS.
> It's worth to mention, I haven't seen this problem with the newest Xenomai
> branch (there was some changes in scheduling?).
> But I'm not sure the problem is 100% solved, because with older Xenomai we
> have sometimes seen the problem and sometimes not. :-(

Please be specific; which are the "older Xenomai" and "newest Xenomai
branch"? i.e. which stable version number or SVN commit number for the
trunk/?

This said, I definitely fixed a scheduling issue due to
primary/secondary mode switches involved in creating new user-space
tasks which has been committed in v2.3.1 (i.e. a major rework of the
so-called "RPI management", after Thomas sent me a test case to
illustrate the issue). This bug, for sure, could have impacted your
application in the situation I described earlier, regarding t_start
arguments laid into the stack space. But I have not enough details to be
100% this was related to your problem though.

> 
> 
> Markus
> 
> 
> 
> 
> 
>                                                                               
>                                                                  
>                               Philippe Gerum                                  
>                                                                  
>                               <[EMAIL PROTECTED]         An:      Markus 
> Osterried <[EMAIL PROTECTED]>                                 
>                               g>                      Kopie:   
> xenomai-core@gna.org                                                          
>   
>                               Gesendet von:           Blindkopie:             
>                                                                  
>                               xenomai-core-bo         Thema:   Re: 
> [Xenomai-core] Antwort: Re:  Arguments in psos t_start()                    
>                               [EMAIL PROTECTED]                               
>                                                                      
>                                                                               
>                                                                  
>                                                                               
>                                                                  
>                               09.05.2007                                      
>                                                                  
>                               09:55                                           
>                                                                  
>                               Bitte antworten                                 
>                                                                  
>                               an rpm                                          
>                                                                  
>                                                                               
>                                                                  
>                                                                               
>                                                                  
> 
> 
> 
> 
> On Wed, 2007-05-09 at 09:07 +0200, Markus Osterried wrote:
> > Hello Gerum,
> >
> > sorry for not knowing the details. But there is another question.
> > Is it okay to move the pointer to the arguments to the newly created
> task?
> > Isn't it possible that the task which created the new task is
> rescheduled?
> > The old task could change the value of the argument and because the new
> > task only holds a reference to this argument, the new task is also
> > affected.
> >
> 
> Yes, such side-effect would be possible, not necessarily for the
> creator, but for the thread calling t_start() though. The worst case
> would happen when calling t_start() with args laid into the caller's
> stack space, and the caller unwinding the current frame immediately
> since it has a higher priority than the started thread.
> 
> This boils down to one question: does actually pSOS pass the argument
> array by reference, or by value? In the latter case, the current
> implementation would be wrong, otherwise, the side-effect would be
> admitted.
> 
> --
> Philippe.
> 
> 
> 
> _______________________________________________
> Xenomai-core mailing list
> Xenomai-core@gna.org
> https://mail.gna.org/listinfo/xenomai-core
> 
> 
> 
> 
> 
> 
-- 
Philippe.



_______________________________________________
Xenomai-core mailing list
Xenomai-core@gna.org
https://mail.gna.org/listinfo/xenomai-core

Reply via email to