tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

whatsnew-2.1.txt (33387B)


      1                         What's new in Libevent 2.1
      2                             Nick Mathewson
      3 
      4 0. Before we start
      5 
      6 0.1. About this document
      7 
      8  This document describes the key differences between Libevent 2.0 and
      9  Libevent 2.1, from a user's point of view.  It's a work in progress.
     10 
     11  For better documentation about libevent, see the links at
     12  http://libevent.org/
     13 
     14  Libevent 2.1 would not be possible without the generous help of
     15  numerous volunteers.  For a list of who did what in Libevent 2.1,
     16  please see the ChangeLog!
     17 
     18  NOTE: I am very sure that I missed some thing on this list.  Caveat
     19  haxxor.
     20 
     21 0.2. Where to get help
     22 
     23  Try looking at the other documentation too.  All of the header files
     24  have documentation in the doxygen format; this gets turned into nice
     25  HTML and linked to from the libevent.org website.
     26 
     27  There is a work-in-progress book with reference manual at
     28  http://www.wangafu.net/~nickm/libevent-book/ .
     29 
     30  You can ask questions on the #libevent IRC channel at irc.oftc.net or
     31  on the mailing list at libevent-users@freehaven.net.  The mailing list
     32  is subscribers-only, so you will need to subscribe before you post.
     33 
     34 0.3. Compatibility
     35 
     36  Our source-compatibility policy is that correct code (that is to say,
     37  code that uses public interfaces of Libevent and relies only on their
     38  documented behavior) should have forward source compatibility: any
     39  such code that worked with a previous version of Libevent should work
     40  with this version too.
     41 
     42  We don't try to do binary compatibility except within stable release
     43  series, so binaries linked against any version of Libevent 2.0 will
     44  probably need to be recompiled against Libevent 2.1.4-alpha if you
     45  want to use it.  It is probable that we'll break binary compatibility
     46  again before Libevent 2.1 is stable.
     47 
     48 1. New APIs and features
     49 
     50 1.1. New ways to build libevent
     51 
     52  We now provide an --enable-gcc-hardening configure option to turn on
     53  GCC features designed for increased code security.
     54 
     55  There is also an --enable-silent-rules configure option to make
     56  compilation run more quietly with automake 1.11 or later.
     57 
     58  You no longer need to use the --enable-gcc-warnings option to turn on
     59  all of the GCC warnings that Libevent uses.  The only change from
     60  using that option now is to turn warnings into errors.
     61 
     62  For IDE users, files that are not supposed to be built are now
     63  surrounded with appropriate #ifdef lines to keep your IDE from getting
     64  upset.
     65 
     66  There is now an alternative cmake-based build process; cmake users
     67  should see the relevant sections in the README.
     68 
     69 
     70 1.2. New functions for events and the event loop
     71 
     72  If you're running Libevent with multiple event priorities, you might
     73  want to make sure that Libevent checks for new events frequently, so
     74  that time-consuming or numerous low-priority events don't keep it from
     75  checking for new high-priority events.  You can now use the
     76  event_config_set_max_dispatch_interval() interface to ensure that the
     77  loop checks for new events either every N microseconds, every M
     78  callbacks, or both.
     79 
     80  When configuring an event base, you can now choose whether you want
     81  timers to be more efficient, or more precise.  (This only has effect
     82  on Linux for now.)  Timers are efficient by default: to select more
     83  precise timers, use the EVENT_BASE_FLAG_PRECISE_TIMER flag when
     84  constructing the event_config, or set the EVENT_PRECISE_TIMER
     85  environment variable to a non-empty string.
     86 
     87  There is an EVLOOP_NO_EXIT_ON_EMPTY flag that tells event_base_loop()
     88  to keep looping even when there are no pending events.  (Ordinarily,
     89  event_base_loop() will exit as soon as no events are pending.)
     90 
     91  Past versions of Libevent have been annoying to use with some
     92  memory-leak-checking tools, because Libevent allocated some global
     93  singletons but provided no means to free them.  There is now a
     94  function, libevent_global_shutdown(), that you can use to free all
     95  globally held resources before exiting, so that your leak-check tools
     96  don't complain.  (Note: this function doesn't free non-global things
     97  like events, bufferevents, and so on; and it doesn't free anything
     98  that wouldn't otherwise get cleaned up by the operating system when
     99  your process exit()s.  If you aren't using a leak-checking tool, there
    100  is not much reason to call libevent_global_shutdown().)
    101 
    102  There is a new event_base_get_npriorities() function to return the
    103  number of priorities set in the event base.
    104 
    105  Libevent 2.0 added an event_new() function to construct a new struct
    106  event on the heap.  Unfortunately, with event_new(), there was no
    107  equivalent for:
    108 
    109         struct event ev;
    110         event_assign(&ev, base, fd, EV_READ, callback, &ev);
    111 
    112  In other words, there was no easy way for event_new() to set up an
    113  event so that the event itself would be its callback argument.
    114  Libevent 2.1 lets you do this by passing "event_self_cbarg()" as the
    115  callback argument:
    116 
    117         struct event *evp;
    118         evp = event_new(base, fd, EV_READ, callback,
    119         event_self_cbarg());
    120 
    121  There's also a new event_base_get_running_event() function you can
    122  call from within a Libevent callback to get a pointer to the current
    123  event.  This should never be strictly necessary, but it's sometimes
    124  convenient.
    125 
    126  The event_base_once() function used to leak some memory if the event
    127  that it added was never actually triggered.  Now, its memory is
    128  tracked in the event_base and freed when the event_base is freed.
    129  Note however that Libevent doesn't know how to free any information
    130  passed as the callback argument to event_base_once is still something
    131  you'll might need a way to de-allocate yourself.
    132 
    133  There is an event_get_priority() function to return an event's
    134  priority.
    135 
    136  By analogy to event_base_loopbreak(), there is now an
    137  event_base_loopcontinue() that tells Libevent to stop processing
    138  active event callbacks, and re-scan for new events right away.
    139 
    140  There's a function, event_base_foreach_event(), that can iterate over
    141  every event currently pending or active on an event base, and invoke a
    142  user-supplied callback on each. The callback must not alter the events
    143  or add or remove anything to the event base.
    144 
    145  We now have an event_remove_timer() function to remove the timeout on
    146  an event while leaving its socket and/or signal triggers unchanged.
    147  (If we were designing the API from scratch, this would be the behavior
    148  of "event_add(ev, NULL)" on an already-added event with a timeout. But
    149  that's a no-op in past versions of Libevent, and we don't want to
    150  break compatibility.)
    151 
    152  You can use the new event_base_get_num_events() function to find the
    153  number of events active or pending on an event_base. To find the
    154  largest number of events that there have been since the last call, use
    155  event_base_get_max_events().
    156 
    157  You can now activate all the events waiting for a given fd or signal
    158  using the event_base_active_by_fd() and event_base_active_by_signal()
    159  APIs.
    160 
    161  On backends that support it (currently epoll), there is now an
    162  EV_CLOSED flag that programs can use to detect when a socket has
    163  closed without having to read all the bytes until receiving an EOF.
    164 
    165 1.3. Event finalization
    166 
    167 1.3.1. Why event finalization?
    168 
    169  Libevent 2.1 now supports an API for safely "finalizing" events that
    170  might be running in multiple threads, and provides a way to slightly
    171  change the semantics of event_del() to prevent deadlocks in
    172  multithreaded programs.
    173 
    174  To motivate this feature, consider the following code, in the context
    175  of a mulithreaded Libevent application:
    176 
    177        struct connection *conn = event_get_callback_arg(ev);
    178        event_del(ev);
    179        connection_free(conn);
    180 
    181  Suppose that the event's callback might be running in another thread,
    182  and using the value of "conn" concurrently.  We wouldn't want to
    183  execute the connection_free() call until "conn" is no longer in use.
    184  How can we make this code safe?
    185 
    186  Libevent 2.0 answered that question by saying that the event_del()
    187  call should block if the event's callback is running in another
    188  thread.  That way, we can be sure that event_del() has canceled the
    189  callback (if the callback hadn't started running yet), or has waited
    190  for the callback to finish.
    191 
    192  But now suppose that the data structure is protected by a lock, and we
    193  have the following code:
    194 
    195        void check_disable(struct connection *connection) {
    196            lock(connection);
    197            if (should_stop_reading(connection))
    198                    event_del(connection->read_event);
    199            unlock(connection);
    200        }
    201 
    202  What happens when we call check_disable() from a callback and from
    203  another thread?  Let's say that the other thread gets the lock
    204  first.  If it decides to call event_del(), it will wait for the
    205  callback to finish.  But meanwhile, the callback will be waiting for
    206  the lock on the connection.  Since each threads is waiting for the
    207  other one to release a resource, the program will deadlock.
    208 
    209  This bug showed up in multithreaded bufferevent programs in 2.1,
    210  particularly when freeing bufferevents.  (For more information, see
    211  the "Deadlock when calling bufferevent_free from an other thread"
    212  thread on libevent-users starting on 6 August 2012 and running through
    213  February of 2013.  You might also like to read my earlier writeup at
    214  http://archives.seul.org/libevent/users/Feb-2012/msg00053.html and
    215  the ensuing discussion.)
    216 
    217 1.3.2. The EV_FINALIZE flag and avoiding deadlock
    218 
    219  To prevent the deadlock condition described above, Libevent
    220  2.1.3-alpha adds a new flag, "EV_FINALIZE".  You can pass it to
    221  event_new() and event_assign() along with EV_READ, EV_WRITE, and the
    222  other event flags.
    223 
    224  When an event is constructed with the EV_FINALIZE flag, event_del()
    225  will not block on that event, even when the event's callback is
    226  running in another thread.  By using EV_FINALIZE, you are therefore
    227  promising not to use the "event_del(ev); free(event_get_callback_arg(ev));"
    228  pattern, but rather to use one of the finalization functions below to
    229  clean up the event.
    230 
    231  EV_FINALIZE has no effect on a single-threaded program, or on a
    232  program where events are only used from one thread.
    233 
    234 
    235  There are also two new variants of event_del() that you can use for
    236  more fine-grained control:
    237     event_del_noblock(ev)
    238     event_del_block(ev)
    239  The event_del_noblock() function will never block, even if the event
    240  callback is running in another thread and doesn't have the EV_FINALIZE
    241  flag.  The event_del_block() function will _always_ block if the event
    242  callback is running in another thread, even if the event _does_ have
    243  the EV_FINALIZE flag.
    244 
    245  [A future version of Libevent may have a way to make the EV_FINALIZE
    246  flag the default.]
    247 
    248 1.3.3. Safely finalizing events
    249 
    250  To safely tear down an event that may be running, Libevent 2.1.3-alpha
    251  introduces event_finalize() and event_free_finalize(). You call them
    252  on an event, and provide a finalizer callback to be run on the event
    253  and its callback argument once the event is definitely no longer
    254  running.
    255 
    256  With event_free_finalize(), the event is also freed once the finalizer
    257  callback has been invoked.
    258 
    259  A finalized event cannot be re-added or activated.  The finalizer
    260  callback must not add events, activate events, or attempt to
    261  "resucitate" the event being finalized in any way.
    262 
    263  If any finalizer callbacks are pending as the event_base is being
    264  freed, they will be invoked.  You can override this behavior with the
    265  new function event_base_free_nofinalize().
    266 
    267 1.4. New debugging features
    268 
    269  You can now turn on debug logs at runtime using a new function,
    270  event_enable_debug_logging().
    271 
    272  The event_enable_lock_debugging() function is now spelled correctly.
    273  You can still use the old "event_enable_lock_debuging" name, though,
    274  so your old programs shouldnt' break.
    275 
    276  There's also been some work done to try to make the debugging logs
    277  more generally useful.
    278 
    279 1.5. New evbuffer functions
    280 
    281  In Libevent 2.0, we introduced evbuffer_add_file() to add an entire
    282  file's contents to an evbuffer, and then send them using sendfile() or
    283  mmap() as appropriate.  This API had some drawbacks, however.
    284  Notably, it created one mapping or fd for every instance of the same
    285  file added to any evbuffer.  Also, adding a file to an evbuffer could
    286  make that buffer unusable with SSL bufferevents, filtering
    287  bufferevents, and any code that tried to read the contents of the
    288  evbuffer.
    289 
    290  Libevent 2.1 adds a new evbuffer_file_segment API to solve these
    291  problems.  Now, you can use evbuffer_file_segment_new() to construct a
    292  file-segment object, and evbuffer_add_file_segment() to insert it (or
    293  part of it) into an evbuffer.  These segments avoid creating redundant
    294  maps or fds.  Better still, the code is smart enough (when the OS
    295  supports sendfile) to map the file when that's necessary, and use
    296  sendfile() otherwise.
    297 
    298  File segments can receive callback functions that are invoked when the
    299  file segments are freed.
    300 
    301  The evbuffer_ptr interface has been extended so that an evbuffer_ptr
    302  can now yield a point just after the end of the buffer.  This makes
    303  many algorithms simpler to implement.
    304 
    305  There's a new evbuffer_add_buffer() interface that you can use to add
    306  one buffer to another nondestructively.  When you say
    307  evbuffer_add_buffer_reference(outbuf, inbuf), outbuf now contains a
    308  reference to the contents of inbuf.
    309 
    310  To aid in adding data in bulk while minimizing evbuffer calls, there
    311  is an evbuffer_add_iovec() function.
    312 
    313  There's a new evbuffer_copyout_from() variant function to enable
    314  copying data nondestructively from the middle of a buffer.
    315 
    316  evbuffer_readln() now supports an EVBUFFER_EOL_NUL argument to fetch
    317  NUL-terminated strings from buffers.
    318 
    319  There's a new evbuffer_set_flags()/evbuffer_clear_flags() that you can use to
    320  set EVBUFFER_FLAG_DRAINS_TO_FD.
    321 
    322 1.6. New functions and features: bufferevents
    323 
    324  You can now use the bufferevent_getcb() function to find out a
    325  bufferevent's callbacks.  Previously, there was no supported way to do
    326  that.
    327 
    328  The largest chunk readable or writeable in a single bufferevent
    329  callback is no longer hardcoded; it's now configurable with
    330  the new functions bufferevent_set_max_single_read() and
    331  bufferevent_set_max_single_write().
    332 
    333  For consistency, OpenSSL bufferevents now make sure to always set one
    334  of BEV_EVENT_READING or BEV_EVENT_WRITING when invoking an event
    335  callback.
    336 
    337  Calling bufferevent_set_timeouts(bev, NULL, NULL) now removes the
    338  timeouts from socket and ssl bufferevents correctly.
    339 
    340  You can find the priority at which a bufferevent runs with
    341  bufferevent_get_priority().
    342 
    343  The function bufferevent_get_token_bucket_cfg() can retrieve the
    344  rate-limit settings for a bufferevent; bufferevent_getwatermark() can
    345  return a bufferevent's current watermark settings.
    346 
    347  You can manually trigger a bufferevent's callbacks via
    348  bufferevent_trigger() and bufferevent_trigger_event().
    349 
    350  Also you can manually increment/decrement reference for bufferevent with
    351  bufferevent_incref()/bufferevent_decref(), it is useful in situations where a
    352  user may reference the bufferevent somewhere else.
    353 
    354  Now bufferevent_openssl supports "dirty" shutdown (when the peer closes the
    355  TCP connection before closing the SSL channel), see
    356  bufferevent_openssl_get_allow_dirty_shutdown() and
    357  bufferevent_openssl_set_allow_dirty_shutdown().
    358 
    359  And also libevent supports openssl 1.1.
    360 
    361 1.7. New functions and features: evdns
    362 
    363  The previous evdns interface used an "open a test UDP socket" trick in
    364  order to detect IPv6 support.  This was a hack, since it would
    365  sometimes badly confuse people's firewall software, even though no
    366  packets were sent.  The current evdns interface-detection code uses
    367  the appropriate OS functions to see which interfaces are configured.
    368 
    369  The evdns_base_new() function now has multiple possible values for its
    370  second (flags) argument.  Using 1 and 0 have their old meanings, though the
    371  1 flag now has a symbolic name of EVDNS_BASE_INITIALIZE_NAMESERVERS.
    372  A second flag is now supported too: the EVDNS_BASE_DISABLE_WHEN_INACTIVE
    373  flag, which tells the evdns_base that it should not prevent Libevent from
    374  exiting while it has no DNS requests in progress.
    375 
    376  There is a new evdns_base_clear_host_addresses() function to remove
    377  all the /etc/hosts addresses registered with an evdns instance.
    378 
    379  Also there is evdns_base_get_nameserver_addr() for retrieve the address of
    380  the 'idx'th configured nameserver.
    381 
    382 1.8. New functions and features: evconnlistener
    383 
    384  Libevent 2.1 adds the following evconnlistener flags:
    385 
    386    LEV_OPT_DEFERRED_ACCEPT -- Tells the OS that it doesn't need to
    387    report sockets as having arrived until the initiator has sent some
    388    data too.  This can greatly improve performance with protocols like
    389    HTTP where the client always speaks first.  On operating systems
    390    that don't support this functionality, this option has no effect.
    391 
    392    LEV_OPT_REUSEABLE_PORT -- Indicates that we ask to allow multiple servers
    393    to bind to the same port if they each set the option Ionly on Linux and
    394    >=3.9)
    395 
    396    LEV_OPT_DISABLED -- Creates an evconnlistener in the disabled (not
    397    listening) state.
    398 
    399  Libevent 2.1 changes the behavior of the LEV_OPT_CLOSE_ON_EXEC
    400  flag.  Previously, it would apply to the listener sockets, but not to
    401  the accepted sockets themselves.  That's almost never what you want.
    402  Now, it applies both to the listener and the accepted sockets.
    403 
    404 1.9. New functions and features: evhttp
    405 
    406  **********************************************************************
    407  NOTE: The evhttp module will eventually be deprecated in favor of Mark
    408  Ellzey's libevhtp library.  Don't worry -- this won't happen until
    409  libevhtp provides every feature that evhttp does, and provides a
    410  compatible interface that applications can use to migrate.
    411  **********************************************************************
    412 
    413  Previously, you could only set evhttp timeouts in increments of one
    414  second.  Now, you can use evhttp_set_timeout_tv() and
    415  evhttp_connection_set_timeout_tv() to configure
    416  microsecond-granularity timeouts.
    417 
    418  Also there is evhttp_connection_set_initial_retry_tv() to change initial
    419  retry timeout.
    420 
    421  There are a new pair of functions: evhttp_set_bevcb() and
    422  evhttp_connection_base_bufferevent_new(), that you can use to
    423  configure which bufferevents will be used for incoming and outgoing
    424  http connections respectively.  These functions, combined with SSL
    425  bufferevents, should enable HTTPS support.
    426 
    427  There's a new evhttp_foreach_bound_socket() function to iterate over
    428  every listener on an evhttp object.
    429 
    430  Whitespace between lines in headers is now folded into a single space;
    431  whitespace at the end of a header is now removed.
    432 
    433  The socket errno value is now preserved when invoking an http error
    434  callback.
    435 
    436  There's a new kind of request callback for errors; you can set it with
    437  evhttp_request_set_error_cb(). It gets called when there's a request error,
    438  and actually reports the error code and lets you figure out which request
    439  failed.
    440 
    441  You can navigate from an evhttp_connection back to its evhttp with the
    442  new evhttp_connection_get_server() function.
    443 
    444  You can override the default HTTP Content-Type with the new
    445  evhttp_set_default_content_type() function
    446 
    447  There's a new evhttp_connection_get_addr() API to return the peer
    448  address of an evhttp_connection.
    449 
    450  The new evhttp_send_reply_chunk_with_cb() is a variant of
    451  evhttp_send_reply_chunk() with a callback to be invoked when the
    452  chunk is sent.
    453 
    454  The evhttp_request_set_header_cb() facility adds a callback to be
    455  invoked while parsing headers.
    456 
    457  The evhttp_request_set_on_complete_cb() facility adds a callback to be
    458  invoked on request completion.
    459 
    460  You can add linger-close for http server by passing
    461  EVHTTP_SERVER_LINGERING_CLOSE to evhttp_set_flags(), with this flag server
    462  read all the clients body, and only after this respond with an error if the
    463  clients body exceed max_body_size (since some clients cannot read response
    464  otherwise).
    465 
    466  The evhttp_connection_set_family() can bypass family hint to evdns.
    467 
    468  There are some flags available for connections, which can be installed with
    469  evhttp_connection_set_flags():
    470  - EVHTTP_CON_REUSE_CONNECTED_ADDR -- reuse connection address on retry (avoid
    471    extra DNS request).
    472  - EVHTTP_CON_READ_ON_WRITE_ERROR - try read error, since server may already
    473    close the connection.
    474 
    475  The evhttp_connection_free_on_completion() can be used to tell libevent to
    476  free the connection object after the last request has completed or failed.
    477 
    478  There is evhttp_request_get_response_code_line() if
    479  evhttp_request_get_response_code() is not enough for you.
    480 
    481  There are *evhttp_uri_parse_with_flags() that accepts
    482  EVHTTP_URI_NONCONFORMANT to tolerate URIs that do not conform to RFC3986.
    483  The evhttp_uri_set_flags() can changes the flags on URI.
    484 
    485 1.10. New functions and features: evutil
    486 
    487  There's a function "evutil_secure_rng_set_urandom_device_file()" that
    488  you can use to override the default file that Libevent uses to seed
    489  its (sort-of) secure RNG.
    490 
    491  The evutil_date_rfc1123() returns date in RFC1123
    492 
    493  There are new API to work with monotonic timer -- monotonic time is
    494  guaranteed never to run in reverse, but is not necessarily epoch-based. Use
    495  it to make reliable measurements of elapsed time between events even when the
    496  system time may be changed:
    497  - evutil_monotonic_timer_new()/evutil_monotonic_timer_free()
    498  - evutil_configure_monotonic_time()
    499  - evutil_gettime_monotonic()
    500 
    501  Use evutil_make_listen_socket_reuseable_port() to set SO_REUSEPORT (linux >=
    502  3.9)
    503 
    504  The evutil_make_tcp_listen_socket_deferred() can make a tcp listener socket
    505  defer accept()s until there is data to read (TCP_DEFER_ACCEPT).
    506 
    507 2. Cross-platform performance improvements
    508 
    509 2.1. Better data structures
    510 
    511  We replaced several users of the sys/queue.h "TAILQ" data structure
    512  with the "LIST" data structure.  Because this data type doesn't
    513  require FIFO access, it requires fewer pointer checks and
    514  manipulations to keep it in line.
    515 
    516  All previous versions of Libevent have kept every pending (added)
    517  event in an "eventqueue" data structure.  Starting in Libevent 2.0,
    518  however, this structure became redundant: every pending timeout event
    519  is stored in the timeout heap or in one of the common_timeout queues,
    520  and every pending fd or signal event is stored in an evmap.  Libevent
    521  2.1 removes this data structure, and thereby saves all of the code
    522  that we'd been using to keep it updated.
    523 
    524 2.2. Faster activations and timeouts
    525 
    526  It's a common pattern in older code to use event_base_once() with a
    527  0-second timeout to ensure that a callback will get run 'as soon as
    528  possible' in the current iteration of the Libevent loop.  We optimize
    529  this case by calling event_active() directly, and bypassing the
    530  timeout pool.  (People who are using this pattern should also consider
    531  using event_active() themselves.)
    532 
    533  Libevent 2.0 would wake up a polling event loop whenever the first
    534  timeout in the event loop was adjusted--whether it had become earlier
    535  or later.  We now only notify the event loop when a change causes the
    536  expiration time to become _sooner_ than it would have been otherwise.
    537 
    538  The timeout heap code is now optimized to perform fewer comparisons
    539  and shifts when changing or removing a timeout.
    540 
    541  Instead of checking for a wall-clock time jump every time we call
    542  clock_gettime(), we now check only every 5 seconds.  This should save
    543  a huge number of gettimeofday() calls.
    544 
    545 2.3. Microoptimizations
    546 
    547  Internal event list maintainance no longer use the antipattern where
    548  we have one function with multiple totally independent behaviors
    549  depending on an argument:
    550      #define OP1 1
    551      #define OP2 2
    552      #define OP3 3
    553      void func(int operation, struct event *ev) {
    554        switch (op) {
    555          ...
    556        }
    557      }
    558  Instead, these functions are now split into separate functions for
    559  each operation:
    560      void func_op1(struct event *ev) { ... }
    561      void func_op2(struct event *ev) { ... }
    562      void func_op3(struct event *ev) { ... }
    563 
    564  This produces better code generation and inlining decisions on some
    565  compilers, and makes the code easier to read and check.
    566 
    567 2.4. Evbuffer performance improvements
    568 
    569  The EVBUFFER_EOL_CRLF line-ending type is now much faster, thanks to
    570  smart optimizations.
    571 
    572 2.5. HTTP performance improvements
    573 
    574   o Performance tweak to evhttp_parse_request_line. (aee1a97 Mark Ellzey)
    575   o Add missing break to evhttp_parse_request_line (0fcc536)
    576 
    577 2.6. Coarse timers by default on Linux
    578 
    579  Due to limitations of the epoll interface, Libevent programs using epoll
    580  have not previously been able to wait for timeouts with accuracy smaller
    581  than 1 millisecond.  But Libevent had been using CLOCK_MONOTONIC for
    582  timekeeping on Linux, which is needlessly expensive: CLOCK_MONOTONIC_COARSE
    583  has approximately the resolution corresponding to epoll, and is much faster
    584  to invoke than CLOCK_MONOTONIC.
    585 
    586  To disable coarse timers, and get a more plausible precision, use the
    587  new EVENT_BASE_FLAG_PRECISE_TIMER flag when setting up your event base.
    588 
    589 3. Backend/OS-specific improvements
    590 
    591 3.1. Linux-specific improvements
    592 
    593  The logic for deciding which arguements to use with epoll_ctl() is now
    594  a table-driven lookup, rather than the previous pile of cascading
    595  branches.  This should minimize epoll_ctl() calls and make the epoll
    596  code run a little faster on change-heavy loads.
    597 
    598  Libevent now takes advantage of Linux's support for enhanced APIs
    599  (e.g., SOCK_CLOEXEC, SOCK_NONBLOCK, accept4, pipe2) that allow us to
    600  simultaneously create a socket, make it nonblocking, and make it
    601  close-on-exec.  This should save syscalls throughout our codebase, and
    602  avoid race-conditions if an exec() occurs after a socket is socket is
    603  created but before we can make it close-on-execute on it.
    604 
    605 3.2. Windows-specific improvements
    606 
    607  We now use GetSystemTimeAsFileTime to implement gettimeofday.  It's
    608  significantly faster and more accurate than our old ftime()-based approach.
    609 
    610 3.3. Improvements in the solaris evport backend.
    611 
    612  The evport backend has been updated to use many of the infrastructure
    613  improvements from Libevent 2.0.  Notably, it keeps track of per-fd
    614  information using the evmap infrastructure, and removes a number of
    615  linear scans over recently-added events.  This last change makes it
    616  efficient to receive many more events per evport_getn() call, thereby
    617  reducing evport overhead in general.
    618 
    619 3.4. OSX backend improvements
    620 
    621  The OSX select backend doesn't like to have more than a certain number
    622  of fds set unless an "unlimited select" option has been set.
    623  Therefore, we now set it.
    624 
    625 3.5. Monotonic clocks on even more platforms
    626 
    627  Libevent previously used a monotonic clock for its internal timekeeping
    628  only on platforms supporting the POSIX clock_gettime() interface. Now,
    629  Libevent has support for monotonic clocks on OSX and Windows too, and a
    630  fallback implementation for systems without monotonic clocks that will at
    631  least keep time running forwards.
    632 
    633  Using monotonic timers makes Libevent more resilient to changes in the
    634  system time, as can happen in small amounts due to clock adjustments from
    635  NTP, or in large amounts due to users who move their system clocks all over
    636  the timeline in order to keep nagware from nagging them.
    637 
    638 3.6. Faster cross-thread notification on kqueue
    639 
    640  When a thread other than the one in which the main event loop is
    641  running needs to wake the thread running the main event loop, Libevent
    642  usually writes to a socketpair in order to force the main event loop
    643  to wake up.  On Linux, we've been able to use eventfd() instead.  Now
    644  on BSD and OSX systems (any anywhere else that has kqueue with the
    645  EVFILT_USER extension), we can use EVFILT_USER to wake up the main
    646  thread from kqueue.  This should be a tiny bit faster than the
    647  previous approach.
    648 
    649 4. Infrastructure improvements
    650 
    651 4.1. Faster tests
    652 
    653  I've spent some time to try to make the unit tests run faster in
    654  Libevent 2.1.  Nearly all of this was a matter of searching slow tests
    655  for unreasonably long timeouts, and cutting them down to reasonably
    656  long delays, though on one or two cases I actually had to parallelize
    657  an operation or improve an algorithm.
    658 
    659  On my desktop, a full "make verify" run of Libevent 2.0.18-stable
    660  requires about 218 seconds.  Libevent 2.1.1-alpha cuts this down to
    661  about 78 seconds.
    662 
    663  Faster unit tests are great, since they let programmers test their
    664  changes without losing their train of thought.
    665 
    666 4.2. Finicky tests are now off-by-default
    667 
    668  The Tinytest unit testing framework now supports optional tests, and
    669  Libevent uses them.  By default, Libevent's unit testing framework
    670  does not run tests that require a working network, and does not run
    671  tests that tend to fail on heavily loaded systems because of timing
    672  issues.  To re-enable all tests, run ./test/regress using the "@all"
    673  alias.
    674 
    675 4.3. Modernized use of autotools
    676 
    677  Our autotools-based build system has been updated to build without
    678  warnings on recent autoconf/automake versions.
    679 
    680  Libevent's autotools makefiles are no longer recursive.  This allows
    681  make to use the maximum possible parallelism to do the minimally
    682  necessary amount of work.  See Peter Miller's "Recursive Make
    683  Considered Harmful" at http://miller.emu.id.au/pmiller/books/rmch/ for
    684  more information here.
    685 
    686  We now use the "quiet build" option to suppress distracting messages
    687  about which commandlines are running.  You can get them back with
    688  "make V=1".
    689 
    690 4.4. Portability
    691 
    692  Libevent now uses large-file support internally on platforms where it
    693  matters.  You shouldn't need to set _LARGEFILE or OFFSET_BITS or
    694  anything magic before including the Libevent headers, either, since
    695  Libevent now sets the size of ev_off_t to the size of off_t that it
    696  received at compile time, not to some (possibly different) size based
    697  on current macro definitions when your program is building.
    698 
    699  We now also use the Autoconf AC_USE_SYSTEM_EXTENSIONS mechanism to
    700  enable per-system macros needed to enable not-on-by-default features.
    701  Unlike the rest of the autoconf macros, we output these to an
    702  internal-use-only evconfig-private.h header, since their names need to
    703  survive unmangled.  This lets us build correctly on more platforms,
    704  and avoid inconsistencies when some files define _GNU_SOURCE and
    705  others don't.
    706 
    707  Libevent now tries to detect OpenSSL via pkg-config.
    708 
    709 4.5. Standards conformance
    710 
    711  Previous Libevent versions had no consistent convention for internal
    712  vs external identifiers, and used identifiers starting with the "_"
    713  character throughout the codebase.  That's no good, since the C
    714  standard says that identifiers beginning with _ are reserved.  I'm not
    715  aware of having any collisions with system identifiers, but it's best
    716  to fix these things before they cause trouble.
    717 
    718  We now avoid all use of the _identifiers in the Libevent source code.
    719  These changes were made *mainly* through the use of automated scripts,
    720  so there shouldn't be any mistakes, but you never know.
    721 
    722  As an exception, the names _EVENT_LOG_DEBUG, _EVENT_LOG_MSG_,
    723  _EVENT_LOG_WARN, and _EVENT_LOG_ERR are still exposed in event.h: they
    724  are now deprecated, but to support older code, they will need to stay
    725  around for a while.  New code should use EVENT_LOG_DEBUG,
    726  EVENT_LOG_MSG, EVENT_LOG_WARN, and EVENT_LOG_ERR instead.
    727 
    728 4.6. Event and callback refactoring
    729 
    730  As a simplification and optimization to Libevent's "deferred callback"
    731  logic (introduced in 2.0 to avoid callback recursion), Libevent now
    732  treats all of its deferrable callback types using the same logic it
    733  uses for active events.  Now deferred events no longer cause priority
    734  inversion, no longer require special code to cancel them, and so on.
    735 
    736  Regular events and deferred callbacks now both descend from an
    737  internal light-weight event_callback supertype, and both support
    738  priorities and take part in the other anti-priority-inversion
    739  mechanisms in Libevent.
    740 
    741  To avoid starvation from callback recursion (which was the reason we
    742  introduced "deferred callbacks" in the first place) the implementation
    743  now allows an event callback to be scheduled as "active later":
    744  instead of running in the current iteration of the event loop, it runs
    745  in the next one.
    746 
    747 5. Testing
    748 
    749  Libevent's test coverage level is more or less unchanged since before:
    750  we still have over 80% line coverage in our tests on Linux, FreeBSD, NetBSD,
    751  Windows, OSX.
    752  There are some under-tested modules, though: we need to fix those.
    753 
    754  And now we have CI:
    755  - https://travis-ci.org/libevent/libevent
    756  - https://ci.appveyor.com/project/nmathewson/libevent
    757 
    758  And code coverage:
    759  - https://coveralls.io/github/libevent/libevent
    760 
    761  Plus there is vagrant boxes if you what to test it on more OS'es then
    762  travis-ci allows, and there is a wrapper (in python) that will parse logs and
    763  provide report:
    764  - https://github.com/libevent/libevent-extras/blob/master/tools/vagrant-tests.py
    765 
    766 6. Contributing
    767 
    768  From now we have contributing guide and checkpatch.sh.