> -----Original Message-----
> From: Garrett Cooper [mailto:[email protected]]
> Sent: Wednesday, October 13, 2010 5:24 AM
> To: Bian Naimeng
> Cc: Mitani; [email protected]; 當座 健市
> Subject: Re: [LTP] [PATCH] fix "aio_error" test
> 
> 2010/10/8 Bian Naimeng <[email protected]>:
> >> Hi,
> >>
> >>
> >> "conformance/interfaces/aio_error/3-1" failed with following
> message:
> >> ------------
> >> conformance/interfaces/aio_error/3-1: execution: FAILED: Output:
> >> aio_error/3-1.c bad aio_read return value()
> >> ------------
> >>
> >> This testset seems to be the error root test for "aio_error()".
> >> Therefore, "aio_error()" must be called after failure of
> "aio_write()",
> >> I think.
> >> But, "exit()" is called when expected failure of "aio_write()"
> occurred:
> >> ------------(3-1.c)
> >>         if (aio_write(&aiocb) != 0)
> >>  {
> >>                 printf(TNAME " bad aio_read return value()\n");
> >>                 exit(PTS_FAIL);
> >>  }
> >> ------------
> >>
> >> I think that "exit()" must be called when "aio_write()" succeeded.
> >>
> >
> >  Agree.
> >
> >> And the message of unexpected movement of "aio_write()" is
> >> "aio_read()"'s one.
> >> And the indent of this program "3-1.c" seems to include both space
> and tab.
> >> I want to revise them, too.
> >>
> >
> >  Another one should be fix like this.
> >
> >        if (ret != EINVAL)
> >        {
> > -               printf(TNAME " errno is not EINVAL %s\n",
> strerror(errno));
> > +               printf(TNAME " errno is not EINVAL %s\n",
> strerror(ret));
> >                return PTS_FAIL;
> >        }
> >
> >>
> >> Signed-off-by: Tomonori Mitani <[email protected]>
> >> ============
> >> ---
> >>
> a/testcases/open_posix_testsuite/conformance/interfaces/aio_error/
> 3-1.c       2010
> >> -09-22 22:31:24.000000000 +0900
> >> +++
> >>
> b/testcases/open_posix_testsuite/conformance/interfaces/aio_error/
> 3-1.c       2010
> >> -09-30 09:51:42.000000000 +0900
> >> @@ -36,42 +36,41 @@
> >>
> >>  int main()
> >>  {
> >> -
> >> -        char tmpfname[256];
> >> +     char tmpfname[256];
> >>  #define BUF_SIZE 512
> >> -        char buf[BUF_SIZE];
> >> -        int fd;
> >> -        struct aiocb aiocb;
> >> +     char buf[BUF_SIZE];
> >> +     int fd;
> >> +     struct aiocb aiocb;
> >>       int ret=0;
> >>
> >>       if (sysconf(_SC_ASYNCHRONOUS_IO) != 200112L)
> >>               return PTS_UNSUPPORTED;
> >>
> >> -        snprintf(tmpfname, sizeof(tmpfname),
> "/tmp/pts_aio_error_3_1_%d",
> >> -                  getpid());
> >> -        unlink(tmpfname);
> >> -        fd = open(tmpfname, O_CREAT | O_RDWR | O_EXCL,
> >> -                  S_IRUSR | S_IWUSR);
> >> -        if (fd == -1)
> >> -        {
> >> -                printf(TNAME " Error at open(): %s\n",
> >> -                       strerror(errno));
> >> -                exit(PTS_UNRESOLVED);
> >> -        }
> >> +     snprintf(tmpfname, sizeof(tmpfname),
> "/tmp/pts_aio_error_3_1_%d",
> >> +                      getpid());
> >> +     unlink(tmpfname);
> >> +     fd = open(tmpfname, O_CREAT | O_RDWR | O_EXCL,
> >> +                       S_IRUSR | S_IWUSR);
> >> +     if (fd == -1)
> >> +     {
> >> +             printf(TNAME " Error at open(): %s\n",
> >> +                        strerror(errno));
> >> +             exit(PTS_UNRESOLVED);
> >> +     }
> >>
> >> -        unlink(tmpfname);
> >> +     unlink(tmpfname);
> >>
> >>       memset (&aiocb, 0, sizeof (struct aiocb));
> >>
> >> -        aiocb.aio_fildes = fd;
> >> -        aiocb.aio_buf = buf;
> >> -        aiocb.aio_reqprio = -1;
> >> -        aiocb.aio_nbytes = BUF_SIZE;
> >> +     aiocb.aio_fildes = fd;
> >> +     aiocb.aio_buf = buf;
> >> +     aiocb.aio_reqprio = -1;
> >> +     aiocb.aio_nbytes = BUF_SIZE;
> >>
> >> -        if (aio_write(&aiocb) != 0)
> >> +     if (aio_write(&aiocb) == 0)
> >>       {
> >> -                printf(TNAME " bad aio_read return value()\n");
> >> -                exit(PTS_FAIL);
> >> +             printf(TNAME " bad aio_write return value()\n");
> >> +             exit(PTS_FAIL);
> >>       }
> >>
> >>       while (aio_error (&aiocb) == EINPROGRESS);
> 
>     I'll respond to this sometime in the next couple of days after I
> do some more investigation on the issue.
> Thanks,
> -Garrett


Hi,

I added Bian's following opinion to patch:
------------
  Another one should be fix like this.

        if (ret != EINVAL)
        {
-               printf(TNAME " errno is not EINVAL %s\n", strerror(errno));
+               printf(TNAME " errno is not EINVAL %s\n", strerror(ret));
                return PTS_FAIL;
        }
------------

And I added following two modifications.

 - Closing the file descriptor when exit.

 - Clear "errno".
   The first "unlink()" fails because the file doesn't exist.
   After that, ENOENT is set to "errno" and kept intact.
   I revised to clear "errno".

I noticed that there were similar problems in the other "aio-..." test programs.
But I cannot judge whether other test programs must be revised.
I revise only "aio_error/3-1". 


Signed-off-by: Tomonori Mitani <[email protected]>
============
--- testcases/open_posix_testsuite/conformance/interfaces/aio_error/3-1.c       
2010-10-03 09:53:52.000000000 +0900
+++ testcases/open_posix_testsuite/conformance/interfaces/aio_error/3-1.new     
2010-10-13 09:30:12.000000000 +0900
@@ -36,42 +36,43 @@
 
 int main()
 {
-
-        char tmpfname[256];
+       char tmpfname[256];
 #define BUF_SIZE 512
-        char buf[BUF_SIZE];
-        int fd;
-        struct aiocb aiocb;
+       char buf[BUF_SIZE];
+       int fd;
+       struct aiocb aiocb;
        int ret=0;
 
        if (sysconf(_SC_ASYNCHRONOUS_IO) != 200112L)
                return PTS_UNSUPPORTED;
 
-        snprintf(tmpfname, sizeof(tmpfname), "/tmp/pts_aio_error_3_1_%d",
-                  getpid());
-        unlink(tmpfname);
-        fd = open(tmpfname, O_CREAT | O_RDWR | O_EXCL,
-                  S_IRUSR | S_IWUSR);
-        if (fd == -1)
-        {
-                printf(TNAME " Error at open(): %s\n",
-                       strerror(errno));
-                exit(PTS_UNRESOLVED);
-        }
+       snprintf(tmpfname, sizeof(tmpfname), "/tmp/pts_aio_error_3_1_%d",
+                        getpid());
+       unlink(tmpfname);
+       errno = 0;
+       fd = open(tmpfname, O_CREAT | O_RDWR | O_EXCL,
+                         S_IRUSR | S_IWUSR);
+       if (fd == -1)
+       {
+               printf(TNAME " Error at open(): %s\n",
+                          strerror(errno));
+               exit(PTS_UNRESOLVED);
+       }
 
-        unlink(tmpfname);
+       unlink(tmpfname);
 
        memset (&aiocb, 0, sizeof (struct aiocb));
 
-        aiocb.aio_fildes = fd;
-        aiocb.aio_buf = buf;
-        aiocb.aio_reqprio = -1;
-        aiocb.aio_nbytes = BUF_SIZE;
+       aiocb.aio_fildes = fd;
+       aiocb.aio_buf = buf;
+       aiocb.aio_reqprio = -1;
+       aiocb.aio_nbytes = BUF_SIZE;
 
-        if (aio_write(&aiocb) != 0)
+       if (aio_write(&aiocb) == 0)
        {
-                printf(TNAME " bad aio_read return value()\n");
-                exit(PTS_FAIL);
+               close(fd);
+               printf(TNAME " bad aio_write return value()\n");
+               exit(PTS_FAIL);
        }
 
        while (aio_error (&aiocb) == EINPROGRESS);
@@ -79,7 +80,8 @@
 
        if (ret != EINVAL)
        {
-               printf(TNAME " errno is not EINVAL %s\n", strerror(errno));
+               close(fd);
+               printf(TNAME " errno is not EINVAL %s\n", strerror(ret));
                return PTS_FAIL;
        }
 
============


Regards--

-Tomonori Mitani

Attachment: 3-1.patch
Description: Binary data

------------------------------------------------------------------------------
Beautiful is writing same markup. Internet Explorer 9 supports
standards for HTML5, CSS3, SVG 1.1,  ECMAScript5, and DOM L2 & L3.
Spend less time writing and  rewriting code and more time creating great
experiences on the web. Be a part of the beta today.
http://p.sf.net/sfu/beautyoftheweb
_______________________________________________
Ltp-list mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/ltp-list

Reply via email to