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