Add test for aio_cancel() and fix some bugs found by the test

This commit is contained in:
Gregory Nutt 2014-10-06 15:06:01 -06:00
parent 002e686991
commit 67030f9049
1 changed files with 22 additions and 7 deletions

View File

@ -160,11 +160,19 @@ int aio_cancel(int fildes, FAR struct aiocb *aiocbp)
*/
status = work_cancel(LPWORK, &aioc->aioc_work);
if (status >= 0)
{
aiocbp->aio_result = -ECANCELED;
ret = AIO_CANCELED;
}
else
{
ret = AIO_NOTCANCELED;
}
/* Remove the container from the list of pending transfers */
(void)aioc_decant(aioc);
ret = status >= 0 ? AIO_CANCELED : AIO_NOTCANCELED;
}
}
}
@ -201,14 +209,21 @@ int aio_cancel(int fildes, FAR struct aiocb *aiocbp)
/* Remove the container from the list of pending transfers */
next = (FAR struct aio_container_s *)aioc->aioc_link.flink;
(void)aioc_decant(aioc);
next = (FAR struct aio_container_s *)aioc->aioc_link.flink;
aiocbp = aioc_decant(aioc);
DEBUGASSERT(aiocbp);
/* Keep track of the return status */
if (ret != AIO_NOTCANCELED)
if (status >= 0)
{
ret = status >= 0 ? AIO_CANCELED : AIO_NOTCANCELED;
aiocbp->aio_result = -ECANCELED;
if (ret != AIO_NOTCANCELED)
{
ret = AIO_CANCELED;
}
}
else
{
ret = AIO_NOTCANCELED;
}
}
}