* [LTP] [POSIX][PATCH]fix test conformance/interfaces/aio_cancel/7-1.c
@ 2011-01-27 9:18 Bian Naimeng
0 siblings, 0 replies; only message in thread
From: Bian Naimeng @ 2011-01-27 9:18 UTC (permalink / raw)
To: Garrett Cooper; +Cc: ltp-list
When i test conformance/interfaces/aio_cancel/7-1 on the same OS,
it will report some different results, such as PASS, UNRESOLVED.
The probable one is UNRESOLVED, it looks not a stable case.
After applying following patch, the test will become stable.
Signed-off-by: Bian Naimeng <biannm@cn.fujitsu.com>
---
.../conformance/interfaces/aio_cancel/7-1.c | 192 ++++++++++++--------
1 files changed, 112 insertions(+), 80 deletions(-)
diff --git a/testcases/open_posix_testsuite/conformance/interfaces/aio_cancel/7-1.c b/testcases/open_posix_testsuite/conformance/interfaces/aio_cancel/7-1.c
index c37f184..a410152 100644
--- a/testcases/open_posix_testsuite/conformance/interfaces/aio_cancel/7-1.c
+++ b/testcases/open_posix_testsuite/conformance/interfaces/aio_cancel/7-1.c
@@ -43,14 +43,81 @@
#define BUF_NB 128
#define BUF_SIZE 1024
+int
+setup_aio_request(struct aiocb *aiocb[], char *bufs[], int count, int fd)
+{
+ int i = 0;
+
+ for (i = 0; i < count; i++) {
+ memset(aiocb[i], 0, sizeof(struct aiocb));
+
+ aiocb[i]->aio_fildes = fd;
+ memset(bufs[i], 0, BUF_SIZE);
+ aiocb[i]->aio_buf = bufs[i];
+ aiocb[i]->aio_nbytes = BUF_SIZE;
+ aiocb[i]->aio_offset = 0;
+ aiocb[i]->aio_sigevent.sigev_notify = SIGEV_NONE;
+
+ if (aio_write(aiocb[i]) == -1) {
+ printf(TNAME " loop %d: Error at aio_write(): %s\n",
+ i, strerror(errno));
+ return -1;
+ }
+ }
+
+ return 0;
+}
+
+int
+create_aio_request(struct aiocb *aiocb[], char *bufs[], int count)
+{
+ int i = 0;
+
+ for (i = 0; i < count; i++) {
+ aiocb[i] = malloc(sizeof(struct aiocb));
+ if (aiocb[i] == NULL) {
+ printf(TNAME " Error at malloc(): %s\n",
+ strerror(errno));
+ return -1;
+ }
+
+ bufs[i] = malloc(BUF_SIZE);
+ if (bufs[i] == NULL) {
+ printf(TNAME " Error at malloc(): %s\n",
+ strerror(errno));
+ return -1;
+ }
+ }
+
+ return 0;
+}
+
+void
+destroy_aio_request(struct aiocb *aiocb[], char *bufs[], int count)
+{
+ int i = 0;
+
+ for (i = 0; i < count; i++) {
+ if (bufs[i]) {
+ free(bufs[i]);
+ bufs[i] = NULL;
+ }
+ if (aiocb[i]) {
+ free(aiocb[i]);
+ aiocb[i] = NULL;
+ }
+ }
+}
+
int main()
{
char tmpfname[256];
int fd;
struct aiocb *aiocb[BUF_NB];
+ char *bufs[BUF_NB];
int i;
int in_progress;
- int gret;
+ int gret, trying = 100;
if (sysconf(_SC_ASYNCHRONOUS_IO) < 200112L)
return PTS_UNSUPPORTED;
@@ -70,96 +137,61 @@ int main()
unlink(tmpfname);
/* create AIO req */
+ if (create_aio_request(aiocb, bufs, BUF_NB) == -1) {
+ printf(TNAME " Error at create aio requests\n");
- for (i = 0; i < BUF_NB; i++)
- {
- aiocb[i] = malloc(sizeof(struct aiocb));
- if (aiocb[i] == NULL)
- {
- printf(TNAME " Error at malloc(): %s\n",
- strerror(errno));
- return PTS_UNRESOLVED;
- }
- aiocb[i]->aio_fildes = fd;
- aiocb[i]->aio_buf = malloc(BUF_SIZE);
- if (aiocb[i]->aio_buf == NULL)
- {
- printf(TNAME " Error at malloc(): %s\n",
- strerror(errno));
- return PTS_UNRESOLVED;
- }
- aiocb[i]->aio_nbytes = BUF_SIZE;
- aiocb[i]->aio_offset = 0;
- aiocb[i]->aio_sigevent.sigev_notify = SIGEV_NONE;
-
- if (aio_write(aiocb[i]) == -1)
- {
- printf(TNAME " loop %d: Error at aio_write(): %s\n",
- i, strerror(errno));
- return PTS_FAIL;
- }
+ destroy_aio_request(aiocb, bufs, BUF_NB);
+ close(fd);
+ return PTS_UNRESOLVED;
}
- /* try to cancel all
- * we hope to have enough time to cancel at least one
- */
-
- gret = aio_cancel(fd, NULL);
- if (gret == -1)
- {
- printf(TNAME " Error at aio_cancel(): %s\n",
- strerror(errno));
- return PTS_FAIL;
- }
+ do {
+ if (setup_aio_request(aiocb, bufs, BUF_NB, fd) == -1) {
+ printf(TNAME " Error at set aio requests\n");
- close(fd);
+ destroy_aio_request(aiocb, bufs, BUF_NB);
+ close(fd);
+ return PTS_UNRESOLVED;
+ }
- do {
- in_progress = 0;
- for (i = 0; i < BUF_NB; i++)
- {
+ /*
+ * try to cancel all
+ * we hope to have enough time to cancel at least one
+ */
+ gret = aio_cancel(fd, NULL);
+ if (gret == -1) {
+ printf(TNAME " Error at aio_cancel(): %s\n",
+ strerror(errno));
+ destroy_aio_request(aiocb, bufs, BUF_NB);
+ close(fd);
+ return PTS_FAIL;
+ } else if (gret == AIO_NOTCANCELED) {
int ret;
- ret = (aio_error(aiocb[i]));
-
- if (ret == -1)
- {
- printf(TNAME " Error at aio_error(): %s\n",
- strerror(errno));
- return PTS_FAIL;
- }
- else if (ret == EINPROGRESS)
- {
- /* at this point, all operations should be:
- * canceled
- * or in progress
- * with aio_cancel() == AIO_NOTCANCELED
- */
-
- if (gret != AIO_NOTCANCELED)
- {
- printf(TNAME " Error at aio_error(): %s\n", strerror(errno));
- return PTS_FAIL;
- }
+ for (i = 0; i < BUF_NB; i++) {
+ ret = (aio_error(aiocb[i]));
+ if (ret == EINPROGRESS || ret == 0) {
+ destroy_aio_request(aiocb,bufs,BUF_NB);
+ close(fd);
- in_progress = 1;
- }
- else if (ret == 0)
- {
- /* we seek one not canceled and check why.
- * (perhaps) it has not been canceled
- * because it was in progress
- * during the cancel operation
- */
-
- if (gret == AIO_NOTCANCELED)
- {
- printf ("Test PASSED\n");
+ printf("Test PASSED\n");
return PTS_PASS;
}
}
+
+ printf(TNAME " aio_cancel return AIO_NOTCANCELED, "
+ "but no request was processed\n");
+
+ destroy_aio_request(aiocb, bufs, BUF_NB);
+ close(fd);
+ return PTS_FAIL;
}
- } while (in_progress);
+ } while (trying --);
+
+ destroy_aio_request(aiocb, bufs, BUF_NB);
+ close(fd);
+
+ printf("Test unresolved\n");
return PTS_UNRESOLVED;
-}
\ No newline at end of file
+}
--
1.7.0.4
--
Regards
Bian Naimeng
------------------------------------------------------------------------------
Special Offer-- Download ArcSight Logger for FREE (a $49 USD value)!
Finally, a world-class log management solution at an even better price-free!
Download using promo code Free_Logger_4_Dev2Dev. Offer expires
February 28th, so secure your free ArcSight Logger TODAY!
http://p.sf.net/sfu/arcsight-sfd2d
_______________________________________________
Ltp-list mailing list
Ltp-list@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/ltp-list
^ permalink raw reply related [flat|nested] only message in thread
only message in thread, other threads:[~2011-01-27 9:19 UTC | newest]
Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2011-01-27 9:18 [LTP] [POSIX][PATCH]fix test conformance/interfaces/aio_cancel/7-1.c Bian Naimeng
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.