diff options
Diffstat (limited to 'nuttx/fs/aio/aio_signal.c')
-rw-r--r-- | nuttx/fs/aio/aio_signal.c | 16 |
1 files changed, 12 insertions, 4 deletions
diff --git a/nuttx/fs/aio/aio_signal.c b/nuttx/fs/aio/aio_signal.c index 3e46f95da..9545a8622 100644 --- a/nuttx/fs/aio/aio_signal.c +++ b/nuttx/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; } |