This patch introduces wait so that testcases exit doesn't race
with completion of aio_fsync.

This is to avoid SIGSEGV:
 #0  0x000003fffd1f4a24 in _IO_flush_all_lockp () at genops.c:850
 #1  0x000003fffd1f4b8e in _IO_cleanup () at genops.c:1010
 #2  0x000003fffd1a88f6 in __run_exit_handlers () at exit.c:90
 #3  0x000003fffd1a89b0 in __GI_exit () at exit.c:99
 #4  0x000003fffd18c822 in __libc_start_main () at libc-start.c:292
 #5  0x0000000080000b76 in _start ()

Signed-off-by: Jan Stancek <[email protected]>
---
 .../conformance/interfaces/aio_fsync/8-1.c         |   14 ++++++++++++++
 .../conformance/interfaces/aio_fsync/8-2.c         |   14 ++++++++++++++
 .../conformance/interfaces/aio_fsync/8-3.c         |   14 ++++++++++++++
 .../conformance/interfaces/aio_fsync/8-4.c         |   14 ++++++++++++++
 .../conformance/interfaces/aio_fsync/9-1.c         |   14 ++++++++++++++
 5 files changed, 70 insertions(+), 0 deletions(-)

diff --git 
a/testcases/open_posix_testsuite/conformance/interfaces/aio_fsync/8-1.c 
b/testcases/open_posix_testsuite/conformance/interfaces/aio_fsync/8-1.c
index d03dc76..356a21e 100644
--- a/testcases/open_posix_testsuite/conformance/interfaces/aio_fsync/8-1.c
+++ b/testcases/open_posix_testsuite/conformance/interfaces/aio_fsync/8-1.c
@@ -73,6 +73,20 @@ int main(void)
                exit(PTS_FAIL);
        }
 
+       /* wait for aio_fsync */
+       do {
+               usleep(10000);
+               ret = aio_error(&aiocb_fsync);
+       } while (ret == EINPROGRESS);
+
+       ret = aio_return(&aiocb_fsync);
+       if (ret) {
+               printf(TNAME " Error at aio_return(): %d (%s)\n",
+                       ret, strerror(errno));
+               close(fd);
+               return PTS_FAIL;
+       }
+
        close(fd);
        printf("Test PASSED\n");
        return PTS_PASS;
diff --git 
a/testcases/open_posix_testsuite/conformance/interfaces/aio_fsync/8-2.c 
b/testcases/open_posix_testsuite/conformance/interfaces/aio_fsync/8-2.c
index 7215872..65e36d0 100644
--- a/testcases/open_posix_testsuite/conformance/interfaces/aio_fsync/8-2.c
+++ b/testcases/open_posix_testsuite/conformance/interfaces/aio_fsync/8-2.c
@@ -73,6 +73,20 @@ int main(void)
                exit(PTS_FAIL);
        }
 
+       /* wait for aio_fsync */
+       do {
+               usleep(10000);
+               ret = aio_error(&aiocb_fsync);
+       } while (ret == EINPROGRESS);
+
+       ret = aio_return(&aiocb_fsync);
+       if (ret) {
+               printf(TNAME " Error at aio_return(): %d (%s)\n",
+                       ret, strerror(errno));
+               close(fd);
+               return PTS_FAIL;
+       }
+
        close(fd);
        printf("Test PASSED\n");
        return PTS_PASS;
diff --git 
a/testcases/open_posix_testsuite/conformance/interfaces/aio_fsync/8-3.c 
b/testcases/open_posix_testsuite/conformance/interfaces/aio_fsync/8-3.c
index 1126e84..794ee49 100644
--- a/testcases/open_posix_testsuite/conformance/interfaces/aio_fsync/8-3.c
+++ b/testcases/open_posix_testsuite/conformance/interfaces/aio_fsync/8-3.c
@@ -73,6 +73,20 @@ int main(void)
                exit(PTS_FAIL);
        }
 
+       /* wait for aio_fsync */
+       do {
+               usleep(10000);
+               ret = aio_error(&aiocb_fsync);
+       } while (ret == EINPROGRESS);
+
+       ret = aio_return(&aiocb_fsync);
+       if (ret) {
+               printf(TNAME " Error at aio_return(): %d (%s)\n",
+                       ret, strerror(errno));
+               close(fd);
+               return PTS_FAIL;
+       }
+
        close(fd);
        printf("Test PASSED\n");
        return PTS_PASS;
diff --git 
a/testcases/open_posix_testsuite/conformance/interfaces/aio_fsync/8-4.c 
b/testcases/open_posix_testsuite/conformance/interfaces/aio_fsync/8-4.c
index e0e83a7..7a212e6 100644
--- a/testcases/open_posix_testsuite/conformance/interfaces/aio_fsync/8-4.c
+++ b/testcases/open_posix_testsuite/conformance/interfaces/aio_fsync/8-4.c
@@ -73,6 +73,20 @@ int main(void)
                exit(PTS_FAIL);
        }
 
+       /* wait for aio_fsync */
+       do {
+               usleep(10000);
+               ret = aio_error(&aiocb_fsync);
+       } while (ret == EINPROGRESS);
+
+       ret = aio_return(&aiocb_fsync);
+       if (ret) {
+               printf(TNAME " Error at aio_return(): %d (%s)\n",
+                       ret, strerror(errno));
+               close(fd);
+               return PTS_FAIL;
+       }
+
        close(fd);
        printf("Test PASSED\n");
        return PTS_PASS;
diff --git 
a/testcases/open_posix_testsuite/conformance/interfaces/aio_fsync/9-1.c 
b/testcases/open_posix_testsuite/conformance/interfaces/aio_fsync/9-1.c
index f0e7ee2..a8b0ec1 100644
--- a/testcases/open_posix_testsuite/conformance/interfaces/aio_fsync/9-1.c
+++ b/testcases/open_posix_testsuite/conformance/interfaces/aio_fsync/9-1.c
@@ -72,6 +72,20 @@ int main(void)
                exit(PTS_FAIL);
        }
 
+       /* wait for aio_fsync */
+       do {
+               usleep(10000);
+               ret = aio_error(&aiocb_fsync);
+       } while (ret == EINPROGRESS);
+
+       ret = aio_return(&aiocb_fsync);
+       if (ret) {
+               printf(TNAME " Error at aio_return(): %d (%s)\n",
+                       ret, strerror(errno));
+               close(fd);
+               return PTS_FAIL;
+       }
+
        close(fd);
        printf("Test PASSED\n");
        return PTS_PASS;
-- 
1.7.1


------------------------------------------------------------------------------
Get 100% visibility into Java/.NET code with AppDynamics Lite!
It's a free troubleshooting tool designed for production.
Get down to code-level detail for bottlenecks, with <2% overhead. 
Download for free and get started troubleshooting in minutes. 
http://pubads.g.doubleclick.net/gampad/clk?id=48897031&iu=/4140/ostg.clktrk
_______________________________________________
Ltp-list mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/ltp-list

Reply via email to