HomeAbout Us A-Z IndexSearch * Contact Us Register LoginPress Shop

The Open Brand -- Problem Reporting and Interpretations System


Problem Report 1309 Details

Help Show help | Quick Search | Submit a Test Suite Support Request | Click here to view your privileges

This page provides all information on Problem Report 1309.


Report 1309 Actions


    Problem Report Number 1309
    Submitter's Classification Test Suite problem
    State Resolved
    Resolution Test Suite Deficiency (TSD)
    Problem Resolution ID TSD.X.0591
    Raised 1970-01-01 08:00
    Updated 2003-03-13 08:00
    Published 1998-05-27 08:00
    Product Standard Internationalised System Calls and Libraries Extended V2 (UNIX 98)
    Certification Program The Open Brand certification program
    Test Suite VSU version 5.0.2
    Test Identification CAPIbase/sigaction 32
    Problem Summary TSD4U.00227 This test may fail on systems which are slow to transmit STREAMS messages.
    Problem Text
    This test failure is exposed on slower systems. The assertion is
    failing at the point where the test code is calling putpmsg().
    After the call to putpmsg(), the test needs to ensure that the
    written data at the slave end has made it over the master end in
    order to generate the SIGPOLL message when getmsg() is called. If
    a sleep() is added after the call to putpmsg(), the test passes.
    Test Output
    TEST CASE: sigaction

    TEST PURPOSE #32
    After a call to int sigaction(int sig, const struct
    sigaction *act, struct sigaction *oact) with
    SA_SIGINFO set in the sa_flags member of the sigaction
    structure pointed to by act and sig equal to SIGPOLL,
    on entry to the signal catching function specified by
    the sa_sigaction member when output buffers are
    available the si_code member of the structure pointed
    to by the siginfo argument shall contain POLL_OUT and
    the si_band member shall contain the band event.
    PREP: Open master pseudo tty
    PREP: Determine if pseudo tty is a stream
    PREP: Open slave side of pseudo tty
    PREP: Set up action for SIGPOLL
    PREP: Register for SIGPOLL
    PREP: Set O_NONBLOCK on read and write end of STREAM
    PREP: Generate SIGPOLL
    ERROR: SIGPOLL was not generated
    TEST: si_code field correct
    32 FAIL

    Review Information

    Review Type TSMA Review
    Start Date null
    Completed null
    Status Complete
    Review Recommendation No Resolution Given
    Review Response
    The submitter's analysis here is not correct:

    1) The test is not failing at the point of the call to putpmsg(), it is
    failing at the point it checks this call caused a signal to be generated,
    following both the putpmsg() call and succeeding getpmsg() call.

    2) This test is not predicated on the issue raised in TSD4U.00226. There,
    messages need to get to the STREAM head at the other end of the STREAM pair
    as a precondition for evaluating the test assertion. Here the test is
    interested in a signal being generated when the the output queue on the
    end where data is written becomes empty. Thus whether the data has
    actually reached the other end is not relevant, all we care about is
    that it has left the write queue on the side where it was written.

    3) There is no benefit to a sleep being added to this test to ensure the
    write queue empties before checking for the signal. The test already uses
    getpmsg() to ensure the message has transited in order to effect this
    (though as above message transit is not a necessary precondition it
    is used as a better performing synchronization alternative than simply
    sleeping). Thus adding a sleep would just make the test take longer to
    execute.


    Our analysis of the failure indicates the problem is that the getpmsg code
    has a typo which renders it ineffective. Specifically:

    if ((result = getpmsg(fildes[0],&ctl,&data,&band,&flags)) == -1)
    break;

    is intended to break out of the loop once the message is received
    but is incorrectly coded and actually breaks out of the loop if
    the message is not present. The code should be:

    if ((result = getpmsg(fildes[0],&ctl,&data,&band,&flags)) != -1)
    break;

    We recommend a Test Suite Deficiency be granted for this problem.

    Review Type SA Review
    Start Date null
    Completed null
    Status Complete
    Review Resolution Test Suite Deficiency (TSD)
    Review Conclusion
    This is an agreed Test Suite Deficiency.

    Problem Reporting System Options:

     

    Back   


Contact the Certification Authority