If request is already in progress, wait for it to complete, so it doesn't race with exit of testcase (aiocb is allocated on main's stack), to avoid aio_cancel_1-1 and 2-1 sporadically crashing.
For example: Core was generated by `./aio_cancel_2-1.run-test '. Program terminated with signal 11, Segmentation fault. (gdb) bt #0 0x00003fffa6e81158 in __GI__exit (status=0) #1 0x00003fffa6df3054 in __run_exit_handlers (...) #2 0x00003fffa6df3134 in __GI_exit (status=<optimized out>) #3 0x00003fffa6dd4588 in generic_start_main (main=0x10000bbc ...) #4 0x00003fffa6dd4774 in __libc_start_main (...) #5 0x0000000000000000 in ?? () Signed-off-by: Jan Stancek <jstan...@redhat.com> --- .../conformance/interfaces/aio_cancel/1-1.c | 10 ++++++++-- .../conformance/interfaces/aio_cancel/2-1.c | 10 ++++++++-- 2 files changed, 16 insertions(+), 4 deletions(-) diff --git a/testcases/open_posix_testsuite/conformance/interfaces/aio_cancel/1-1.c b/testcases/open_posix_testsuite/conformance/interfaces/aio_cancel/1-1.c index 92f4b1d..ef9b0b5 100644 --- a/testcases/open_posix_testsuite/conformance/interfaces/aio_cancel/1-1.c +++ b/testcases/open_posix_testsuite/conformance/interfaces/aio_cancel/1-1.c @@ -39,7 +39,7 @@ int main(void) char tmpfname[256]; #define BUF_SIZE 1024 char buf[BUF_SIZE]; - int fd; + int fd, err; struct aiocb aiocb; if (sysconf(_SC_ASYNCHRONOUS_IO) < 200112L) @@ -67,9 +67,15 @@ int main(void) return PTS_FAIL; } - if (aio_cancel(fd, &aiocb) == -1) { + switch (aio_cancel(fd, &aiocb)) { + case -1: printf(TNAME " Error at aio_cancel(): %s\n", strerror(errno)); return PTS_FAIL; + case AIO_NOTCANCELED: + do { + usleep(10000); + err = aio_error(&aiocb); + } while (err == EINPROGRESS); } close(fd); diff --git a/testcases/open_posix_testsuite/conformance/interfaces/aio_cancel/2-1.c b/testcases/open_posix_testsuite/conformance/interfaces/aio_cancel/2-1.c index 97a00bc..699c424 100644 --- a/testcases/open_posix_testsuite/conformance/interfaces/aio_cancel/2-1.c +++ b/testcases/open_posix_testsuite/conformance/interfaces/aio_cancel/2-1.c @@ -44,7 +44,7 @@ int main(void) char tmpfname[256]; #define BUF_SIZE 1024 char buf[BUF_SIZE]; - int fd; + int fd, err; struct aiocb aiocb; if (sysconf(_SC_ASYNCHRONOUS_IO) < 200112L) @@ -72,9 +72,15 @@ int main(void) return PTS_FAIL; } - if (aio_cancel(fd, NULL) == -1) { + switch (aio_cancel(fd, NULL)) { + case -1: printf(TNAME " Error at aio_cancel(): %s\n", strerror(errno)); return PTS_FAIL; + case AIO_NOTCANCELED: + do { + usleep(10000); + err = aio_error(&aiocb); + } while (err == EINPROGRESS); } close(fd); -- 1.8.3.1 ------------------------------------------------------------------------------ BPM Camp - Free Virtual Workshop May 6th at 10am PDT/1PM EDT Develop your own process in accordance with the BPMN 2 standard Learn Process modeling best practices with Bonita BPM through live exercises http://www.bonitasoft.com/be-part-of-it/events/bpm-camp-virtual- event?utm_ source=Sourceforge_BPM_Camp_5_6_15&utm_medium=email&utm_campaign=VA_SF _______________________________________________ Ltp-list mailing list Ltp-list@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/ltp-list