Module: xenomai-head Branch: master Commit: 24da98eb511ff412e2eec347fb2f45c21e6214a8 URL: http://git.xenomai.org/?p=xenomai-head.git;a=commit;h=24da98eb511ff412e2eec347fb2f45c21e6214a8
Author: Gilles Chanteperdrix <gilles.chanteperd...@xenomai.org> Date: Tue Jun 28 22:22:50 2011 +0200 posix: only use rt_printf when in primary mode --- include/rtdk.h | 1 + src/skins/common/rt_print.c | 10 ++++++++++ src/skins/posix/printf.c | 18 ++++++++++++++++-- 3 files changed, 27 insertions(+), 2 deletions(-) diff --git a/include/rtdk.h b/include/rtdk.h index b5c0be9..905d35a 100644 --- a/include/rtdk.h +++ b/include/rtdk.h @@ -59,6 +59,7 @@ int rt_print_init(size_t buffer_size, const char *name); void rt_print_cleanup(void); void rt_print_auto_init(int enable); const char *rt_print_buffer_name(void); +void rt_print_flush_buffers(void); void assert_nrt(void); diff --git a/src/skins/common/rt_print.c b/src/skins/common/rt_print.c index 42d85d3..356347c 100644 --- a/src/skins/common/rt_print.c +++ b/src/skins/common/rt_print.c @@ -395,6 +395,16 @@ const char *rt_print_buffer_name(void) } /* *** Deferred Output Management *** */ +void rt_print_flush_buffers(void) +{ + assert_nrt(); + + pthread_mutex_lock(&buffer_lock); + + print_buffers(); + + pthread_mutex_unlock(&buffer_lock); +} static void cleanup_buffer(struct print_buffer *buffer) { diff --git a/src/skins/posix/printf.c b/src/skins/posix/printf.c index e778bc7..5343808 100644 --- a/src/skins/posix/printf.c +++ b/src/skins/posix/printf.c @@ -1,10 +1,18 @@ #include <stdio.h> #include <syslog.h> #include <rtdk.h> +#include <asm-generic/bits/current.h> int __wrap_vfprintf(FILE *stream, const char *fmt, va_list args) { - return rt_vfprintf(stream, fmt, args); + if (unlikely(xeno_get_current() != XN_NO_HANDLE && + !(xeno_get_current_mode() & XNRELAX))) + + return rt_vfprintf(stream, fmt, args); + else { + rt_print_flush_buffers(); + return vfprintf(stream, fmt, args); + } } int __wrap_vprintf(const char *fmt, va_list args) @@ -38,7 +46,13 @@ int __wrap_printf(const char *fmt, ...) void __wrap_vsyslog(int priority, const char *fmt, va_list ap) { - return rt_vsyslog(priority, fmt, ap); + if (unlikely(xeno_get_current() != XN_NO_HANDLE && + !(xeno_get_current_mode() & XNRELAX))) + return rt_vsyslog(priority, fmt, ap); + else { + rt_print_flush_buffers(); + vsyslog(priority, fmt, ap); + } } void __wrap_syslog(int priority, const char *fmt, ...) _______________________________________________ Xenomai-git mailing list Xenomai-git@gna.org https://mail.gna.org/listinfo/xenomai-git