Module: xenomai-head Branch: master Commit: eb3db3c55b7e716623b3bec9fc8b6b9720b48ee1 URL: http://git.xenomai.org/?p=xenomai-head.git;a=commit;h=eb3db3c55b7e716623b3bec9fc8b6b9720b48ee1
Author: Gilles Chanteperdrix <gilles.chanteperd...@xenomai.org> Date: Wed Aug 24 19:44:39 2011 +0200 common: a better fix for rt_printf pool buffers and fork --- src/skins/common/rt_print.c | 13 ++++++++++--- 1 files changed, 10 insertions(+), 3 deletions(-) diff --git a/src/skins/common/rt_print.c b/src/skins/common/rt_print.c index d4cf0db..ec10a21 100644 --- a/src/skins/common/rt_print.c +++ b/src/skins/common/rt_print.c @@ -467,6 +467,10 @@ static void cleanup_buffer(struct print_buffer *buffer) j = j % BITS_PER_LONG; old_bitmap = xnarch_atomic_get(&pool_bitmap[i]); + + if ((old_bitmap & (1UL << j)) == 0) + return; + do { bitmap = old_bitmap; old_bitmap = xnarch_atomic_cmpxchg(&pool_bitmap[i], @@ -610,11 +614,14 @@ static void forked_child_init(void) pthread_mutex_init(&buffer_lock, NULL); while (*pbuffer) { - if (*pbuffer == my_buffer #ifdef CONFIG_XENO_FASTSYNCH - || (unsigned long)*pbuffer - pool_start < pool_len + if ((unsigned long)*pbuffer - pool_start < pool_len) { + cleanup_buffer(*pbuffer); + pbuffer = &(*pbuffer)->next; + continue; + } #endif /* CONFIG_XENO_FASTSYNCH */ - ) + if (*pbuffer == my_buffer) pbuffer = &(*pbuffer)->next; else cleanup_buffer(*pbuffer); _______________________________________________ Xenomai-git mailing list Xenomai-git@gna.org https://mail.gna.org/listinfo/xenomai-git