Update the EV_SET() description with newer implementation.

EV_SET(2) is a macro again, that wraps an inline function which is still
new in NetBSD 8.0.

Sponsored by <The NetBSD Foundation>
This commit is contained in:
kamil 2017-06-06 17:01:59 +00:00
parent 471068c972
commit bc0c5fd82b

View File

@ -1,4 +1,4 @@
.\" $NetBSD: kqueue.2,v 1.41 2017/05/31 01:03:01 kamil Exp $
.\" $NetBSD: kqueue.2,v 1.42 2017/06/06 17:01:59 kamil Exp $
.\"
.\" Copyright (c) 2000 Jonathan Lemon
.\" All rights reserved.
@ -155,10 +155,19 @@ and
.Fa eventlist .
.Pp
.Fn EV_SET
is a static inline function which is provided for ease of initializing a
kevent structure.
Its original form was a preprocessor macro,
which caused bugs in third party code.
is a macro which is provided for ease of initializing a kevent structure.
It wraps an internal static inline function to prevent preprocessor misuse.
In the past this code would behave incorrectly and damage process's memory,
if incrementation or decrementation would be used as the first argument.
This example has been taken from LLDB, that caused the memory corruption and
inspired the
.Nx
developers for improving the implementation.
.Bd -literal -offset indent
EV_SET(&in_events[i++], fd.first, EVFILT_READ, EV_ADD, 0, 0, 0);
.Ed
.Pp
This macro is now safe in all major BSDs.
.Pp
The
.Va kevent
@ -673,5 +682,5 @@ function first appeared in
.Nx 6.0 .
.Pp
.Fn EV_SET
was converted from a macro to a static inline function in
was converted from a macro implementation to the macro wrapping a static inline function in
.Nx 8.0 .