I decided to answer my own question from yesterday about whether the handler
gets invoked when a user-task tries to read from the fifo (but blocks) or
when it succeeds, so I wrote a simple module that creates two fifos with one
common handler. When the handler is invoked with an event on fifo#2 it gets
data from there and writes it to fifo#1 where a task is blocked reading from
that fifo.
My original code was:
n = rtf_get( 2 , buffer , BUFSIZE - 1 );
if( n <= 0 )
{
printk( KERN_ERR "Invoked for fifo2 but no (%d) data
found\n" , n );
return( -EFAULT );
}
m = rtf_put( 1 , buffer , n );
if( m != n )
{
printk( KERN_ERR "Put-Error got %d!= %d (\"%s\")\n"
, m , n , buffer);
return( -EINVAL );
}
else
{
printk( KERN_INFO "Put \"%s\" to fifo#1\n" , buffer
);
}
But the return value from rtf_put() -- (m) -- is consistently zero. I can
obviously work around it with:
if( m != n && m != 0 )
but that doesn't seem right.
I'm using RH 5.2 with RTL 0.9J (The Zentropix distribution). There are
three obvious possibilities:
1. My copy of rtf_put() is broken,
or 2. There's a subtle bug in my code that I don't see.,
or 3. The documentation is wrong about the return value (although a
peek at the code says otherwise).
So, my question is, which one is it?
Thanks
Norm
--- [rtl] ---
To unsubscribe:
echo "unsubscribe rtl" | mail [EMAIL PROTECTED] OR
echo "unsubscribe rtl <Your_email>" | mail [EMAIL PROTECTED]
----
For more information on Real-Time Linux see:
http://www.rtlinux.org/~rtlinux/