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

Reply via email to