[Author Prev][Author Next][Thread Prev][Thread Next][Author Index][Thread Index]

[Libevent-users] ANN: Libevent 2.1.2-alpha is released!



Announcing Libevent-2.1.2-alpha
===============================

Libevent 2.1.2-alpha is released!

This is the second 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.2-alpha
==================================

This release is chock full of stuff on top of 2.1.1-alpha. The biggest
changes are:

   * Various new functions in the core, evbuffer, and bufferevent APIs
   * Even more backends can now use monotonic timers, thanks to a new
     (internal) portable monotonic timer implementation.
   * Updated autotools build infrastructure for faster builds.
   * More reliable unit tests.
   * Major refactoring of the internal event-callback code, especially
     surrounding deferred_cb.
   * Faster notification with kqueue platforms supporting EVFILT_USER.
   * Faster timers by default on Linux; more precise timers now available on
     Linux.

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.2-alpha includes more portable for monotonic timers,
 refactors much of Libevent's internal and external infrastructure,
 closes some longstanding gaps in the interface, makde other
 improvements.  Ths log below tries to organize features by rough area of
 effect.  It omits a few 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.2-alpha distribution.

 Libevent 2.1.2-alpha also includes all changes made in 2.0.19-stable
 through 2.0.21-stable inclusive.

 Performance (core):
   o Replace pipe-based notification with EVFILT_USER where possible. This
     should make multithreaded programs on OSX and *BSD alert the main thread a
     little faster. (53a07fe)
   o Make th_base_lock nonrecursive. (9cd5acb)

 New/Changed API Functions:
   o New event_get_priority() function to return an event's priority (f90e255)
   o Add a bufferevent_get_priority() function (bd39554)
   o Add an event_base_loopcontinue() to tell Libevent to rescan for more
     events right away (7d6aa5e)
   o Add a new callback to get called on evbuffer_file_segment free
     (e9f8feb yangacer, 64051b9)
   o Expose event_base_foreach_event() as a public API. (84fd6d7 Roman
      Puls, 232055e, ffe1643)
   o Add an event_remove_timer() to remove timer on an event without
     deleting it (e3b2e08)
   o Make bufferevent_set_timeouts(bev, NULL, NULL) have plausible
     semantics (9dee36b)
   o Rename event_enable_lock_debuging() to ..._debugging(). (The old name
     should still work.) (07e132e)
   o Add missing implementation for event_enable_debug_logging (3b3e21d)

 PORTABLE MONOTONIC TIMERS:

   Libevent 2.1.2 includes internal support for monotonic timers on
   (nearly) all supported platforms, including Windows, and OSX.  Libevent
   applications should now be more resilient to jumps forwards or backwards
   in the system clock.  Also, on Linux systems with epoll, we now
   optionally support microsecond-level timeouts (whereas epoll only
   supports millisecond-precision timeouts).

   o Use mach_absolute_time() for monotonic clock support on OSX. (b8fd6f9)
   o Do not track use_monotonic field when is no monotonic clock (cb653a0)
   o EVENT_BASE_FLAG_PRECISE_TIMER indicates we want fine timer precision
     (ddd69d3)
   o On Linux, use CLOCK_MONOTONIC_COARSE by default (55780a7)
   o Implement a GetTickCount-based monotonic timer for Windows (d5e1d5a)
   o Refactor monotonic timer handling into a new type and set of
     functions; add a gettimeofday-based ratcheting implementation (f5e4eb0)
   o Add EVENT_PRECISE_TIMER environment var for selecting precise-but-slow
     timer (a2598ec)
   o Implement fast/precise monotonic clocks on Windows (2c47045)
   o Simple unit tests for monotonic timers (630f077)
   o Improve the monotonic-time unit test: make it check the step size (7428c78)
   o When PRECISE_TIMERS is set with epoll, use timerfd for microsecond
     precision (26c7582)
   o Split out time-related evutil functions into a new evutil_time.c (c419485)
   o Split out time-related prototypes into time-internal.h (71bca50)
   o Add evutil_time.obj to Makefile.nmake (0ba0683)
   o Avoid giving a spurious warning when timerfd support is unavailable
     (1aaf9f0 Dave Hart)
   o Make test_evutil_monotonic a little more tolerant (def3b83)
   o Avoid unused-var warning on systems with clock_gettime but without
     CLOCK_MONOTONIC_COARSE (9be5468)

