svn commit: r306962 - head/tests/sys/kern/pipe

Conrad Meyer cem at freebsd.org
Mon Oct 10 15:35:00 UTC 2016


We also observed this test was broken, but I think the right fix is
much smaller:

--- a/tests/sys/kern/pipe/pipe_fstat_bug_test.c
+++ b/tests/sys/kern/pipe/pipe_fstat_bug_test.c
@@ -108,7 +108,6 @@ main(void)
                SYNC_W(0, go2);

                SYNC_R(0, go);
-               SYNC_W(0, go2); /* XXX: why is this required? */
                WRITE(8192);
                SYNC_W(0, go2);

(That line breaks the synchronization mechanism that is the only
guarantee the test passes.)

Best,
Conrad


On Mon, Oct 10, 2016 at 6:40 AM, Ruslan Bukin <br at freebsd.org> wrote:
> Author: br
> Date: Mon Oct 10 13:40:05 2016
> New Revision: 306962
> URL: https://svnweb.freebsd.org/changeset/base/306962
>
> Log:
>   Ensure data in pipe is available to read.
>   Useful for latest (5th, direct mode) test only.
>
>   Sponsored by: DARPA, AFRL
>   Sponsored by: HEIF5
>
> Modified:
>   head/tests/sys/kern/pipe/pipe_fstat_bug_test.c
>
> Modified: head/tests/sys/kern/pipe/pipe_fstat_bug_test.c
> ==============================================================================
> --- head/tests/sys/kern/pipe/pipe_fstat_bug_test.c      Mon Oct 10 11:53:54 2016        (r306961)
> +++ head/tests/sys/kern/pipe/pipe_fstat_bug_test.c      Mon Oct 10 13:40:05 2016        (r306962)
> @@ -26,6 +26,7 @@ SUCH DAMAGE.
>  #include <sys/types.h>
>  #include <sys/stat.h>
>  #include <sys/wait.h>
> +#include <sys/event.h>
>  #include <assert.h>
>  #include <err.h>
>  #include <errno.h>
> @@ -49,10 +50,12 @@ main(void)
>  {
>         char buffer[32768], buffer2[32768], go[] = "go", go2[] = "go2";
>         int desc[2], ipc_coord[2];
> +       struct kevent event, ke;
>         ssize_t error;
>         int successes = 0;
>         struct stat status;
>         pid_t new_pid;
> +       int kq;
>
>         error = pipe(desc);
>         if (error == -1)
> @@ -118,9 +121,24 @@ main(void)
>                 _exit(0);
>         }
>
> +       kq = kqueue();
> +       if (kq == -1)
> +               _exit(1);
> +
> +       EV_SET(&ke, desc[0], EVFILT_READ, EV_ADD, 0, 0, NULL);
> +
> +       /* Attach event to the kqueue. */
> +       if (kevent(kq, &ke, 1, NULL, 0, NULL) != 0)
> +               _exit(2);
> +
>         while (successes < 5) {
>                 SYNC_W(1, go);
>                 SYNC_R(1, go2);
> +
> +               /* Ensure data is available to read */
> +               if (kevent(kq, NULL, 0, &event, 1, NULL) != 1)
> +                       _exit(3);
> +
>                 fstat(desc[0], &status);
>                 error = read(desc[0], &buffer2, sizeof(buffer2));
>
>


More information about the svn-src-head mailing list