-------- Original Message --------
Subject: Re: Re : rt_printf with daemonized task (08-Okt-2009 12:16)
From:    Jan Kiszka <[email protected]>
To:      [email protected]

> Gilles Chanteperdrix wrote:
> > Jan Kiszka wrote:
> >> Gilles Chanteperdrix wrote:
> >>> [email protected] wrote:
> >>>>>> int main( int arc, char *argv[] ) { int i;
> >>>>>>
> >>>>>> rt_print_auto_init(1);
> >>>>>>
> >>>>>> rt_printf("--------------- TEST RT-PRINTF  1 ------------\n");
> >>>>>>
> >>>>>> sleep(1);
> >>>>>>
> >>>>>> daemon(0,0);
> >>>>>>
> >>>>>> rt_print_auto_init(1);
> >>>> Ok, understood, at least for the scenario where the rt_print feature
> >>>> is initialised befor the fork/daemon call. What I don't understand
> >>>> is, why it does not work if the rt_print feature is initialised after
> >>>> the fork / daemon.
> >>> From the way I understand your code, you never tried to initialize the
> >>> rt_print feature only after the fork, your code initializes it both
> >>> before and after.
> >>>
> >> There are two initializations: The base init done via __rt_print_init on
> >> library loading and the one to be done per-thread via rt_print_init (or
> >> on first rt_printf). That printer thread is initialized via the former
> >> one. On fork, we do not need to re-run the full __rt_print_init
> >> (variables and resources are cloned on fork), we just need to spawn
> >> another printer thread.
> > 
> > Unless I am wrong, rtdk also maintains a list of the thread buffers
> > which need to be polled. After the fork, this list will be intact, but
> > the threads to which belong the buffers will no longer exist. So, IMO,
> > the fork handler should also free all these buffers and reset the list
> > to the empty state.
> 
> Famous last words: That should work without tweaking. A print_buffer
> only contains data references, nothing that points to some uncloned thread.
> 
> Jan
> 
> -- 
> Siemens AG, Corporate Technology, CT SE 2
> Corporate Competence Center Embedded Linux

To have a fork save rtprint library it's necessary to

1. Reset rtdk thread buffer list
   
    I have no idea where to look at for the rtdk thread buffer list. Inside 
rt_print.c ?
   
2. Spawning another printer thread
    with code like :
        pthread_attr_init(&thattr);
        pthread_attr_setstacksize(&thattr, PTHREAD_STACK_MIN);
        pthread_create(&__printer_thread, &thattr, printer_loop, NULL); 


Is there anything else to do ?


I'm also planning to add a function to the lib like :

rt_print_to_syslog( int priority )
If priority is zero, all messages are going to fprintf() output.
If priority is non-zero, all messages are going to syslog( priority, <message> 
) output.

Is it ok to add therefor a new variable to struct print_buffer ?


If everything is coming to work, I would like to send it as a patch.



Oliver








To: [email protected]
    [email protected]
Cc: [email protected]
_______________________________________________
Xenomai-help mailing list
[email protected]
https://mail.gna.org/listinfo/xenomai-help

Reply via email to