EVENT_BASE_ONCE LEAKS:
   If a callback added by event_base_once() is never invoked, Libevent no
   longer leaks internal memory.

   o Free dangling event_once objects on event_base_free() (c17dd59)
   o Add a unit test in which an event is created with event_base_once()
     but never fires (4343edf)

TESTING SUPPORT, FIXES AND IMPROVEMENTS:

   Libevent now disables by default its unit tests that would touch the
   network, or that tend to fail on heavily-loaded systems.  To re-enable
   them, invoke the ./test/regress program with the @all alias.

   o Simplify test.sh code significantly. (9b856fd Ross Lagerwall)
   o Make all tests that hit the network disabled by default (f2cea87)
   o Avoid a resource leak on error in http client benchmark (ea92fba)
   o Update to latest tinytest (911b4f0349377) (ef7c4f7)
   o Avoid (unlikely) overflow in bench_httpclient.c (5671033)
   o Shave 700 msec off the persistent_timeout_jump test (21205b8)
   o Check return value of write() in regress.c (c8009d2)
   o Make load-dependent monotonic timer tests off-by-default (2b6fe8b)
   o Add deferred_cb_skew to list of timing-dependent tests (34c8f31)
   o Avoid test -e; older shs don't have one. (f1bd938)
   o Fix renegotiation test to work around openssl 1.0.1 bug (c2f3086)
   o Fix a couple of compile warnings in the unit tests (5a9a014)

MISC:
   o Change evutil_weakrand_() to avoid platform random() (e86af4b Nicholas
     Marriott, 3aa4415)

INFRASTRUCTURE (Active-later events):
   As a simplification and optimization to Libevent's "deferred callback"
   logic (introduced in 2.0 to avoid callback recursion), Libevent now
   treats all of its deferrable callback types using the same logic it uses
   for active events.  Now deferred events no longer cause priority
   inversion, no longer require special code to cancel them, and so on.

   o Refactor the callback part of an event into its own event_callback
     type (cba59e5)
   o Add "active later" event_callbacks to supersede deferred (745a63d)
   o event_base_assert_ok: check value of event_active_count for
     correctness (fec8bae)
   o Replace deferred_cbs with event_callback-based implementation. (ae2b84b)
   o Replace more deferred_cb names with event_callback (a4079aa)
   o Give event_base_process_active a single exit path (581b5be)
   o Restore our priority-inversion-prevention code with deferreds (c0e425a)
   o Refactor event_persist_closure: raise and extract some common logic
     (bec22b4)
   o Remove the unused bits from EVLIST_ALL (9889a3d)

BUILD IMPROVEMENTS:
 Libevent 2.1.2-alpha modernizes Libevent's use of autotools, and makes
 numerous other build system. Parallel builds should be faster, and all
 builds should be quieter.

   o Split long lists in Makefile.am into one-item-per-line (2711cda)
   o Remove unnecessary code in configure.in. (e65914f Ross Lagerwall)
   o attempt to support OpenSSL in Makefile.nmake (eba0eb2 Patrick Pelletier)
   o Use newer syntax for autoconf/automake init (7d60ba8)
   o Enable silent build rules by default. Override with V=1 (7b18e5c)
   o Switch to non-recursive makefiles (7092f3b)
   o Rename subordinate Makefile.ams to include.am (6cdfeeb)
   o Make quiet build even quieter (371a123)
   o New --quiet option for event_rpcgen.py (aa59c1e)
   o Be quiet when making regress.gen.[ch] (607a8ff)
   o Fix handling of no-python case for nonrecursive make (1e3123d)
   o We now require automake 1.9 or later. Modernize! (b7f6e89)
   o Rename configure.in to configure.ac. (b3fea67 Ross Lagerwall)
   o Use correct openssl libs and includes in pkgconfig file (d70af27)
   o Use the same CFLAGS for openssl when building unit tests as with
     libevent (1d9d511)

