File: ChangeLog.md

package info (click to toggle)
libuev 2.4.1-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 1,944 kB
  • sloc: sh: 4,665; ansic: 1,428; makefile: 102
file content (498 lines) | stat: -rw-r--r-- 16,876 bytes parent folder | download
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
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
Change Log
==========

All notable changes to the project are documented in this file.


[v2.4.1][] - 2024-01-04
-----------------------

### Changes
- Update README with list of moden Linux APIs used

### Fixes
- Fix #27: possible buffer overrun in `uev_run()`, found by Steve Palmer


[v2.4.0][] - 2021-10-03
-----------------------

Please note, this release is a major ABI bump due to changes in `uev_t`
which requires recompiling all programs that use libuEv.

Also, libuEv is built for 64 bit `time_t`, this means all applications
that link with libuEv also must be built with the same build flags.
This applies in particular to systems with GLIBC v2.34, which now
require applications to add the following to their `CPPFLAGS`:

    CPPFLAGS += -D_TIME_BITS=64 -D_FILE_OFFSET_BITS=64

Applications that use `pkg-config` will get these extra flags from the
`libuev.pc` file in the distribution archive.


### Changes
- More examples added for fork + signals + timer
- Add `struct signalfd_siginfo` to `uev_t`, valid for signal watchers.
  Now more metadata is available to signal callbacks

### Fixes
- Fix #24: Replace obsolete autotools macro, by Otto Urpelainen
- Fix #25: GLIBC v2.34 require `-D_FILE_OFFSET_BITS=64` for applications
  and libraries that want a 64-bit `time_t`.  Affects library and test
  programs used for `make check`, as well as all other applications that
  link with libuEv, so the `libuev.pc` file is also updated
- Fix error handling in callbacks in examples


[v2.3.2][] - 2021-02-12
-----------------------

### Changes
- Copyright updates, including LICENSE file, year + author last name
- Add tar.gz archives to distribution
- Enable .sha256 checksums for all tarballs

### Fixes
- Debian packaging fixes only


[v2.3.1][] - 2020-02-22
-----------------------

### Fixes

- Debian packaging fixes only


[v2.3.0][] - 2019-04-06
-----------------------

### Changes

- Support for Linux eventfd, `uev_event_*()` see [API.md][] for details


[v2.2.0][] - 2018-10-04
-----------------------

**NOTE:** You now have to explicitly include `sys/queue.h`, or provide a
          local version of `queue.h`, if your application depends on it.

### Changes
- Replaced BSD `queue.h` doubly-linked lst API with own implementation.
  Making libuEv stand-alone, no longer imposing any particular version
  of `queue.h` on the user
- Enforce `-std=gnu11` to unlock `typeof()` in older GCC versions
- Code cleanup

### Fixes
- Fix missing header deps. in `Makefile.am`, library did not rebuild
  properly if any of the local header files were changed


[v2.1.3][] - 2018-09-06
-----------------------

### Changes
- Update joystick example, use first device, `/dev/input/js0`
- Minor refactor of `uev_exit()`, use `_SAFE` macros to traverse
  list of watchers instead of `while()`
- New API test to verify that `uev_exit()` terminates properly
- Make `uev_signal_stop()` idempotent

### Fixes
- Let `uev_timer_stop()` call `close()` on the timerfd directly, do not
  call `uev_timer_set()` since that may cause lockups or hangs


[v2.1.2][] - 2018-02-27
-----------------------

### Changes
- Minor refactor of event loop after fixing the nasty use-after-free bug
  in v2.1.1.  Code can now be collapsed and noticeably simplified

### Fixes
- Issue #17: Check if `AM_PROG_AR` macro exists before calling it, fixes
  problem building libuEv on systems with older autoconf + automake.
  Patch by Markus Svilans
- Fix minor issue with unit tests, return result of test not event loop


[v2.1.1][] - 2018-01-28
-----------------------

### Fixes
- Fix use after free in main event loop if watcher deletes itself in
  the callback.  I.e., the callback must be the last action for the
  watcher in the event loop.
- Doc timer example fix by @tisyang
- Doc timer updates, non-zero timeout required


[v2.1.0][] - 2017-11-14
-----------------------

### Changes
- Remove event loop error tracking used to trigger a `epoll_create1()`
  at a certain error threshold.  This tracking was first introduced in
  [v1.1.0][], triggered by spurious `EPOLLERR` on I/O watchers
- Unconditionally stop I/O watchers that return `EPOLLERR` or `EPOLLHUP`
  it is up to the watcher callback to clear the error and/or `read()`
  the last few bytes from the descriptor.  HUP usally means EOF, or that
  the remote end of a stream or pipe closed, this may also be signaled
  by `read()` returning zero
