libµEv 2.4.0

Simple asynchronous event loop for Linux. It wraps the Linux epoll() family of APIs. It is similar to the more established libevent, libev and the venerable Xt(3) event loop. The µ in the name refers to both its limited feature set and the size impact of the library.

Tags event library linux
License MITL
State stable

Recent Releases

2.4.005 Oct 2021 10:05 minor feature: 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. Replace obsolete autotools macro, by Otto Urpelainen. 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. error handling in callbacks in examples.
2.3.213 Feb 2021 03:16 minor feature: Copyright updates, including LICENSE file, year + author last name. Add tar.gz archives to distribution. Enable.sha256 checksums for all tarballs. Debian packaging only.
2.3.006 Apr 2019 11:45 major feature: Support for Linux eventfd, concluding full support for the epoll family of APIs.
2.2.005 Oct 2018 08:25 minor feature: 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. missing header deps. in Makefile.am, library did not rebuild properly if any of the local header files were changed.
2.1.307 Sep 2018 03:17 minor feature: 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. Let uev_timer_stop() call () on the timerfd directly, do not call uev_timer_set() since that may cause lockups or hangs.
2.1.227 Feb 2018 06:05 minor feature: Minor refactor of event loop after ing the nasty use-after-free in v2.1.1. Code can now be collapsed and noticeably simplified. Check if AM_PROG_AR macro exists before calling it, problem building libuEv on systems with older autoconf + automake. Patch by Markus Svilans. Minor with unit tests, return result of test not event loop.
2.1.129 Jan 2018 10:25 minor feature: 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 by @tisyang. Doc timer updates, non-zero timeout required.
2.1.015 Nov 2017 16:05 minor feature: 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, this may also be signaled by read() returning zero. Add missing --enable-examples to configure script. Update documentation, both README.md and API.md. 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. double-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 (). unit test's error handling in watcher callbacks, for reference. 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.
2.0.012 Nov 2017 03:18 minor feature: 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.
1.6.023 Sep 2017 14:05 minor feature: 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. bench.c: Use signal.h, not non-standard sys/signal.h.
1.5.031 Oct 2016 15:05 minor feature: Add support for absolute timers with the uev_cron_*() API. Update build install instructions in README. uev_timer_set() so that it returns error in case the underlying Linux timerfd API fails.
1.4.227 Jun 2016 08:25 minor feature: Update ChangeLog and bump version for v1.4.2 release Signed-off-by: Joachim Nilsson lt;troglobit@gmail.com gt;.
1.4.126 Apr 2016 10:25 minor feature: Add some pkg-config integration tips for developers using libuEv With GNU autotools in their projects. 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 these descriptors for forked-off children calling the exec*() family of syscalls. Minor coding style and simplification of build scripts.
1.4.024 Mar 2016 13:25 minor feature: Change namespace for header files: libuev/ to uev/, e.g. using pkg-config your C program must now #include . Support for EPOLLPRI events for I/O watchers, thanks to Markus Svilans. Simplified joystick example. Updated README slightly.
1.3.022 Jan 2016 06:25 minor feature: 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.
1.2.424 Nov 2015 09:05 minor feature: Do not allow VERSION to be overloaded by build system. Make sure we don't inherit LDFLAGS from environment.
1.2.318 Sep 2015 22:45 minor feature: 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. Lots of Markdown syntax in both README and ChangeLog. Silence annoying warning from newer GNU ar in Ubuntu 15.10.
1.2.231 Aug 2015 13:25 minor feature: 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. Odd data ordering on Debian Jessie in new uev_private_t . Segfault when stopping timer before calling uev_exit().
1.2.104 Jul 2015 23:05 cleanup: 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.
1.2.010 Jun 2015 21:25 minor feature: Remove first uev_ctx_t argument in callbacks, incompatible API change! Please update all your callbacks if you upgrade.
1.1.005 Mar 2015 11:25 minor feature: 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. . 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.
1.0.516 Feb 2015 07:05 minor feature: 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 , attempt to align with http://keepachangelog.com Further updates to README.md
1.0.425 Jan 2015 03:15 minor feature: test.c has been simplified/clarified README has seen further updates Makefile had a minor change in how build progress is echoed.
1.0.307 Jan 2015 01:24 minor feature: This is a very minor release of a stable library, the focus of the release is on on documentation. * README.md, massively updated * API documentation, updated * New joystick.c example added * Travis CI integration added, https://travis-ci.org/troglobit/libuev * Coverity Scan integration, https://scan.coverity.com/projects/3846 * Clang scan-build support added