From: Wanlong G. <gao...@cn...> - 2012-08-06 09:39:20
|
On 08/06/2012 05:30 PM, Kang Kai wrote: > On 2012年08月06日 16:32, Wanlong Gao wrote: >> On 08/06/2012 04:19 PM, Kang Kai wrote: >>> After aio_suspend, wait all aio_write operations to complete. >>> >>> If don't do that, it fails with "Segmentation fault" on routerstation(mips) >>> board randomly about in 1000 continuous test. The reason may be some >>> aio_writes don't complete before close the file, that cause some resouse >>> don't be released and finally cause segment fault. >>> >>> Signed-off-by: Kang Kai<kai...@wi...> >>> --- >>> .../conformance/interfaces/aio_suspend/3-1.c | 12 ++++++++++++ >>> 1 files changed, 12 insertions(+), 0 deletions(-) >>> >>> diff --git a/testcases/open_posix_testsuite/conformance/interfaces/aio_suspend/3-1.c b/testcases/open_posix_testsuite/conformance/interfaces/aio_suspend/3-1.c >>> index 15120e1..e8e9705 100644 >>> --- a/testcases/open_posix_testsuite/conformance/interfaces/aio_suspend/3-1.c >>> +++ b/testcases/open_posix_testsuite/conformance/interfaces/aio_suspend/3-1.c >>> @@ -46,6 +46,7 @@ int main() >>> struct aiocb aiocb[NAIOCB]; >>> const struct aiocb *list[NENT]; >>> int i; >>> + int ret; >>> >>> if (sysconf(_SC_ASYNCHRONOUS_IO)< 200112L) >>> return PTS_UNSUPPORTED; >>> @@ -87,6 +88,17 @@ int main() >>> exit(PTS_FAIL); >>> } >>> >>> + for (i = 0; i< NAIOCB; ++i) { >>> + do { >>> + usleep(10000); >>> + ret = aio_error(&aiocb[i]); >>> + } while (ret == EINPROGRESS); >>> + if (aio_return(&aiocb[i]) == -1) { > > Hi Wanlong, > >> Why do you check the return value here? and did you test this patch on your mips machine? > I test it on mips for 4x1000 times and x86_64, and the results are fine. > With no other operation, when aio_write complete, it should succeed. So I use aio_return to check the return values. > OK. Pushed. Thank you. Wanlong Gao > Regards, > Kai > >> >> Thanks, >> Wanlong Gao >> >>> + printf(TNAME " Error at aio_return(): %s\n", strerror(errno)); >>> + exit(PTS_FAIL); >>> + } >>> + } >>> + >>> close(fd); >>> printf("Test PASSED\n"); >>> return PTS_PASS; >>> >> > > |