> -----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
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
