From e5f34875ffa282785d4a8abd482dc3b67dfef300 Mon Sep 17 00:00:00 2001 From: Gregory Nutt Date: Tue, 7 Oct 2014 09:57:20 -0600 Subject: [PATCH] AIO signal related fixes; extensino to AIO test --- fs/aio/aio_signal.c | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/fs/aio/aio_signal.c b/fs/aio/aio_signal.c index 3e46f95dae4..9545a86227e 100644 --- a/fs/aio/aio_signal.c +++ b/fs/aio/aio_signal.c @@ -96,6 +96,9 @@ int aio_signal(pid_t pid, FAR struct aiocb *aiocbp) { +#ifdef CONFIG_CAN_PASS_STRUCTS + union sigval value; +#endif int errcode; int status; int ret; @@ -115,10 +118,10 @@ int aio_signal(pid_t pid, FAR struct aiocb *aiocbp) status = sigqueue(pid, aiocbp->aio_sigevent.sigev_sign, aiocbp->aio_sigevent.sigev_value.sival_ptr); #endif - if (ret < 0) + if (status < 0) { errcode = get_errno(); - fdbg("ERROR: sigqueue failed: %d\n", errcode); + fdbg("ERROR: sigqueue #1 failed: %d\n", errcode); ret = ERROR; } } @@ -127,11 +130,16 @@ int aio_signal(pid_t pid, FAR struct aiocb *aiocbp) * on sig_suspend(); */ - status = kill(pid, SIGPOLL); +#ifdef CONFIG_CAN_PASS_STRUCTS + value.sival_ptr = aiocbp; + status = sigqueue(pid, SIGPOLL, value); +#else + status = sigqueue(pid, SIGPOLL, aiocbp); +#endif if (status && ret == OK) { errcode = get_errno(); - fdbg("ERROR: kill failed: %d\n", errcode); + fdbg("ERROR: sigqueue #2 failed: %d\n", errcode); ret = ERROR; }