- Add missing `--enable-examples` to `configure` script
- Update documentation, both [README.md][] and [API.md][]

### Fixes
- Properly stop and de-register signal and cron/timer watchers from the
  epoll socket in case of errors, problem introduced in [v2.0.0][]
- Mark watcher file descriptor as unintialized on internal error
- Fix double-close of cron/timer watchers.  Problem triggered when the
  timer expires and calls `uev_exit()`, which stops all watchers.  When
  the timer callback returns another call to stop the watcher triggered
  the double `close()`
- Fix unit test's error handling in watcher callbacks, for reference
- Fix use-before-set in cronrun unit test
- Make sure to restart unit test's I/O watchers on `UEV_ERROR`
- Make sure to restart example I/O watchers on `UEV_ERROR`
- Properly check for `UEV_HUP` in unit tests and examples


[v2.0.0][] - 2017-11-11
-----------------------

Beware, this is a major release, introducing incompatible changes to the
failure modes of `uev_run()` and watcher callbacks.  Most users will most
likely not notice any difference, but please read on.

### Changes
- `uev_run()` no longer exits the main event loop if an unrecoverable
  error with a watcher occurs.  Instead, the watcher is disabled and the
  callback is run one last time with `events` set to `UEV_ERROR`
- Watcher callbacks must handle `UEV_ERROR` conditions.  This pertains
  in particular to signal and timer watchers
- Examples and API docs updated with the new failure modes


[v1.6.0][] - 2017-09-18
-----------------------

### Changes
- Support for edge triggered and oneshot event types
- Add `make package` build target to trigger a `.deb` package build
- Support 64 bit `time_t` on 32 bit GLIBC systems

### Fixes
- `bench.c`: Use `signal.h`, not non-standard `sys/signal.h`


[v1.5.2][] - 2016-11-27
-----------------------

### Fixes
- Fix build regression in v1.5.1


[v1.5.1][] - 2016-11-27
-----------------------

### Changes
- Add support for checking if a watcher is active.
- Refactor unit testing framework


[v1.5.0][] - 2016-10-30
-----------------------

### Changes
- Add support for absolute timers with the `uev_cron_*()` API.
- Update build & install instructions in [README.md][]

### Fixes
- Fix `uev_timer_set()` so that it returns error in case the underlying
  Linux timerfd API fails.


[v1.4.2][] - 2016-06-25
-----------------------

### Changes
- Add range checks for `period` and `timeout` to `uev_timer_init()` and
  `uev_timer_set()`.  If either on is `< 0` libuEv now return `ERANGE`.


[v1.4.1][] - 2016-04-22
-----------------------

### Changes
- Add some `pkg-config` integration tips for developers using libuEv
  with GNU autotools in their projects.

### Fixes
- Add missing `SFD_CLOEXEC` and `TFD_CLOEXEC` to signal and timer file
  descriptors.  This prevents these file descriptors from "leaking" into
  sub-processes of the parent thread.  The kernel will atomically close
  these descriptors for forked-off children calling the exec*() family
  of syscalls.
- Minor coding style fixes and simplification of build scripts.


[v1.4.0][] - 2016-03-22
-----------------------

This release changes the header file namespace, which was silently
introduced in [v1.2.1][].  Apologies for any problems this may cause!

### Changes
- Change namespace for header files: `libuev/` to `uev/`, e.g. using
  `pkg-config` your C program must now `#include <uev/uev.h>`
- Support for `EPOLLPRI` events for I/O watchers, thanks to Markus Svilans
- Simplified joystick example
- Updated [README.md][] slightly


[v1.3.1][] - 2016-02-02
-----------------------

### Fixes
- Remove symlinks to Markdown files from GIT
- Distribute and install Markdown files: [README.md][], etc.


[v1.3.0][] - 2016-01-22
-----------------------

### Changes
- Change to GNU configure and build system
- Default optimization is now `-O2`, not `-Os`, which can be a bit
  unpredictable with some cross compiler toolchains.  `-O2` is the
  tried and tested path, and default in autotools
- Added `-Wextra` to the previous `-W -Wall`, drop `-Werror`
  which is supposed to be used by maintainer(s) only.


[v1.2.4][] - 2015-11-23
-----------------------

### Fixes

- Do not allow `VERSION` to be overloaded by build system.
- Make sure we don't inherit `LDFLAGS` from environment.


[v1.2.3][] - 2015-09-17
-----------------------

Very minor release.