DOCUMENTATION
   o Note that make_base_notifiable should not be necessary (26ee5f9)
   o Be more clear that LEV_OPT_DEFERRED_ACCEPT has tricky prereqs (371efeb)
   o Add caveat to docs about bufferevent_free() with data in outbuf (6fab9ee)
   o Make it more clear that NOLOCK means "I promise, no multithreading"
    (9444524)
   o Fix a comment in test-fdleak after 077c7e949. (3881d8f Ross Lagerwall)
   o Make the Makefile.nmake warning slightly less dire (e7bf4c8)
   o Fix typo : events instead of evets (05f1aca Azat Khuzhin)
   o Additional comments about OPENSSL_DIR variable, prompted by Dave Hart
     (6bde2ef Patrick Pelletier)

EVHTTP:
   o ignore LWS after field-content in headers (370a2c0 Artem Germanov)
   o Clean up rtrim implementation (aa59d80)
   o Remove trailing tabs in HTTP headers as well. (ac42519)
   o Remove internal ws from multiline http headers correctly (c6ff381)
   o Move evutil_rtrim_lws_ to evutil.c where it belongs (61b93af)
   o add evhttp_request_get_response_code_line (4f4d0c9 Jay R. Wren)
   o Use EVUTIL_SOCKET_ERROR() wrapper to save/restore errno in
     evhttp_connection_fail_ (7afbd60)
   o preserve errno in evhttp_connection_fail_ for inspection by the
     callback (36d0ee5 Patrick Pelletier)

BUGFIXES:
   o Correctly handle running on a system where accept4 doesn't work. (9fbfe9b)
   o Avoid double-free on error in evbuffer_add_file. Found by
     coverity. (6a81b1f)
   o Fix another possible uninitialized read in dns regression tests. Found
     by coverity. (13525c5)
   o Add checks for functions in test-ratelim.c; found by Coverity (aa501e1)
   o Avoid memory leak in test_event_calloc unit test; found by coverity
     (92817a1)
   o Fix a shadowed variable in addfile_test_readcb; found by coverity
     (225344c)
   o Check return value when using LEV_OPT_DEFERRED_ACCEPT. Found by
     coverity (6487f63)
   o Prevent reference leak of bufferevent if getaddrinfo fails. (b757786
     Joachim Bauch)
   o Make event_base_getnpriorities work with old "implicit base" code
     (c46cb9c)
   o Simplify and correct evutil_open_closeonexec_ (0de587f)
   o Fix event_dlist definition when sys/queue not included (81b6209
     Derrick Pallas)

Plans for Libevent 2.1
======================

I'd like to put out a final Libevent alpha release early in 2013,
declare a feature-freeze, start hunting final bugs, and plan a release
soon after.

There are bunches of features I'd like to have and merge, but as my time
is going to be pretty insanely occupied by my day job for a while, I'm
going to focus on the stuff that I find most urgent personally, and hope
that other folks will be able to contribute patches as we go along.

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:

Joachim Bauch
Ralph Castain
Update ChangeLog
Andrew Cox
Paul Croome
George Danchev
Antony Dovgal
Mark Ellzey
Artem Germanov
Diwaker Gupta
Sebastian Hahn
Dave Hart
Greg Hazel
Andrew Hochhaus
Azat Khuzhin
Alexander Klauer
Ross Lagerwall
Simon Liu
Nicholas Marriott
Juan Pablo Fernandez
Derrick Pallas
Patrick Pelletier
When PRECISE_TIMERS
Roman Puls
Jay R. Wren
Zack Weinberg
yangacer
***********************************************************************
To unsubscribe, send an e-mail to majordomo@xxxxxxxxxxxxx with
unsubscribe libevent-users    in the body.