-
Notifications
You must be signed in to change notification settings - Fork 78
/
ChangeLog
454 lines (299 loc) · 15.4 KB
/
ChangeLog
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
Unreleased
------------------------------------------------------------------------
2022-11-02 v2.6.2
------------------------------------------------------------------------
* Fix: Various build system and include fixes to allow libkqueue
to build correctly with musl libc.
* Fix: Various macro and include fixes for Windows/MinGW builds.
(Fixed by: neheb)
* Always build both a static and a shared library. The STATIC_KQUEUE
build variable has been removed.
* Fix: Don't attempt to lock kqueues on fork. It's no longer needed
as we're not attempting to free memory in the kqueues, only close
file descriptors. This may resolve stalling fork() calls where
kqueues were in a waiting state.
2022-04-27 v2.6.1
------------------------------------------------------------------------
* Fix: Set the core dumped flag correctly in linux/proc on
CLD_DUMPED.
* Fix: Don't attempt to cleanup memory on fork as free() is not
fork safe. We still close open kqueue FDs on fork, and liberal
use of CLOEXEC should clean up any lingering filter FDs though
we may want to close these explicitly in future too.
* Fix: Double unlock in posix/proc.c
* Fix: Potential deadlock on kqueue initialisation failure.
* Fix: Building for MSVC (Patch by Jan200101)
* Fix: Sprinkle CLOEXEC around various places in the Linux and
POSIX platforms to stop us leaking file descriptors on exec.
* Add EVFILT_LIBKQUEUE/NOTE_THREAD_SAFE. When set to 0, the
global mutex is not locked on kqueue lookup. The application
must guarantee that kqueues must not be destroyed by a different
thread to the one that created them.
2022-03-21 v2.6.0
------------------------------------------------------------------------
* Fix: posix/proc don't allow users of this filter to progress
until the proc waiter thread has completed initialisation.
* Fix: Address multiple thread synchronisation issues by using a
single global mutex to synchronise the kqueue list and kqueue
file descriptor map, and per kqueue mutexes which are locked for
the duration of copyin and copyout. The per filter knote mutex
was removed with this change as it's no longer needed.
* Fix: posix/proc fix knote use after free if a notification
comes in for a knote which has already been freed.
The underlying issue was a problem with the list macros not
zeroing out prev/next pointers when items were removed from
lists.
* Fix: prevent thread cancellation on Linux in kqueue() and
kevent(). This prevents deadlocks occuring if a kqueue is
shared between threads and one thread is cancelled.
* Fix: linux Cleanup all kqueues by closing their file descriptors
and freeing associated memory on fork. A similar fix needed for
Solaris.
* Fix: linux/read linux/write Prevent invalid access of
fds->fds_write if the file descriptor state is freed after
processing read events.
* Fix: linux/monitor Use an atexit handler to ensure the fd
monitoring thread is shutdown gracefully on Linux. This fixes
spurious leak reports from LSAN et al...
* Fix: linux/timer Allow EVFILT_TIMER filters to be modified on
Linux (Closes #116) (Reported by: Grant Erickson).
* Fix: Set the library search path in libkqueue.pc (Closes #117)
(Reported by: Grant Erickson)
* Fix: posix/proc will now no longer deadlock if the PID being
monitored is reaped outside of libkqueue, or has exited before
we start monitoring.
* Fix: posix/proc all waiters will now be informed if monitoring
a PID fails, i.e. if the PID is reaped outside of libkqueue.
* Fix: Compilation on Windows (Closes #111).
(Reported by: brechtsanders)
* Fix: linux/read linux/write EPOLLERR, EPOLLHUP and EPOLLRDHUP on
sockets would not produce a kevent and no EOF indication would be
provided to the caller.
* Fix: linux/signal pending signals of the type specified in a new
signal event were reset when that event was added to a kqueue.
* Fix: Multiple instances of posix/proc wait thread may have been
spawned on repeated kqueue creation/destruction. This may have
lead to missed process exit notifications.
* Fix: Potential race between posix/proc waiter thread starting and
events being added.
* Fix: Deadlock between posix/proc waiter thread and kqueues.
* Fix: udata should not be modified if the knote modification fails.
* Test suites now pass on macOS 11.5.2 and FreeBSD 13.
* Packaging: We now set the release number if the current checked
out commit does not match a release tag. For example if the
current number of commits between the last release tag and HEAD
is 2, then the release will be `-3`. This allows easy upgrading
of packages between releases.
* Add EVFILT_LIBKQUEUE to expose libkqueue specific configuration
options. The initial implementation supports NOTE_VERSION to
retrieve the current version number, and NOTE_VERSION_STR to
retrieve a textual description of the version.
2021-09-06 v2.5.0
------------------------------------------------------------------------
* Add back support for monitoring process exit with EVFILT_PROC.
The is done with `pidfd_open(2)` for Linux >= 5.3, and via a new common POSIX
monitoring thread for Linux < 5.3 and other POSIX platforms.
* Fix: Include errors (EV_ERROR), and changelist entries with EV_RECEIPT in eventlist.
(Reported by: orbitz)
2021-08-14 v2.4.0
------------------------------------------------------------------------
* Fix: avoid segfaults when kqueue descriptors are cleaned up.
* Fix: Prevent potential dead-lock in linux_kqueue_init()
* Fix: slight deadlock in thread_start()
* Fix: missing inotify_rm_watch()
* Fix: call close() in an error handling path
* Fix: take the write lock when freeing knotes
* Keep a separate state tree for file descriptors inserted into epoll to avoid conflicts between
EVFILT_READ and EVFILT_WRITE (Closes #29 Closes #59)
* Fix: deadlock and memory leak in kqueue()
* Fix: use after free issue in decrementing kq reference counts
* Default to marking file descriptors as passive sockets if fstat() doesn't hint at the type
(Closes #97)
* Fix various leaks and issues found by LSAN
* Install event.h in $INCLUDEDIR/kqueue/sys, rather than $INCLUDEDIR/sys
* Add support for building native Debian packages using Docker
* Detect raw sockets.
* Use high-resolution wait on Linux for timeouts finer than a millisecond.
* Various CMake improvements.
2019-02-06 v2.3.1
------------------------------------------------------------------------
* Support more knote flags
(Credit: Dmitry Selyutin, PR #49)
* Debian packaging updates
(Credit: Matthew Newton)
2018-11-25 v2.3.0
------------------------------------------------------------------------
* kevent: refactor to remove goto statement
(Credit: Cameron Nemo)
* Multiple fixes for compilation issues with GCC 8.1
(Credit: Arran Cudbard-Bell)
* Add a monitoring thread that takes care of cleaning up closed kqueues
(Credit: Philippe Wooding)
* Multiple bug fixes for leaking descriptors in kn_delete()
(Credit: Philippe Wooding)
* Fix build errors on Linux systems that do not use glibc
(Credit: maxice8)
2017-11-26 v2.2.0
------------------------------------------------------------------------
* Fixed: the EOF flag should only be set on stream sockets with a zero length r
ead
Author: Arran Cudbard-Bell <a.cudbardb@freeradius.org>
* Fix to deal with inotify events containing filenames correctly.
Author: Arran Cudbard-Bell <a.cudbardb@freeradius.org>
* Fix to allow libpcap FDs to be used.
Author: Philippe Wooding <philippe.wooding@networkradius.com>
* Switch to CMake as the build and packaging system.
2016-07-24 v2.1.0
------------------------------------------------------------------------
* Fix an endianness issue when calling ioctl on Linux.
(Credit: Vivian Kong)
* Allow tests to be built from separate build directory.
(Credit: Chris Bailey)
* Add support for kevent64(2) timers from Darwin.
(Credit: Hubertus Franke)
* Set EPOLLONESHOT for EPOLL_CTL_ADD after knote creation.
(Credit: Ian Partridge)
* Add configure arg to disable install and build noinst ltlibrary.
(Credit: Ian Partridge)
* Allow libkqueue to be used as a submodule within another build process.
(Credit: Ian Partridge)
* Fix a build failure on Linux/AArch64 using Ubuntu 16.04.
(Credit: Galen Rhodes)
2016-02-06 v2.0.4
------------------------------------------------------------------------
* Fix incorrect boolean logic in src/linux/read.c
(Credit: marcos69, closes #5)
* Fix a build failure on mips64el.
(Credit: YunQiang Su, from Debian Bug #754376)
2014-03-09 v2.0.3
------------------------------------------------------------------------
* Fix the generation of libkqueue.pc
2014-02-23 v2.0.2
------------------------------------------------------------------------
* Switch from SVN to Git
* Switch hosting providers to Github
* Switch to autoconf/automake
2013-05-08 v2.0.1 r646
------------------------------------------------------------------------
* Improvements to the RPM package spec
(Credit: Eric Wong)
2013-04-29 v2.0 r639
------------------------------------------------------------------------
* Use ppoll(2) where possible to improve scalability.
(Credit: Eric Wong)
* Optimize kevent() when it is called with a zero timeout.
(Credit: Eric Wong)
* Avoid calling getsockopt() on file descriptors that are not sockets.
(Credit: Eric Wong)
* Call epoll_wait after linux_kevent_wait_hires()
(Credit: Eric Wong)
* Detect regular files correctly
(Credit: Eric Wong)
* Ensure that calling close() on a file descriptor will remove any
kevents that reference the descriptor. [merged from ^/branches/stable@551]
* Remove the SERIALIZE_KEVENT macro, and always protect kevent_copyin()
and kevent_copyout() with a mutex.
* Remove fine-grained locking at the knote level.
* Add a counter that increments on each each kevent() call. When printing
debug information within kevent(), display the value of the counter.
This will be helpful when debugging a multithreaded program that may have
multiple kevent() calls executing in parallel. (Credit: Julien Blache)
2010-09-18 v1.0 r344
------------------------------------------------------------------------
* Support older Linux kernels that do not have the EPOLLRDHUP flag.
* Add a portable implementation of the EVFILT_TIMER filter.
* Add Solaris to the list of supported platforms.
* Fixed the 'make rpm' target to work on CentOS 5.
* Modified the manpage to remove unimplemented features.
2010-08-05 v0.9.3 r309
------------------------------------------------------------------------
* Fix a typo in kevent_copyin() that caused EV_RECEIPT to set the
data field incorrectly in some cases.
(Credit to Julien Blache for discovering and fixing this bug)
2010-08-05 v0.9.2 r289
------------------------------------------------------------------------
* Fix some build failures on 32-bit platforms related to the debugging
codepaths being enabled by default.
2010-08-04 v0.9.1 r286
------------------------------------------------------------------------
* Prevent dumping of EVFILT_VNODE debugging information to STDOUT.
* Fix the 'make clean' target in the testsuite.
2010-08-01 v0.9 r285
------------------------------------------------------------------------
* Set kevent.data = 1 for passive sockets that have at least one pending
connection.
(Credit to Julien Blache for finding and researching this bug)
* Fix various compilation errors under Solaris.
(Credit to Joakim Johansson for testing and providing patches)
* Use the KQUEUE_DEBUG environment variable to turn on debugging output.
2010-07-21 v0.8 r264
------------------------------------------------------------------------
* Fix a bug that prevented a knote with the EV_DISPATCH flag from
being re-enabled after an event had been triggered.
(Credit to Julien Blache for finding and researching this bug)
2010-06-08 v0.7 r248
------------------------------------------------------------------------
* Add Debian packaging to the ports/ directory and improve the 'make deb'
target.
* Set the library soname version.
* Switch from -fPIC to -fpic as the default in CFLAGS.
2010-03-28 v0.6 r238
------------------------------------------------------------------------
* Experimental Linux kernel module.
* Implement knote modification for signals.
* Implement POSIX signal.c
2010-02-09 v0.5 r200
------------------------------------------------------------------------
* Prevent namespace pollution by hiding all ELF symbols except for
kqueue() and kevent().
* Add reference counting to the garbage collection mechanism so that
a kqueue object is never destroyed while multiple threads are using
it.
* Improve scalability by using red-black trees instead of linked lists.
* Refactor the internal API to promote modularity and code reuse.
Five methods are added to each filter: create, modify, delete,
enable, disable. These replace the copyin() method, which was
overly complicated.
* Remove the fine-grained locking at the filter level, and replace
it with coarse locking inside kevent(). This simplifys the locking
implementation and provides a stronger guarantee of reentrancy.
* Initial attempt at writing a Linux kernel module. It fails to
link because sys_epoll_create() and other event-related syscalls
are not available to kernelspace (?). Need to ask LKML for guidance.
* Make unit tests threadsafe and created a stresstest which runs
the unit tests in parallel.
* Use helper functions to reduce the amount of duplicate code in the
unit tests.
2009-12-26 v0.4 r133
------------------------------------------------------------------------
* Incomplete and experimental support for Solaris added.
* Lots of work on the test suite.
* Replace the buggy GC thread with an event-based alternative.
* Do not implicitly set EV_CLEAR in the EVFILT_USER filter.
* Adjust the eventlist when EV_RECEIPT causes it to be modified.
2009-11-10 v0.3 r84
------------------------------------------------------------------------
* The EVFILT_USER filter has been implemented, but needs additional
testing.
* The EVFILT_PROC filter is partially implemented on Linux, but is
currently broken.
* The unit tests have been moved to a separate subdirectory and now
function under OpenBSD 4.4 using the native kqueue(2) and kevent(2)
system calls.
* The kqueue_free() function has been removed.
* A helper thread performs garbage collection when close(2) is called
on the file descriptor returned by kqueue().
* All symbols in <sys/event.h> that are not implemented are now
undefined.
* Major internal reorganization of the source tree.
* A copy-and-paste error in vnode.c has been fixed.
* The pthreads library is now required.
2009-11-07 v0.2 r59
------------------------------------------------------------------------
* Implement EVFILT_TIMER on Linux.
* Fix another 'make install' problem reported by Mario Schwalbe.
* Do not link the test program with the pthreads library.
* pkg-config no longer requires linking with -lpthread and -lrt.
2009-11-05 v0.1 r49
------------------------------------------------------------------------
* Initial stable release.