aio/unix: Use signal.sival which is standard

Sergey Kandaurov pluknet at nginx.com
Wed Jan 9 11:52:30 UTC 2019



> On 8 Jan 2019, at 06:37, Sepherosa Ziehau <sepherosa at gmail.com> wrote:
> 
> sigval.sigval is for FreeBSD 6 compability, while FreeBSD 6 was EOL
> for quite a while.
> 
> Patch:
> https://leaf.dragonflybsd.org/~sephe/nginx_sival.diff

Citing here for archives:

commit 14d1cab150226367c8a0f0ae219b0e0571587aea
Author: Yanmin Qiao <yaqia at microsoft.com>
Date:   Tue Jan 8 11:33:00 2019 +0800

    unix/aio: Use sigval.sival which is standard.
    
    sigval.sigval is for FreeBSD 6 compability, while FreeBSD 6 was EOL for quite a while.

diff --git a/src/os/unix/ngx_file_aio_read.c b/src/os/unix/ngx_file_aio_read.c
index aedc3c90..bb60ee82 100644
--- a/src/os/unix/ngx_file_aio_read.c
+++ b/src/os/unix/ngx_file_aio_read.c
@@ -110,7 +110,7 @@ ngx_file_aio_read(ngx_file_t *file, u_char *buf, size_t size, off_t offset,
 #if (NGX_HAVE_KQUEUE)
     aio->aiocb.aio_sigevent.sigev_notify_kqueue = ngx_kqueue;
     aio->aiocb.aio_sigevent.sigev_notify = SIGEV_KEVENT;
-    aio->aiocb.aio_sigevent.sigev_value.sigval_ptr = ev;
+    aio->aiocb.aio_sigevent.sigev_value.sival_ptr = ev;
 #endif
     ev->handler = ngx_file_aio_event_handler;
 

FreeBSD 4/5/6 lack sival_ptr (FreeBSD 3 has it, but not yet SIGEV_KEVENT),
which seemingly was broken in svn r48621 and later restored in r152029.

And that means that the following will no longer be true:

: Currently file AIO is supported on FreeBSD 4.3+ and Linux 2.6.22+ only

While nginx still maintains compatibility down to FreeBSD 2.2.

If applied, it'd need this part as well (used to build on old FreeBSD):

diff --git a/src/event/modules/ngx_eventport_module.c b/src/event/modules/ngx_eventport_module.c
--- a/src/event/modules/ngx_eventport_module.c
+++ b/src/event/modules/ngx_eventport_module.c
@@ -250,9 +250,7 @@ ngx_eventport_init(ngx_cycle_t *cycle, n
 
         ngx_memzero(&sev, sizeof(struct sigevent));
         sev.sigev_notify = SIGEV_PORT;
-#if !(NGX_TEST_BUILD_EVENTPORT)
         sev.sigev_value.sival_ptr = &pn;
-#endif
 
         if (timer_create(CLOCK_REALTIME, &sev, &event_timer) == -1) {
             ngx_log_error(NGX_LOG_EMERG, cycle->log, ngx_errno,

-- 
Sergey Kandaurov



More information about the nginx-devel mailing list