Does the mq_timedreceive() fully implement the POSIX specification?

Bernd Petrovitsch bernd at petrovitsch.priv.at
Tue Feb 14 07:27:40 EST 2012


Hi!

[ also Cc: the email address on the top on the test case. Therefore
self-quoting for the rest of the thread. ]

On Mon, 2012-02-13 at 09:51 +0100, Bernd Petrovitsch wrote:
> On Mon, 2012-02-13 at 10:30 +0800, K K wrote:
> [....]
> > I am doing POSIX test on linux. And for mq_timedreceive() in POSIX spec
> > 2008 Issue 7, Line 43787:
> > 
> >   The validity of the abstime parameter need not be checked if a
> >   message can be removed from the message queue immediately.
> > 
> > But when I run test case mq_timedreceive/10-2 of POSIX suite (can be viewed
> > at :
> > http://ltp.git.sourceforge.net/git/gitweb.cgi?p=ltp/ltp.git;a=blob;f=testcases/open_posix_testsuite/conformance/interfaces/mq_timedreceive/10-2.c;h=49ee4f243fc5046a965a551650d8697217faac35;hb=HEAD),
> > mq_timedreceive() could get the message without wait, but the timeout is
> > still validated.
> > 
> > Do we intend to do so, or the implementation needs update?
> 
> I'm not a native English speaker but there is IMHO no problem as the
> above quoted part of POSIX simply does not require the check in that
> case. But it doesn't forbid the check.

On Die, 2012-02-14 at 14:44 +0800, K K wrote:
[...]
> Under no circumstance shall the operation fail with a timeout if a message
> can be removed from
> the message queue immediately. The validity of the abstime parameter need
> not be checked if a
> message can be removed from the message queue immediately.
> 
> It seems that the first sentence is more affirmative that the timeout
> should not be checked when a message can be removed from message queue
> immediately.
> How do you think?

Well, and the sys-call actually does not fail with a *timeout* - which
is indicated with a return value == -1 and errno == ETIMEDOUT if I read
http://pubs.opengroup.org/onlinepubs/009695399/functions/mq_receive.html
correctly - but with some another error - return value == -1 and errno
== EINVAL.
So the first quoted sentence actually doesn't apply IMHO.

The test description in the second comment on 
http://ltp.git.sourceforge.net/git/gitweb.cgi?p=ltp/ltp.git;a=blob;f=testcases/open_posix_testsuite/conformance/interfaces/mq_timedreceive/10-2.c;h=49ee4f243fc5046a965a551650d8697217faac35;hb=HEAD
reparaphrases the above quoted part incorrectly IMHO. The test
implements the description at the top though.


	Bernd
-- 
Bernd Petrovitsch                  Email : bernd at petrovitsch.priv.at
                     LUGA : http://www.luga.at




More information about the Kernelnewbies mailing list