### Changes
- [README.md][] updates, mostly cleanup and readability improvements
- `make test` now runs the test case, on behalf of Travis-CI
- Renamed CHANGELOG.md to [ChangeLog.md][]
- Dropped [TODO.md][] from distribution archives, only for devs

### Fixes
- Lots of Markdown syntax fixes in both [README.md][] and ChangeLog
- Silence annoying warning from newer GNU ar in Ubuntu 15.10


[v1.2.2][] - 2015-08-30
-----------------------

Minor bugfix release.

### Changes
- The `ifdef STATIC` in the Makefile has been removed.  Now both the
  .a and .so libraries are built.  The user may then select what to
  install.  This is a change for convenience when using libuEv from
  a GNU Configure & Build based project.

### Fixes
- Fix odd data ordering issue on Debian Jessie in new `uev_private_t`
- Fix issue #6: Segfault when stopping timer before calling `uev_exit()`


[v1.2.1][] - 2015-07-02
-----------------------

### Changes
- Private data members in `uev.h` have now been moved to a new file
  called `private.h`.  This will hopefully make it easier to understand
  what a user of libuEv is allowed to play around with.  Thanks to @vonj
  for the discussions around this!
- All builds of libuEv now default to use `-fPIC`, this bloats the code
  slightly, but ensures that linking works for all use cases, withouth
  introducing unnecessary complexity.

### Fixes
- Fix install/uninstall Makefile recipes so they work for both static
  and dynamic builds.  Also, make sure to install all required headers.
- Jakob Eriksson noticed that `O_CLOEXEC` does not exist in the Debian 6
  EGLIBC, but `EPOLL_CLOEXEC` does, and is also what `epoll_create1()`
  should use.  Thank you @vonj!


[v1.2.0][] - 2015-06-09
-----------------------

API change in event callbacks and fix timers that never start.

### Changes
- Remove first `uev_ctx_t *` argument in callbacks, incompatible API
  change!  Please update all your callbacks if you upgrade.

### Fixes
- Fix timers that accidentally broke in [v1.1.0][].
- Fixes to `bench.c`, it now actually listens to the pipe/socket.


[v1.1.0][] - 2015-03-04
-----------------------

Massively improved error handling.

### Changes
- Handle case when user closes a descriptor *before* stopping a watcher.
- Handle `EPOLLHUP` and `EPOLLERR`.  Restart `epoll(7)` descriptor and
  all watchers when an error count reaches a MAX value -- handles stale
  descriptors or cases when kernel does not notice updated descriptors.
- Return error when stopping a watcher fails.
- Update [README.md][] with new `uev_*_start()` functions.
- Bump dev version to 1.1 due to the number of significant changes.

### Fixes
- Remove `test.c` from `DISTFILES` in `Makefile`.  You need the
  comeplete sources to build the examples now.  Thanks to @karasz for
  the heads up on this and the musl libc issue with missing `queue.h`!
- Fix broken link to [v1.0.5][] in this file.


[v1.0.5][] - 2015-02-15
-----------------------

### Changes
- Add `uev_*_start()` functions.
- Add slightly odd `examples/signal.c` example that utilises `fork()`
  and causes segfault in child.
- Renamed `main.c` to `uev.c`
- Move examples to `examples/` subdirectory
- Simplify automatic dependency calculation
- Add [TODO.md][] for wishlist items
- Add [CHANGELOG.md][ChangeLog.md], to align with http://keepachangelog.com
- Further updates to [README.md][]


[v1.0.4][] - 2015-01-24
-----------------------

Minor documentation and build fixes.

