]> git.kaiwu.me - nginx.git/commitdiff
Fixed portability issues with union sigval.
authorSergey Kandaurov <pluknet@nginx.com>
Mon, 28 Jan 2019 14:33:31 +0000 (14:33 +0000)
committerSergey Kandaurov <pluknet@nginx.com>
Mon, 28 Jan 2019 14:33:31 +0000 (14:33 +0000)
AIO support in nginx was originally developed against FreeBSD versions 4-6,
where the sival_ptr field was named as sigval_ptr (seemingly by mistake[1]),
which made nginx use the only name available then.  The standard-complaint
name was restored in 2005 (first appeared in FreeBSD 7.0, 2008), retaining
compatibility with previous versions[2][3].  In DragonFly, similar changes
were committed in 2009[4], with backward compatibility recently removed[5].

The change switches to the standard name, retaining compatibility with old
FreeBSD versions.

[1] https://svnweb.freebsd.org/changeset/base/48621
[2] https://svnweb.freebsd.org/changeset/base/152029
[3] https://svnweb.freebsd.org/changeset/base/174003
[4] https://gitweb.dragonflybsd.org/dragonfly.git/commit/3693401
[5] https://gitweb.dragonflybsd.org/dragonfly.git/commit/7875042

src/os/unix/ngx_file_aio_read.c
src/os/unix/ngx_freebsd_config.h

index aedc3c90ce6a614fc8c90591179fcb4b06a884c4..bb60ee8247c98f7fba6192e7c5ae9a025b794d7d 100644 (file)
@@ -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;
 
index b7da48cb10e1437473fcacb8589dc5386abacacb..c641108b705e30a9a6ce20819d3b82b88108d53e 100644 (file)
 
 
 #if (NGX_HAVE_FILE_AIO)
+
 #include <aio.h>
 typedef struct aiocb  ngx_aiocb_t;
+
+#if (__FreeBSD_version < 700005 && !defined __DragonFly__)
+#define sival_ptr     sigval_ptr
+#endif
+
 #endif