aio/unix: Use signal.sival which is standard
Sergey Kandaurov
pluknet at nginx.com
Thu Jan 17 10:29:56 UTC 2019
> On 17 Jan 2019, at 08:43, Sepherosa Ziehau <sepherosa at gmail.com> wrote:
>
> What's the preferred way to handle this? I am not sure whether you
> guys allow __FreeBSD_version testing etc.
>
This could be solved with autotests.
# HG changeset patch
# User Sergey Kandaurov <pluknet at nginx.com>
# Date 1547720890 0
# Thu Jan 17 10:28:10 2019 +0000
# Node ID d28513cd71bce227b4e159b7a3f518aa504232f0
# Parent 6d15e452fa2eaf19408e24a0d0fcc3a31344a289
Fixed portability issues with union sigval.
The sival_ptr field is now preferably used.
diff --git a/auto/unix b/auto/unix
--- a/auto/unix
+++ b/auto/unix
@@ -523,6 +523,7 @@ if [ $NGX_FILE_AIO = YES ]; then
ngx_feature_libs=
ngx_feature_test="struct aiocb iocb;
iocb.aio_sigevent.sigev_notify = SIGEV_KEVENT;
+ iocb.aio_sigevent.sigev_value.sival_ptr = NULL;
(void) aio_read(&iocb)"
. auto/feature
@@ -532,6 +533,22 @@ if [ $NGX_FILE_AIO = YES ]; then
if [ $ngx_found = no ]; then
+ ngx_feature="kqueue AIO support (legacy)"
+ ngx_feature_name="NGX_HAVE_FILE_AIO_LEGACY"
+ ngx_feature_test="struct aiocb iocb;
+ iocb.aio_sigevent.sigev_notify = SIGEV_KEVENT;
+ iocb.aio_sigevent.sigev_value.sigval_ptr = NULL;
+ (void) aio_read(&iocb)"
+ . auto/feature
+
+ if [ $ngx_found = yes ]; then
+ CORE_SRCS="$CORE_SRCS $FILE_AIO_SRCS"
+ have=NGX_HAVE_FILE_AIO . auto/have
+ fi
+ fi
+
+ if [ $ngx_found = no ]; then
+
ngx_feature="Linux AIO support"
ngx_feature_name="NGX_HAVE_FILE_AIO"
ngx_feature_run=no
diff --git a/src/os/unix/ngx_file_aio_read.c b/src/os/unix/ngx_file_aio_read.c
--- a/src/os/unix/ngx_file_aio_read.c
+++ b/src/os/unix/ngx_file_aio_read.c
@@ -110,8 +110,12 @@ ngx_file_aio_read(ngx_file_t *file, u_ch
#if (NGX_HAVE_KQUEUE)
aio->aiocb.aio_sigevent.sigev_notify_kqueue = ngx_kqueue;
aio->aiocb.aio_sigevent.sigev_notify = SIGEV_KEVENT;
+#if !(NGX_HAVE_FILE_AIO_LEGACY)
+ aio->aiocb.aio_sigevent.sigev_value.sival_ptr = ev;
+#else
aio->aiocb.aio_sigevent.sigev_value.sigval_ptr = ev;
#endif
+#endif
ev->handler = ngx_file_aio_event_handler;
n = aio_read(&aio->aiocb);
--
Sergey Kandaurov
More information about the nginx-devel
mailing list