Files
libuev/ChangeLog.md
T
2017-11-14 13:47:00 +01:00

363 lines
12 KiB
Markdown

Change Log
==========
All notable changes to the project are documented in this file.
[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.1.0...HEAD
[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