Change Log
January 4, 2024 ยท View on GitHub
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_siginfotouev_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=64for applications and libraries that want a 64-bittime_t. Affects library and test programs used formake check, as well as all other applications that link with libuEv, so thelibuev.pcfile 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.hdoubly-linked lst API with own implementation. Making libuEv stand-alone, no longer imposing any particular version ofqueue.hon the user - Enforce
-std=gnu11to unlocktypeof()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_SAFEmacros to traverse list of watchers instead ofwhile() - New API test to verify that
uev_exit()terminates properly - Make
uev_signal_stop()idempotent
Fixes
- Let
uev_timer_stop()callclose()on the timerfd directly, do not calluev_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_ARmacro 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 spuriousEPOLLERRon I/O watchers - Unconditionally stop I/O watchers that return
EPOLLERRorEPOLLHUPit is up to the watcher callback to clear the error and/orread()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 byread()returning zero - Add missing
--enable-examplestoconfigurescript - 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 doubleclose() - 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_HUPin 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 witheventsset toUEV_ERROR- Watcher callbacks must handle
UEV_ERRORconditions. 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 packagebuild target to trigger a.debpackage build - Support 64 bit
time_ton 32 bit GLIBC systems
Fixes
bench.c: Usesignal.h, not non-standardsys/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
periodandtimeouttouev_timer_init()anduev_timer_set(). If either on is< 0libuEv now returnERANGE.
v1.4.1 - 2016-04-22
Changes
- Add some
pkg-configintegration tips for developers using libuEv with GNU autotools in their projects.
Fixes
- Add missing
SFD_CLOEXECandTFD_CLOEXECto 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/touev/, e.g. usingpkg-configyour C program must now#include <uev/uev.h> - Support for
EPOLLPRIevents 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.-O2is the tried and tested path, and default in autotools - Added
-Wextrato the previous-W -Wall, drop-Werrorwhich is supposed to be used by maintainer(s) only.
[v1.2.4][] - 2015-11-23
Fixes
- Do not allow
VERSIONto be overloaded by build system. - Make sure we don't inherit
LDFLAGSfrom environment.
v1.2.3 - 2015-09-17
Very minor release.
Changes
- README.md updates, mostly cleanup and readability improvements
make testnow 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 STATICin 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.hhave now been moved to a new file calledprivate.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_CLOEXECdoes not exist in the Debian 6 EGLIBC, butEPOLL_CLOEXECdoes, and is also whatepoll_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
EPOLLHUPandEPOLLERR. Restartepoll(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.cfromDISTFILESinMakefile. 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 missingqueue.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.cexample that utilisesfork()and causes segfault in child. - Renamed
main.ctouev.c - Move examples to
examples/subdirectory - Simplify automatic dependency calculation
- Add TODO.md for wishlist items
- Add 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.
Changes
test.chas 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 disttarget 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_*()andepoll()API's - Add support for signals using
signalfd()API - Convert to use BSD
sys/queue.hAPI 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.