Release mainly targeted for [Finit development](https://github.com/troglobit/finit/).

### Changes
* `test.c` has been simplified/clarified
* Further updates to [README.md][]
* Minor update to Makefile, change how build progress is echoed


[v1.0.3][] - 2015-01-24
-----------------------

This is a very minor release, with a strong focus on documentation. 

### Changes
- [README.md][], massively updated
- API documentation, updated
- Travis CI integration added, https://travis-ci.org/troglobit/libuev
- Coverity Scan integration, https://scan.coverity.com/projects/3846
- Clang scan-build support added


[v1.0.2][] - 2015-01-07
-----------------------

### Fixes
- Fix broken `make dist` target in [v1.0.1][].


[v1.0.1][] - 2015-01-07
-----------------------

### Changes
- Cleanup and rewrite of [README.md][] after first audit by @vonj
- Added API and example section to [README.md][]
- New [joystick.c][] example added
- `main.c:uev_run()`: Document mysterious flags parameter


[v1.0.0][] - 2013-08-06
-----------------------

First release in the new guise and API.

### Changes
- Add support for timers, using `timerfd_*()` and `epoll()` API's
- Add support for signals using `signalfd()` API
- Convert to use BSD `sys/queue.h` API in GLIBC instead of homebrew
  linked list implementation
- Massive changes to code structure, API naming
- Reindent to use Linux KNF
- Change library name to libuev
- Lua support removed
- Make sure to state the [MIT license][] correctly in all files
- Import [Niels Provos][]' `bench.c`, the [libev version][]


v0.0.1 - 2012-03-17
-------------------

[Initial announcement][] of [libuevent][] by [Flemming Madsen][] to the
Lua users mailing list.


[UNRELEASED]: https://github.com/troglobit/libuev/compare/v2.4.0...HEAD
[v2.4.1]: https://github.com/troglobit/libuev/compare/v2.4.0...v2.4.1
[v2.4.0]: https://github.com/troglobit/libuev/compare/v2.3.2...v2.4.0
[v2.3.2]: https://github.com/troglobit/libuev/compare/v2.3.1...v2.3.2
[v2.3.1]: https://github.com/troglobit/libuev/compare/v2.3.0...v2.3.1
[v2.3.0]: https://github.com/troglobit/libuev/compare/v2.2.0...v2.3.0
[v2.2.0]: https://github.com/troglobit/libuev/compare/v2.1.3...v2.2.0
[v2.1.3]: https://github.com/troglobit/libuev/compare/v2.1.2...v2.1.3
[v2.1.2]: https://github.com/troglobit/libuev/compare/v2.1.1...v2.1.2
[v2.1.1]: https://github.com/troglobit/libuev/compare/v2.1.0...v2.1.1
[v2.1.0]: https://github.com/troglobit/libuev/compare/v2.0.0...v2.1.0
[v2.0.0]: https://github.com/troglobit/libuev/compare/v1.6.0...v2.0.0
[v1.6.0]: https://github.com/troglobit/libuev/compare/v1.5.2...v1.6.0
[v1.5.2]: https://github.com/troglobit/libuev/compare/v1.5.1...v1.5.2
[v1.5.1]: https://github.com/troglobit/libuev/compare/v1.5.0...v1.5.1
[v1.5.0]: https://github.com/troglobit/libuev/compare/v1.4.2...v1.5.0
[v1.4.2]: https://github.com/troglobit/libuev/compare/v1.4.1...v1.4.2
[v1.4.1]: https://github.com/troglobit/libuev/compare/v1.4.0...v1.4.1
[v1.4.0]: https://github.com/troglobit/libuev/compare/v1.3.1...v1.4.0
[v1.3.1]: https://github.com/troglobit/libuev/compare/v1.3.0...v1.3.1
[v1.3.0]: https://github.com/troglobit/libuev/compare/v1.2.3...v1.3.0
[v1.2.3]: https://github.com/troglobit/libuev/compare/v1.2.2...v1.2.3
[v1.2.2]: https://github.com/troglobit/libuev/compare/v1.2.1...v1.2.2
[v1.2.1]: https://github.com/troglobit/libuev/compare/v1.2.0...v1.2.1
[v1.2.0]: https://github.com/troglobit/libuev/compare/v1.1.0...v1.2.0
[v1.1.0]: https://github.com/troglobit/libuev/compare/v1.0.5...v1.1.0
[v1.0.5]: https://github.com/troglobit/libuev/compare/v1.0.4...v1.0.5
[v1.0.4]: https://github.com/troglobit/libuev/compare/v1.0.3...v1.0.4
[v1.0.3]: https://github.com/troglobit/libuev/compare/v1.0.2...v1.0.3
[v1.0.2]: https://github.com/troglobit/libuev/compare/v1.0.1...v1.0.2
[v1.0.1]: https://github.com/troglobit/libuev/compare/v1.0.0...v1.0.1
[v1.0.0]: https://github.com/troglobit/libuev/compare/v0.0.1...v1.0.0
[TODO.md]: https://github.com/troglobit/libuev/blob/master/TODO.md
[API.md]: https://github.com/troglobit/libuev/blob/master/API.md
[README.md]: https://github.com/troglobit/libuev/blob/master/README.md
[ChangeLog.md]: https://github.com/troglobit/libuev/blob/master/ChangeLog.md
[joystick.c]: https://github.com/troglobit/libuev/blob/master/joystick.c
[Niels Provos]: http://en.wikipedia.org/wiki/Niels_Provos
[MIT license]: http://en.wikipedia.org/wiki/MIT_License
[libev version]: http://libev.schmorp.de/bench.c
[libuevent]: https://code.google.com/p/libuevent/
[Flemming Madsen]: http://www.madsensoft.dk
[Initial announcement]: http://lua-users.org/lists/lua-l/2012-03/msg00510.html