Am Montag 21 Februar 2011, 21:33:53 schrieb varname:
> Philippe Gerum wrote:
> > On Mon, 2011-02-21 at 18:54 +0100, varname wrote:
> >> trying to write a simple producer / consumer using message pipes in
> >> the native API, this phrase from the documentation (found here [1])
> >> confuses me:
> >> 
> >> "-EPIPE is returned if the associated special device is not yet open."
> >> 
> >> It's not so much the sentence itself, but more the fact that I'm not
> >> getting that return value from rt_pipe_stream() when streaming bytes
> >> to a RT_PIPE that hasn't had its "special device" opened in secondary
> >> domain.
> >> 
> >> I've attached a modified trivial-periodic.c that demonstrates what I'm
> >> seeing. Afaik there is nothing open(2)-ing the /dev/rtp9 in the
> >> secondary domain. All writes succeed, up to about write 31 (*1024),
> >> after which all writes return 0.
> >> 
> >> [..]
> >> wrote: 1024, res: 1024
> >> wrote: 1024, res: 948
> >> wrote: 1024, res: 0
> >> wrote: 1024, res: 0
> >> [..]
> >> 
> >> Is the documentation incorrect, or am I misunderstanding something?
> > 
> > The doc is wrong (former implementation, 2.1.x series), the pipe
> > services do buffer real-time output until the special device is
> > eventually opened starting with Xenomai 2.2.x. Since you are using
> > rt_pipe_stream(), the output is directed to an internal buffer until
> > there is no more space there, which causes the final 0-byte returns.
> > 
> > So everything looks ok, except the doc.
> 
> ok, so there is actually no way to detect whether or not the special
> device has been opened? 

as a workaround you could use for example a named semaphore to do the 
synchronisation on pipe creation. (only if both task are xenomai tasks):

receiver:
  rt_pipe_create()
  rt_sem_create( NAME )
  rt_pipe_read()

sender:
  rt_sem_bind( NAME )
  rt_pipe_create()
  rt_pipe_send()

If rt_sem_bind() succeeds, the receiver should have created the pipe...

Stefan

> > As I understood from earlier mails on the list,
> writes to a full pipe buffer just fail, correct?
> 
> Is there any way to flush a message pipe from a userspace task (as
> opposed to a kernelspace one, where rt_pipe_flush is available)?
> 
> 
> thanks for the swift reply
> 
> 
> 
> 
> _______________________________________________
> Xenomai-help mailing list
> [email protected]
> https://mail.gna.org/listinfo/xenomai-help


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

Reply via email to