Problem with rtems_task_variable_delete

Fernando RUIZ CASAS correo at fernando-ruiz.com
Tue Dec 9 09:40:05 UTC 2003


On Tue, 09 Dec 2003 01:18:32 -0800 (PST), "Fernando RUIZ CASAS" wrote:

> 
> On Mon, 08 Dec 2003 22:58:15 +0100, Dieter Schaefer wrote:
> Hi,
> 
>   The same problem ago.
> 
>   A patch has be submitted longtime ago to resolve this concern.
> 
>   The problem is that a new implementation of core has been done.
> 
>   The problem is in 
>   /rtems/cpukit/rtems/src/taskvariabledelete.c
> 
>   at line 59
>    _Workspace_free(tvp) needs be changed by
>    
>    _Workspace_free(*tvp) perhaphs. (I can't test it,sorry)
> 
>   It's a problem resolved but with the new implementation the problem arrives again.
> 
>   A lot of mails have been interchanged with Joel to obtain a patch in the core.
>   
>   BRGDS. 
>   The author of rtems_telnetd.
> 

SORRY I'm wrong. SORRY again.

After browsing in the versions of sources the problem was fixed.


http://www.rtems.com/cgi-bin/cvsweb.cgi/rtems/cpukit/rtems/src/tasks.c.diff?r1=1.34&r2=1.35

In tasks.c the problem can be isolated again.

 while (tvp) {   
     next = tvp->next;      
     if  (tvp->dtor)     
         (*tvp->dtor)( tvp->ptr ); <<< HERE the change and the source of the problem.          
     if (executing == deleted)      
         *tvp->ptr = tvp->gval;          
     _Workspace_Free( tvp );      

Some printk let to show the dtor, the ptr, and more...
I can't test it. Sorry.

>    
> 
>   
> > 
> > Hello,
> > 
> > trying to get telnetd to work (powerpc, rtems-4.6.0pre5) I experienced 
> > the following problem ...
> > trying various commands everything seems to work Ok, until I try to 
> > logoff from the telnet session. The system crashes, mean end up 
> > in the BSP panic handler.
> > Digging into the problem, it seems to be related with deleting a task variable.
> > If the task variable contains a pointer to malloc'ed memory and 'free' is 
> > passed to rtems_task_variable_add it will crash on deleting the task. 
> > Background: telnetd uses shell, and shell creates a 'user environment' 
> > after issuing a 'logoff', shell tries to execute a 
> > rtems_task_delete( RTEMS_SELF );  
> > which in turn, at some point calls 
> > rtems_task_variable_delete(RTEMS_SELF, ... ); 
> > 
> > The same behavior can be reproduces with a slightly modified version 
> > of 'ticker test'  
> > Adding a task variable pointing to malloc'ed space, assign different values 
> > etc. and deleting this space manually after 'rtems_task_variable_delete' 
> > everything works Ok. Passing 'free' to automatically delete this space, it 
> > ends up in the BSP panic handler.
> > 
> 
> > Did anybody experienced the same/similar problem? Or, even better, 
> > has a fix or work-around? 
> > 
> > Any information or hint is appreciated.
> > 
> > Thanks
> > Dieter Schaefer
> > 
> > PS: FTP and Web-Server runs all day long even under heavy load and 
> > with continuous ping on FEC and SCCx. 
> 
> FTP calls chroot() and chroot() builds a nes user environment the same way that telnetd.
> but FTPD runs forever.



More information about the users mailing list