[email protected] wrote:
> 
> 
> 
> 
> -------- Original Message --------
> Subject: Re: :: rt_printf with daemonized task (20-Okt-2009 11:33)
> From:    Jan Kiszka <[email protected]>
> To:      [email protected]
> 
>> See http://thread.gmane.org/gmane.linux.real-time.xenomai.devel/6571 for
>> an example of a patch that may (but need not) be generated via git. What
>> counts is the format: proper title, a few lines of description, signed-off.
>>
>> HTH,
>> Jan
>>
> 
> ok, here is my next trial for a proper patch
> 

That format looks good.

Thanks,
Jan

> 
> Oliver
> 
> 
> ----------------------------------------------------------------------------------------------
> 
> Subject : Fork-save use of rt_print
> 
> Fork save initialisation of rt_print library, necessary child initialisation 
> are
> done via pthread_atfork() when child process is started.
> 
> Signed-off-by: Oliver Schlenker <oliver.schlenker <at> sm motion control.de>
> ---
> 
> --- rt_print.c.original       2008-09-10 10:36:27.000000000 +0200
> +++ rt_print.c.forkonly       2009-10-16 16:19:25.949289800 +0200
>                     
>       }
>  }
>  
> -void __rt_print_init(void)
> +static void spawn_printer_thread(void)
>  {
>       pthread_attr_t thattr;
> +
> +     pthread_attr_init(&thattr);
> +     pthread_attr_setstacksize(&thattr, PTHREAD_STACK_MIN);
> +     pthread_create(&__printer_thread, &thattr, printer_loop, NULL);
> +}
> +
> +static void forked_child_init(void)
> +{
> +     struct print_buffer *my_buffer = pthread_getspecific(__buffer_key);
> +     struct print_buffer **pbuffer = &__first_buffer;
> +
> +     /* re-init to avoid finding it locked by some parent thread */
> +     pthread_mutex_init(&__buffer_lock, NULL);
> +
> +     while (*pbuffer) {
> +             if (*pbuffer == my_buffer)
> +                     pbuffer = &(*pbuffer)->next;
> +             else
> +                     cleanup_buffer(*pbuffer);
> +     }
> +
> +     spawn_printer_thread();
> +}
> +
> +void __rt_print_init(void)
> +{
>       const char *value_str;
>       unsigned long long period;
>  
>                    
>       pthread_mutex_init(&__buffer_lock, NULL);
>       pthread_key_create(&__buffer_key, (void (*)(void*))cleanup_buffer);
>  
> -     pthread_attr_init(&thattr);
> -     pthread_attr_setstacksize(&thattr, PTHREAD_STACK_MIN);
> -     pthread_create(&__printer_thread, &thattr, printer_loop, NULL);
> +     spawn_printer_thread();
> +     pthread_atfork(NULL, NULL, forked_child_init);
>  } 
> 
> 
> 
> 
> To: [email protected]
> Cc: [email protected]
>     [email protected]


-- 
Siemens AG, Corporate Technology, CT SE 2
Corporate Competence Center Embedded Linux

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

Reply via email to