aio/unix: Use signal.sival which is standard
Sepherosa Ziehau
sepherosa at gmail.com
Thu Jan 17 05:43:57 UTC 2019
What's the preferred way to handle this? I am not sure whether you
guys allow __FreeBSD_version testing etc.
On Wed, Jan 9, 2019 at 7:52 PM Sergey Kandaurov <pluknet at nginx.com> wrote:
>
>
>
> > 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
>
> _______________________________________________
> nginx-devel mailing list
> nginx-devel at nginx.org
> http://mailman.nginx.org/mailman/listinfo/nginx-devel
--
Tomorrow Will Never Die
More information about the nginx-devel
mailing list