[Author Prev][Author Next][Thread Prev][Thread Next][Author Index][Thread Index]
[Libevent-users] ANN: Libevent 2.1.1-alpha is released!
- To: libevent-users@xxxxxxxxxxxxx
- Subject: [Libevent-users] ANN: Libevent 2.1.1-alpha is released!
- From: Nick Mathewson <nickm@xxxxxxxxxxxxx>
- Date: Tue, 3 Apr 2012 20:57:50 -0400
- Delivered-to: archiver@xxxxxxxx
- Delivered-to: libevent-users-outgoing@xxxxxxxx
- Delivered-to: libevent-users@xxxxxxxx
- Delivery-date: Tue, 03 Apr 2012 20:58:02 -0400
- Dkim-signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=mime-version:sender:date:x-google-sender-auth:message-id:subject :from:to:content-type; bh=edkhCI/5CcCQpKCPANnOQKVgfpCRq83cilP429aEWO0=; b=An1OYX3tXfoggbKEBBQKVLSlrnqetTBiwV63JeSIxz8NP8pzuE2EQ8qjl1Urd7HlxX EJpvSp5yGqYcKtVacbr/YSlAMoRmvv0J28aqTwa8JyE4rPGtRkV8+LcwpKgxT10i567n 4O21Ob9Uekx18mmHg6tw+vgCXoD1fbbXBIkTacjrjvbpSBedY/jrwV4ihlnl0Sb8gsP4 PtS1bbgFansWh962TuQucq2Ul0cFuryydOVihk2Oy8P9HrSExirx3t3k3bBmvus3sHRV lKg5s2dizgP7nUXdlKcwNNLbom9/+VmPXUNDUN12dbBniZOqqFTkwQd8rRTN1khj5X7a iBdQ==
- Reply-to: libevent-users@xxxxxxxxxxxxx
- Sender: owner-libevent-users@xxxxxxxxxxxxx
Announcing Libevent-2.1.1-alpha
===============================
Libevent 2.1.1-alpha is released!
This is the first release in the Libevent 2.1 series. As the "alpha"
should tell you, this is not a stable release: you should not run it
unless you're willing to debug together. If you want a stable version
of Libevent, stick to the 2.0 series for now.
The package is available from the website, at http://libevent.org/
There are GPG signatures there too; you should probably verify them,
to make sure you get the software you think you are getting.
What's new in Libevent 2.1.1-alpha
==================================
This release is chock full of stuff. There are:
* performance improvements for most backends and platforms, and in
most data structures and function call paths in the main event loop
code, and in bufferevents and evbuffers.
* new convenience functions and flags in the main event loop code.
* handy new features for bufferevents and evbuffers.
* and more!
For explanations of what's changed, see "What's New In Libevent 2.1",
available as "whatsnew-2.1.txt" in the source distribution, or online at
https://raw.github.com/libevent/libevent/master/whatsnew-2.1.txt
The whole darn ChangeLog
========================
Libevent 2.1.1-alpha includes a number of new features and performance
improvements. The log below tries to organize them by rough area of
effect. It omits some commits which were pure bugfixes on other commits
listed below. For more detail, see the git changelogs. For more
insight, see the "whatsnew-2.1.txt" document included in the Libevent
2.1.1-alpha distribution.
Performance: Core
o Replace several TAILQ users with LIST. LIST can be a little faster than
TAILQ for cases where we don't need queue-like behavior. (f9db33d,
6494772, d313c29, 974d004)
o Disabled code to optimize the case where we reinsert an existing
timeout (e47042f, 09cbc3d)
o Remove a needless base-notify when rescheduling the first timeout (77a96fd)
o Save a needless comparison when removing/adjusting timeouts (dd5189b)
o Possible optimization: split event_queue_insert/remove into
separate functions. needs testing (efc4dc5)
o Make event_count maintenance branchless at the expense of an
extra shift. Needs benchmarking (d1cee3b)
o In the 2.1 branch, let's try out lazy gettimeofday/clock_gettime
comparison (2a83ecc)
o Optimization in event_process_active(): ignore maxcb & endtime
for highest priority events. (a9866aa Alexander Drozdov)
o Bypass event_add when using event_base_once() for a 0-sec timeout (35c5c95)
o Remove the eventqueue list and the ev_next pointers. (604569b 066775e)
Performance: Evbuffers
o Roughly 20% speed increase when line-draining a buffer using
EVBUFFER_EOL_CRLF (5dde0f0 Mina Naguib)
o Try to squeeze a little more speed out of EVBUFFER_EOL_CRLF (7b9d139)
o Fix a bug in the improved EOL_CRLF code (d927965)
o Remove a needless branch in evbuffer_drain() (d19a326)
Performance: Linux
o Infrastructure for using faster/fewer syscalls when creating
sockets (a1c042b)
o Minimize syscalls during socket creation in listener.c (7e9e289)
o Use a wrapper function to create the notification
pipe/socketpair/eventfd (ca76cd9)
o Use pipes for telling signals to main thread when possible (a35f396)
o Save syscalls when constructing listener sockets for evhttp (af6c9d8)
o Save some syscalls when creating evdns sockets (713e570)
o Save some syscalls when constructing a socket for a bufferevent (33fca62)
o Prefer epoll_create1 on Linuxen that have it (bac906c)
Performance: Epoll backend
o Use current event set rather than current pending change when
deciding whether to no-op a del (04ba27e Mike Smellie)
o Replace big chain of if/thens in epoll.c with a table lookup (8c83eb6)
o Clean up error handling in epoll_apply_one_change() a little (2d55a19)
Performance: Evport backend
o evport: use evmap_io to track fdinfo status. Should save time and
RAM. (4687ce4)
o evport: Remove a linear search over recent events when
reactivating them (0f77efe)
o evport: Use portev_user to remember fdinfo struct (276ec0e)
o evport: don't scan more events in ed_pending than needed (849a5cf)
o evport: Remove artificial low limit on max events per getn call (c04d927)
o Reenable main/many_events_slow_add for evport in 2.1 (e903db3)
Performance: Windows
o Use GetSystemTimeAsFileTime to implement gettimeofday on
win32. It's faster and more accurate than our old
approach. (b8b8aa5)
New functions and features: debugging
o Add event_enable_debug_logging() to control use of debug logs (e30a82f)
New functions and features: core
o Add event_config function to limit time/callbacks between calls
to dispatch (fd4de1e, 9fa56bd, a37a0c0, 3c63edd)
o New EVLOOP_NO_EXIT_ON_EMPTY option to keep looping even when no
events are pending (084e68f)
o Add event_base_get_npriorities() function. (ee3a4ee Alexander Drozdov)
o Make evbase_priority_init() and evbase_get_npriorities()
threadsafe (3c55b5e)
o New event_base_update_cache_time() to set cached_tv to current
time (212533e Abel Mathew)
o Add event_self_cbarg() to be used in conjunction with
event_new(). (ed36e6a Ross Lagerwall, fa931bb, 09a1906, 1338e6c,
33e43ef)
o Add a new libevent_global_shutdown() to free all globals before
exiting. (041ca00 Mark Ellzey, f98c158, 15296d0, 55e991b)
o Use getifaddrs to detect our interfaces if possible (7085a45)
o Add event_base_get_running_event() to get the event* whose cb we
are in (c5732fd, 13dad99)
New functions and features: building
o Implement --enable-gcc-hardening configure option (7550267 Sebastian Hahn)
New functions and features: evbuffers
o Add evbuffer_add_file_segment() so one fd can be used efficiently
in more than one evbuffer_add_file at a time (e72afae, c2d9884,
3f405d2, 0aad014)
o Fix windows file segment mappings (8254de7)
o Allow evbuffer_ptr_set to yield a point just after the end of the
buffer. (e6fe1da)
o Allow evbuffer_ptr to point to position 0 in an empty evbuffer
(7aeb2fd Nir Soffer)
o Set the special "not found" evbuffer_ptr consistently. (e3e97ae Nir Soffer)
o support adding buffers to other buffers non-destructively
(9d7368a Joachim Bauch)
o prevent nested multicast references, reworked locking (26041a8
Joachim Bauch)
o New EVBUFFER_EOL_NUL to read NUL-terminated strings from an
evbuffer (d7a8b36 Andrea Montefusco, 54142c9)
o Make evbuffer_file_segment_types adaptable (c6bbbf1)
o Added evbuffer_add_iovec and unit tests. (aaec5ac Mark Ellzey, 27b5398)
o Add evbuffer_copyout_from to copy data from the middle of a
buffer (27e2225)
New functions and features: bufferevents
o Allow users to set allow_dirty_shutdown (099d27d Catalin Patulea)
o Tweak allow_dirty_shutdown documentation (a44cd2b)
o Fix two issues in the allow_dirty_shutdown code. (f3b89de)
o Add a bufferevent_getcb() to find a bufferevent's current
callbacks (a650394)
o bufferevent: Add functions to set/get max_single_read/write
values. (998c813 Alexander Drozdov)
o bev_ssl: Be more specific in event callbacks. evhttp in particular gets
confused without at least one of BEV_EVENT_{READING|WRITING}. (f7eb69a
Catalin Patulea)
New functions and features: evconnlisteners
o Support TCP_DEFER_ACCEPT sockopts for listeners (5880e4a Mark Ellzey,
a270728)
o Add another caveat to the TCP_DEFER_ACCEPT documentation (a270728)
o Allow evconnlistener to be created in disabled state. (9593a33
Alexander Drozdov)
o The LEV_OPT_CLOSE_ON_EXEC flag now applies to accepted listener
sockets too (4970329)
Evhttp:
o Add new evhttp_{connection_}set_timeout_tv() functions to set
finger-grained http timeouts (6350e6c Constantine Verutin)
o Performance tweak to evhttp_parse_request_line. (aee1a97 Mark Ellzey)
o Add missing break to evhttp_parse_request_line (0fcc536)
o Add evhttp callback for bufferevent creation; this lets evhttp
support SSL. (8d3a850)
o Remove calls to deprecated bufferevent functions from evhttp.c (4d63758)
o evhttp: Add evhttp_foreach_bound_socket. (a2c48e3 Samy Al Bahra)
Build improvements:
o Add AC_USE_SYSTEM_EXTENSIONS to configure.in. Requires follow on
patches for correctness and robustness. (1fa7dbe Kevin Bowling)
o Filter '# define' statements from autoconf and generate
event-private.h (321b558 Kevin Bowling)
o Remove internal usage of _GNU_SOURCE (3b26541 Kevin Bowling)
o Eliminate a couple more manual internal _GNU_SOURCE defines (c51ef93
Kevin Bowling)
o Add AC_GNU_SOURCE to the fallback case. (ea8fa4c Kevin Bowling)
o Use a Configuration Header Template for evconfig-private.h (868f888
Kevin Bowling)
o Fix a comment warning and add evconfig-private.h to .gitignore
(f6d66bc Kevin Bowling)
o Include evconfig-private.h in internal files for great good. (0915ca0
Kevin Bowling)
o Backport libevent to vanilla Autoconf 2.59 (as used in RHEL5)
(ad03952 Kevin Bowling)
o Prefer the ./configure evconfig-private.h in MinGW, just in
case. (f964b72 Kevin Bowling)
o Shell hack for weird mkdir -p commands (fd7b5a8 Kevin Bowling)
o Add evconfig-private to remaining files (ded0a09 Kevin Bowling)
o Allow use of --enable-silent-rules for quieter compilation with
automake 1.11 (f1f8514 Dave Hart)
o Use "_WIN32", not WIN32: it's standard and we don't need to fake it
(9f560b)
o In configure, test for _WIN32 not WIN32. (85078b1 Peter Rosin)
o Do not define WIN32 in Makefile.nmake (d41f3ea Peter Rosin)
o Provide the autoconf m4 macros for the new OpenSSL via pkg-config
stuff. (674dc3d Harlan Stenn)
o Use pkg-config (if available) to handle OpenSSL. (1c63860 Harlan Stenn)
o We need AM_CPPFLAGS when compiling bufferevent_openssl.c (6d2613b
Harlan Stenn)
o Fix OSX build: $(OPENSSL_INCS) needs to be after
$(AM_CPPFLAGS). (46f1769 Zack Weinberg)
o Make gcc warnings on by default, and --enable-gcc-warnings only add
-Werror (d46517e Sebastian Hahn)
o Split up extra-long AC_CHECK_FUNCS/HEADERS lines in configure.in (88a30ad)
o Move libevent 1.x headers to include/, to put all public headers in
one place. (bbea8d6)
o Put #ifdef around some files to support alternate build
systems. (76d4c92 Ross Lagerwall)
o Also make win32select.c conditional for IDE users (bf2c5a7)
Debugging:
o Add a magic number to debug_locks to better catch lock-coding
errors. (b4a29c0 Dave Hart)
o munge the debug_lock signature before freeing it: it might help us
catch use-after-free (f28084d)
o Added --enable-event-debugging in configure (bc7b4e4, a9c2c9a Mark Ellzey)
o Debug addition for printing usec on TIMEOUT debugging. (ac43ce0
Mark Ellzey)
o Added usec debug in another area for debug (3baab0d Mark Ellzey)
o added timeout debug logs to include event ptr. (4b7d298 Mark Ellzey)
o more event dbg updates (6727543 Mark Ellzey)
o Clarify event_enable_debug_logging a little (6207826)
o Make --enable-verbose-debug option match its help text (10c3450)
o Add argument checks to some memory functions in `event.c'. (c8953d1
Mansour Moufid)
Testing:
o More abstraction in test.sh (cd74c4e)
o Add failing test for evbuffer_search_range. (8e26154 Nir Soffer)
o Tweaks to return types with end-of-buf ptrs (9ab8ab8)
o Add an (internal) usleep function for use by unit tests (f25d9d3)
o Synchronize with upstream tinytest (6c81be7)
o Make test-changelist faster (7622d26)
o Reduce the timeout in the main/fork test. (ab14f7c)
o New evhttp function to adjust initial retry timeout (350a3c4)
o Make regression tests run over 3x faster. (67a1763)
o Use test_timeval_diff_eq more consistently (b77b43f)
o Allow more slop in deferred_cb_skew test; freebsd needs it (b9f7e5f)
o When including an -internal.h header outside the main tree, do so
early (95e2455)
o Add a new test: test-fdleak which tests for fd leaks by creating many
sockets. (2ef9278 Ross Lagerwall, f7af194, 1c4288f, etc)
o Add a unit test for event_base_dump_events() (7afe48a, 8d08cce)
o Test more bufferevent_ratelim features (c24f91a)
Documentation:
o Improve evbuffer_ptr documentation (261ba63)
o added comments to describe refcounting of multicast chains (ba24f61
Joachim Bauch)
o Add doxygen for event_base_dump_events (cad5753)
OSX:
o Use "unlimited select" on OSX so that we can have more than
FD_SETSIZE fds (1fb5cc6)
KQueue:
o Use SIG_IGN instead of a do-nothing handler for signal events with
kqueue (148458e Zack Weinberg)
evprc:
o event_rpcgen.py now prints status information to stdout and errors to
stderr. (ffb0ba0 Ross Lagerwall)
Code improvement and refactoring:
o Make event_reinit() more robust and maintainable (272033e)
o Restore fast-path event_reinit() for slower backends (2c4b5de)
o Check changelist as part of checking representational integrity (39b3f38)
o Fix a compile warning in event_reinit (e4a56ed Sebastian Hahn)
o Refactor the functions that run over every event. (c89b4e6)
o Remove the last vestiges of _EVENT_USE_EVENTLIST (a3cec90)
o Make event-config.h depend on Makefile.am (2958a5c)
Build fixes:
o Don't do clang version detection when disabling some flags (083296b
Sebastian Hahn)
C standards conformance:
o Check for NULL return on win32 mm_calloc, and set ENOMEM. (af7ba69)
o Convert event-config.h macros to avoid reserved identifiers (68120d9)
o Generate event-config.h using the correct macros. (f82c57e)
o Convert include-guard macro convention to avoid reserved identifiers
(3f8c7cd)
o Make event_rpcgen.py output conform to identifier conventions (372bff1)
o Stop referring to an obsolete include guard in bench_http.h (5c0f7e0)
o Make the generated event-config.h use correct include guards (639383a)
o Fix all identifiers with names beginning with underscore. (cb9da0b)
o Make event_rpcgen.py output conform to identifier conventions, more
(bcefd24)
o Fix some problems introduced by automated identifier cleanup script
(c963534)
o Have all visible internal function names end with an underscore. (8ac3c4c)
o Apply the naming convention to our EVUTIL_IS* functions (c7848fa)
o Clean up lingering _identifiers. (946b584)
o Fix doxygen to use new macro conventions (da455e9)
Bugfixes:
o Do not use system EAI/AI values if we are not using the system
getaddrinfo. (7bcac07)
Sample Code:
o Fix up sample/event-test.c to use newer interfaces and make it
actually work. (19bab4f Ross Lagerwall)
o On Unix, remove event.fifo left by sample/event-test.c. (c0dacd2 Ross
Lagerwall)
o Rename event-test.c to event-read-fifo.c. (a5b370a Ross Lagerwall)
o event-read-fifo: Use EV_PERSIST appropriately (24dab0b)
Plans for Libevent 2.1
======================
I plan to put out Libevent 2.1 alpha releases every month or so, and
then declare a feature-freeze for Libevent 2.1 in June or July. (Or
sooner, if everything goes swimmingly.) There are lots of features and
patches I'd like to add before then, but I find that without a deadline,
I have a hard time actually declaring a freeze and not telling myself
"one more feature!"
Some features I'd _like_ to get done in 2.1 are:
* UDP bufferevents.
* A better solution than "deferred callbacks" to avoid callback
circularity.
* A solution to the openssl-bufferevent deadlock issue.
* An improved win32 backend, based on chrisd's hybrid-select work.
* signalfd support on linux
* EVFILT_USER support on kqueue platforms
* Drop-in support for better resolvers.
* An NSPR-backed bufferevent implementation for people who prefer
their TLS to be NSS-flavored.
But of course, any one of these might have to wait if it isn't done by
the merge deadline.
Now that Libevent 2.1 is in alpha, I'm going to continue taking bugfix
patches for 2.0, but I'm going to be even more strict about what counts
as a bugfix.
I expect Libevent 2.1 to be much less disruptive than Libevent 2.0 for
people who want to upgrade. Nevertheless, I'm going to continue
supporting 2.0 for a good while after 2.1 becomes stable.
Acknowledgments
===============
Thanks to everybody who helped with code, bug reports, and suggestions,
including but not limited to:
Samy Al Bahra
Jacob Appelbaum
Joachim Bauch
Gilad Benjamini
Kevin Bowling
Ralph Castain
Alexander Drozdov
Mark Ellzey
Sebastian Hahn
Dave Hart
Michael Herf
Ross Lagerwall
Graham Leggett
Abel Mathew
Andrea Montefusco
Mansour Moufid
Mina Naguib
Linus Nordberg
Catalin Patulea
Amarin Phaosawasdi
Peter Rosin
Mike Smellie
Nir Soffer
Harlan Stenn
Constantine Verutin
Zack Weinberg
***********************************************************************
To unsubscribe, send an e-mail to majordomo@xxxxxxxxxxxxx with
unsubscribe libevent-users in the body.