Ah of course :) I must of been not paying attention while reading the pthread_getspecific calls. Thanks for the clarification. Dan
On Mon, Nov 2, 2009 at 3:52 PM, Jan Kiszka <[email protected]> wrote: > Daniel Adams wrote: > > Hi, > > > > I was looking at using the rt_printf / rt_fprintf for doing deferred > logging > > and I have a few questions. > > > > 1) I was reading through the source and I noticed there is no locking of > the > > buffer write_pos between tasks during the initial snprint into the > buffer. > > Is the rt_printf service thread safe? There are calls to > > xnarch_read_memory_barrier() and xnarch_write_memory_barrier(), but I'm > > assuming they are for SMP and IO ordering although I'm not 100% on what > the > > barriers imply as I'm fairly new to this kind of hardware. > > rt_printf buffers are single-writer/single-reader (one per thread) > lock-less ring buffers, they are safe on both UP and SMP. > > > > > 2) Can the service be called from Linux tasks and Xenomai tasks? We were > > trying to get away with a common logging interface (wrapping the service) > > which would allow writing to different streams. If it can't be called > from a > > Linux process then we will have an issue if we try to write to the same > > stream from different write tasks. > > Yes, in fact the rr_printf/syslog services of rtdk even work without a > single bit of Xenomai, so they can be used in any context. > > > > > 3) Why is there multiple buffers allowing multiple FIFO's. I've read the > > code and can't really see how the extra buffers are used from a users > > perspective (I can see how the service prints / manages them). It appears > > that whatever buffer you create with rt_print_init or rt_auto_init is the > > buffer that get's used for writing too. Is there a way to select the > buffer > > you want to write to? Also a call to rt_print_init causes a pre-existing > > buffer to be written to io from within the callers context and then > creates > > a new buffer / ring buffer, so that no matter what you are always writing > to > > the head of the linked list of buffers. How do I get access to an old > buffer > > once it has been printed? Is there something I'm missing? > > See above, buffers are per thread so that we don't need locking. > > > > > I really think I must be missing something, sorry if these are obvious > > questions. > > > > Thanks > > > > Dan Adams > > > > HTH, > Jan > >
_______________________________________________ Xenomai-help mailing list [email protected] https://mail.gna.org/listinfo/xenomai-help
