ipc/chromium/src/third_party/libevent/whatsnew-2.0.txt

Wed, 31 Dec 2014 06:09:35 +0100

author
Michael Schloh von Bennewitz <michael@schloh.com>
date
Wed, 31 Dec 2014 06:09:35 +0100
changeset 0
6474c204b198
permissions
-rw-r--r--

Cloned upstream origin tor-browser at tor-browser-31.3.0esr-4.5-1-build1
revision ID fc1c9ff7c1b2defdbc039f12214767608f46423f for hacking purpose.

     1 What's New In Libevent 2.0 so far:
     3 1. Meta-issues
     5 1.1. About this document
     7   This document describes the key differences between Libevent 1.4 and
     8   Libevent 2.0, from a user's point of view.  It was most recently
     9   updated based on features in git master as of August 2010.
    11   NOTE: I am very sure that I missed some thing on this list.  Caveat
    12   haxxor.
    14 1.2. Better documentation
    16   There is now a book-in-progress that explains how to use Libevent and its
    17   growing pile of APIs.  As of this writing, it covers everything except the
    18   http and rpc code.  Check out the latest draft at
    19   http://www.wangafu.net/~nickm/libevent-book/ .
    21 2. New and Improved Event APIs
    23   Many APIs are improved, refactored, or deprecated in Libevent 2.0.
    25   COMPATIBILITY:
    27   Nearly all existing code that worked with Libevent 1.4 should still
    28   work correctly with Libevent 2.0.  However, if you are writing new code,
    29   or if you want to port old code, we strongly recommend using the new APIs
    30   and avoiding deprecated APIs as much as possible.
    32   Binaries linked against Libevent 1.4 will need to be recompiled to link
    33   against Libevent 2.0.  This is nothing new; we have never been good at
    34   preserving binary compatibility between releases.  We'll try harder in the
    35   future, though: see 2.1 below.
    37 2.1. New header layout for improved forward-compatibility
    39   Libevent 2.0 has a new header layout to make it easier for programmers to
    40   write good, well-supported libevent code.  The new headers are divided
    41   into three types.
    43   There are *regular headers*, like event2/event.h.  These headers contain
    44   the functions that most programmers will want to use.
    46   There are *backward compatibility headers*, like event2/event_compat.h.
    47   These headers contain declarations for deprecated functions from older
    48   versions of Libevent.  Documentation in these headers should suggest what's
    49   wrong with the old functions, and what functions you want to start using
    50   instead of the old ones.  Some of these functions might be removed in a
    51   future release.  New programs should generally not include these headers.
    53   Finally, there are *structure headers*, like event2/event_struct.h.
    54   These headers contain definitions of some structures that Libevent has
    55   historically exposed.  Exposing them caused problems in the past,
    56   since programs that were compiled to work with one version of Libevent
    57   would often stop working with another version that changed the size or
    58   layout of some object.  We've moving them into separate headers so
    59   that programmers can know that their code is not depending on any
    60   unstable aspect of the Libvent ABI.  New programs should generally not
    61   include these headers unless they really know what they are doing, are
    62   willing to rebuild their software whenever they want to link it
    63   against a new version of Libevent, and are willing to risk their code
    64   breaking if and when data structures change.
    66   Functionality that once was located in event.h is now more subdivided.
    67   The core event logic is now in event2/event.h.  The "evbuffer" functions
    68   for low-level buffer manipulation are in event2/buffer.h.  The
    69   "bufferevent" functions for higher-level buffered IO are in
    70   event2/bufferevent.h.
    72   COMPATIBILITY:
    74   All of the old headers (event.h, evdns.h, evhttp.h, evrpc.h, and
    75   evutil.h) will continue to work by including the corresponding new
    76   headers.  Old code should not be broken by this change.
    78 2.2. New thread-safe, binary-compatible, harder-to-mess-up APIs
    80   Some aspects of the historical Libevent API have encouraged
    81   non-threadsafe code, or forced code built against one version of Libevent
    82   to no longer build with another.  The problems with now-deprecated APIs
    83   fell into two categories:
    85      1) Dependence on the "current" event_base.  In an application with
    86         multiple event_bases, Libevent previously had a notion of the
    87         "current" event_base.  New events were linked to this base, and
    88         the caller needed to explicitly reattach them to another base.
    89         This was horribly error-prone.
    91         Functions like "event_set" that worked with the "current" event_base
    92         are now deprecated but still available (see 2.1).  There are new
    93         functions like "event_assign" that take an explicit event_base
    94         argument when setting up a structure.  Using these functions will help
    95         prevent errors in your applications, and to be more threadsafe.
    97      2) Structure dependence.  Applications needed to allocate 'struct
    98         event' themselves, since there was no function in Libevent to do it
    99         for them.  But since the size and contents of struct event can
   100         change between libevent versions, this created binary-compatibility
   101         nightmares.  All structures of this kind are now isolated in
   102         _struct.h header (see 2.1), and there are new allocate-and-
   103         initialize functions you can use instead of the old initialize-only
   104         functions.  For example, instead of malloc and event_set, you
   105         can use event_new().
   107         (For people who do really want to allocate a struct event on the
   108         stack, or put one inside another structure, you can still use
   109         event2/event_compat.h.)
   111    So in the case where old code would look like this:
   113       #include <event.h>
   114       ...
   115       struct event *ev = malloc(sizeof(struct event));
   116       /* This call will cause a buffer overrun if you compile with one version
   117          of Libevent and link dynamically against another. */
   118       event_set(ev, fd, EV_READ, cb, NULL);
   119       /* If you forget this call, your code will break in hard-to-diagnose
   120          ways in the presence of multiple event bases. */
   121       event_set_base(ev, base);
   123    New code will look more like this:
   125      #include <event2/event.h>
   126      ...
   127      struct event *ev;
   128      ev = event_new(base, fd, EV_READ, cb, NULL);
   130 2.3. Overrideable allocation functions
   132   If you want to override the allocation functions used by libevent
   133   (for example, to use a specialized allocator, or debug memory
   134   issues, or so on), you can replace them by calling
   135   event_set_mem_functions.  It takes replacements for malloc(),
   136   free(), and realloc().
   138   If you're going to use this facility, you need to call it _before_
   139   Libevent does any memory allocation; otherwise, Libevent may allocate some
   140   memory with malloc(), and free it with the free() function you provide.
   142   You can disable this feature when you are building Libevent by passing
   143   the --disable-malloc-replacement argument to configure.
   145 2.4. Configurable event_base creation
   147   Older versions of Libevent would always got the fastest backend
   148   available, unless you reconfigured their behavior with the environment
   149   variables EVENT_NOSELECT, EVENT_NOPOLL, and so forth.  This was annoying
   150   to programmers who wanted to pick a backend explicitly without messing
   151   with the environment.
   153   Also, despite our best efforts, not every backend supports every
   154   operation we might like.  Some features (like edge-triggered events, or
   155   working with non-socket file descriptors) only work with some operating
   156   systems' fast backends.  Previously, programmers who cared about this
   157   needed to know which backends supported what.  This tended to get quite
   158   ungainly.
   160   There is now an API to choose backends, either by name or by feature.
   161   Here is an example:
   163       struct event_config_t *config;
   164       struct event_base *base;
   166       /* Create a new configuration object. */
   167       config = event_config_new();
   168       /* We don't want to use the "select" method. */
   169       event_config_avoid_method(config, "select");
   170       /* We want a method that can work with non-socket file descriptors */
   171       event_config_require_features(config, EV_FEATURE_FDS);
   173       base = event_base_new_with_config(config);
   174       if (!base) {
   175          /* There is no backend method that does what we want. */
   176          exit(1);
   177       }
   178       event_config_free(config);
   180   Supported features are documented in event2/event.h
   182 2.5. Socket is now an abstract type
   184   All APIs that formerly accepted int as a socket type now accept
   185   "evutil_socket_t".  On Unix, this is just an alias for "int" as
   186   before.  On Windows, however, it's an alias for SOCKET, which can
   187   be wider than int on 64-bit platforms.
   189 2.6. Timeouts and persistent events work together.
   191   Previously, it wasn't useful to set a timeout on a persistent event:
   192   the timeout would trigger once, and never again.  This is not what
   193   applications tend to want.  Instead, applications tend to want every
   194   triggering of the event to re-set the timeout.  So now, if you set
   195   up an event like this:
   196        struct event *ev;
   197        struct timeval tv;
   198        ev = event_new(base, fd, EV_READ|EV_PERSIST, cb, NULL);
   199        tv.tv_sec = 1;
   200        tv.tv_usec = 0;
   201        event_add(ev, &tv);
   203   The callback 'cb' will be invoked whenever fd is ready to read, OR whenever
   204   a second has passed since the last invocation of cb.
   206 2.7. Multiple events allowed per fd
   208   Older versions of Libevent allowed at most one EV_READ event and at most
   209   one EV_WRITE event per socket, per event base.  This restriction is no
   210   longer present.
   212 2.8. evthread_* functions for thread-safe structures.
   214   Libevent structures can now be built with locking support.  This code
   215   makes it safe to add, remove, and activate events on an event base from a
   216   different thread.  (Previously, if you wanted to write multithreaded code
   217   with Libevent, you could only an event_base or its events in one thread at
   218   a time.)
   220   If you want threading support and you're using pthreads, you can just
   221   call evthread_use_pthreads().  (You'll need to link against the
   222   libevent_pthreads library in addition to libevent_core.  These functions are
   223   not in libevent_core.)
   225   If you want threading support and you're using Windows, you can just
   226   call evthread_use_windows_threads().
   228   If you are using some locking system besides Windows and pthreads, You
   229   can enable this on a per-event-base level by writing functions to
   230   implement mutexes, conditions, and thread IDs, and passing them to
   231   evthread_set_lock_callbacks and related functions in event2/thread.h.
   233   Once locking functions are enabled, every new event_base is created with a
   234   lock.  You can prevent a single event_base from being built with a lock
   235   disabled by using the EVENT_BASE_FLAG_NOLOCK flag in its
   236   event_config.  If an event_base is created with a lock, it is safe to call
   237   event_del, event_add, and event_active on its events from any thread.  The
   238   event callbacks themselves are still all executed from the thread running
   239   the event loop.
   241   To make an evbuffer or a bufferevent object threadsafe, call its
   242   *_enable_locking() function.
   244   The HTTP api is not currently threadsafe.
   246   To build Libevent with threading support disabled, pass
   247   --disable-thread-support to the configure script.
   249 2.9. Edge-triggered events on some backends.
   251   With some backends, it's now possible to add the EV_ET flag to an event
   252   in order to request that the event's semantics be edge-triggered.  Right
   253   now, epoll and kqueue support this.
   255   The corresponding event_config feature is EV_FEATURE_ET; see 2.4 for more
   256   information.
   258 2.10. Better support for huge numbers of timeouts
   260   The heap-based priority queue timer implementation for Libevent 1.4 is good
   261   for randomly distributed timeouts, but suboptimal if you have huge numbers
   262   of timeouts that all expire in the same amount of time after their
   263   creation.  The new event_base_init_common_timeout() logic lets you signal
   264   that a given timeout interval will be very common, and should use a linked
   265   list implementation instead of a priority queue.
   267 2.11. Improved debugging support
   269   It's been pretty easy to forget to delete all your events before you
   270   re-initialize them, or otherwise put Libevent in an internally inconsistent
   271   state.  You can tell libevent to catch these and other common errors with
   272   the new event_enable_debug_mode() call.  Just invoke it before you do
   273   any calls to other libevent functions, and it'll catch many common
   274   event-level errors in your code.
   276 2.12. Functions to access all event fields
   278   So that you don't have to access the struct event fields directly, Libevent
   279   now provides accessor functions to retrieve everything from an event that
   280   you set during event_new() or event_assign().
   282 3. Backend-specific and performance improvements.
   284 3.1. Change-minimization on O(1) backends
   286   With previous versions of Libevent, if you called event_del() and
   287   event_add() repeatedly on a single event between trips to the backend's
   288   dispatch function, the backend might wind up making unnecessary calls or
   289   passing unnecessary data to the kernel.  The new backend logic batches up
   290   redundant adds and deletes, and performs no more operations than necessary
   291   at the kernel level.
   293   This logic is on for the kqueue backend, and available (but off by
   294   default) for the epoll backend.  To turn it on for the epoll backend,
   295   set the EVENT_BASE_FLAG_EPOLL_USE_CHANGELIST flag in the
   296   event_base_cofig, or set the EVENT_EPOLL_USE_CHANGELIST environment
   297   variable.  Doing this with epoll may result in weird bugs if you give
   298   any fds closed by dup() or its variants.
   300 3.2. Improved notification on Linux
   302   When we need to wake the event loop up from another thread, we use
   303   an epollfd to do so, instead of a socketpair.  This is supposed to be
   304   faster.
   306 3.3. Windows: better support for everything
   308   Bufferevents on Windows can use a new mechanism (off-by-default; see below)
   309   to send their data via Windows overlapped IO and get their notifications
   310   via the IOCP API.  This should be much faster than using event-based
   311   notification.
   313   Other functions throughout the code have been fixed to work more
   314   consistently with Windows.  Libevent now builds on Windows using either
   315   mingw, or using MSVC (with nmake).  Libevent works fine with UNICODE
   316   defined, or not.
   318   Data structures are a little smarter: our lookups from socket to pending
   319   event are now done with O(1) hash tables rather than O(lg n) red-black
   320   trees.
   322   Unfortunately, the main Windows backend is still select()-based: from
   323   testing the IOCP backends on the mailing list, it seems that there isn't
   324   actually a way to tell for certain whether a socket is writable with IOCP.
   325   Libevent 2.1 may add a multithreaded WaitForMultipleEvents-based
   326   backend for better performance with many inactive sockets and better
   327   integration with Windows events.
   329 4. Improvements to evbuffers
   331   Libevent has long had an "evbuffer" implementation to wrap access to an
   332   input or output memory buffer.  In previous versions, the implementation
   333   was very inefficient and lacked some desirable features.  We've made many
   334   improvements in Libevent 2.0.
   336 4.1. Chunked-memory internal representation
   338   Previously, each evbuffer was a huge chunk of memory.  When we ran out of
   339   space in an evbuffer, we used realloc() to grow the chunk of memory.  When
   340   data was misaligned, we used memmove to move the data back to the front
   341   of the buffer.
   343   Needless to say, this is a terrible interface for networked IO.
   345   Now, evbuffers are implemented as a linked list of memory chunks, like
   346   most Unix kernels use for network IO.  (See Linux's skbuf interfaces,
   347   or *BSD's mbufs).  Data is added at the end of the linked list and
   348   removed from the front, so that we don't ever need realloc huge chunks
   349   or memmove the whole buffer contents.
   351   To avoid excessive calls to read and write, we use the readv/writev
   352   interfaces (or WSASend/WSARecv on Windows) to do IO on multiple chunks at
   353   once with a single system call.
   355   COMPATIBILITY NOTE:
   356   The evbuffer struct is no longer exposed in a header.  The code here is
   357   too volatile to expose an official evbuffer structure, and there was never
   358   any means provided to create an evbuffer except via evbuffer_new which
   359   heap-allocated the buffer.
   361   If you need access to the whole bufer as a linear chunk of memory, the
   362   EVBUFFER_DATA() function still works.  Watch out, though: it needs to copy
   363   the buffer's contents in a linear chunk before you can use it.
   365 4.2. More flexible readline support
   367   The old evbuffer_readline() function (which accepted any sequence of
   368   CR and LF characters as a newline, and which couldn't handle lines
   369   containing NUL characters), is now deprecated.  The preferred
   370   function is evbuffer_readln(), which supports a variety of
   371   line-ending styles, and which can return the number of characters in
   372   the line returned.
   374   You can also call evbuffer_search_eol() to find the end of a line
   375   in an evbuffer without ever extracting the line.
   377 4.3. Support for file-based IO in evbuffers.
   379   You can now add chunks of a file into a evbuffer, and Libevent will have
   380   your OS use mapped-memory functionality, sendfile, or splice to transfer
   381   the data without ever copying it to userspace.  On OSs where this is not
   382   supported, Libevent just loads the data.
   384   There are probably some bugs remaining in this code.  On some platforms
   385   (like Windows), it just reads the relevant parts of the file into RAM.
   387 4.4. Support for zero-copy ("scatter/gather") writes in evbuffers.
   389   You can add a piece of memory to an evbuffer without copying it.
   390   Instead, Libevent adds a new element to the evbuffer's linked list of
   391   chunks with a pointer to the memory you supplied.  You can do this
   392   either with a reference-counted chunk (via evbuffer_add_reference), or
   393   by asking Libevent for a pointer to its internal vectors (via
   394   evbuffer_reserve_space or evbuffer_peek()).
   396 4.5. Multiple callbacks per evbuffer
   398   Previously, you could only have one callback active on an evbuffer at a
   399   time.  In practice, this meant that if one part of Libevent was using an
   400   evbuffer callback to notice when an internal evbuffer was reading or
   401   writing data, you couldn't have your own callback on that evbuffer.
   403   Now, you can now use the evbuffer_add_cb() function to add a callback that
   404   does not interfere with any other callbacks.
   406   The evbuffer_setcb() function is now deprecated.
   408 4.6. New callback interface
   410   Previously, evbuffer callbacks were invoked with the old size of the
   411   buffer and the new size of the buffer.  This interface could not capture
   412   operations that simultaneously filled _and_ drained a buffer, or handle
   413   cases where we needed to postpone callbacks until multiple operations were
   414   complete.
   416   Callbacks that are set with evbuffer_setcb still use the old API.
   417   Callbacks added with evbuffer_add_cb() use a new interface that takes a
   418   pointer to a struct holding the total number of bytes drained read and the
   419   total number of bytes written.  See event2/buffer.h for full details.
   421 4.7. Misc new evbuffer features
   423    You can use evbuffer_remove() to move a given number of bytes from one
   424    buffer to another.
   426    The evbuffer_search() function lets you search for repeated instances of
   427    a pattern inside an evbuffer.
   429    You can use evbuffer_freeze() to temporarily suspend drains from or adds
   430    to a given evbuffer.  This is useful for code that exposes an evbuffer as
   431    part of its public API, but wants users to treat it as a pure source or
   432    sink.
   434    There's an evbuffer_copyout() that looks at the data at the start of an
   435    evbuffer without doing a drain.
   437    You can have an evbuffer defer all of its callbacks, so that rather than
   438    being invoked immediately when the evbuffer's length changes, they are
   439    invoked from within the event_loop.  This is useful when you have a
   440    complex set of callbacks that can change the length of other evbuffers,
   441    and you want to avoid having them recurse and overflow your stack.
   443 5. Bufferevents improvements
   445    Libevent has long included a "bufferevents" structure and related
   446    functions that were useful for generic buffered IO on a TCP connection.
   447    This is what Libevent uses for its HTTP implementation.  In addition to
   448    the improvements that they get for free from the underlying evbuffer
   449    implementation above, there are many new features in Libevent 2.0's
   450    evbuffers.
   452 5.1. New OO implementations
   454    The "bufferevent" structure is now an abstract base type with multiple
   455    implementations.  This should not break existing code, which always
   456    allocated bufferevents with bufferevent_new().
   458    Current implementations of the bufferevent interface are described below.
   460 5.2. bufferevent_socket_new() replaces bufferevent_new()
   462    Since bufferevents that use a socket are not the only kind,
   463    bufferevent_new() is now deprecated.  Use bufferevent_socket_new()
   464    instead.
   466 5.3. Filtered bufferevent IO
   468    You can use bufferevent_filter_new() to create a bufferevent that wraps
   469    around another bufferevent and transforms data it is sending and
   470    receiving.  See test/regress_zlib.c for a toy example that uses zlib to
   471    compress data before sending it over a bufferevent.
   473 5.3. Linked pairs of bufferevents
   475    You can use bufferevent_pair_new() to produce two linked
   476    bufferevents.  This is like using socketpair, but doesn't require
   477    system-calls.
   479 5.4. SSL support for bufferevents with OpenSSL
   481    There is now a bufferevent type that supports SSL/TLS using the
   482    OpenSSL library.  The code for this is build in a separate
   483    library, libevent_openssl, so that your programs don't need to
   484    link against OpenSSL unless they actually want SSL support.
   486    There are two ways to construct one of these bufferevents, both
   487    declared in <event2/bufferevent_ssl.h>.  If you want to wrap an
   488    SSL layer around an existing bufferevent, you would call the
   489    bufferevent_openssl_filter_new() function.  If you want to do SSL
   490    on a socket directly, call bufferevent_openssl_socket_new().
   492 5.5. IOCP support for bufferevents on Windows
   494    There is now a bufferevents backend that supports IOCP on Windows.
   495    Supposedly, this will eventually make Windows IO much faster for
   496    programs using bufferevents.  We'll have to see; the code is not
   497    currently optimized at all.  To try it out, call the
   498    event_base_start_iocp() method on an event_base before contructing
   499    bufferevents.
   501    This is tricky code; there are probably some bugs hiding here.
   503 5.6. Improved connect support for bufferevents.
   505    You can now create a bufferevent that is not yet connected to any
   506    host, and tell it to connect, either by address or by hostname.
   508    The functions to do this are bufferevent_socket_connect and
   509    bufferevent_socket_connect_hostname.
   511 5.7. Rate-limiting for bufferevents
   513    If you need to limit the number of bytes read/written by a single
   514    bufferevent, or by a group of them, you can do this with a new set of
   515    bufferevent rate-limiting calls.
   517 6. Other improvements
   519 6.1. DNS improvements
   521 6.1.1. DNS: IPv6 nameservers
   523    The evdns code now lets you have nameservers whose addresses are IPv6.
   525 6.1.2. DNS: Better security
   527    Libevent 2.0 tries harder to resist DNS answer-sniping attacks than
   528    earlier versions of evdns.  See comments in the code for full details.
   530    Notably, evdns now supports the "0x20 hack" to make it harder to
   531    impersonate a DNS server.  Additionally, Libevent now uses a strong
   532    internal RNG to generate DNS transaction IDs, so you don't need to supply
   533    your own.
   535 6.1.3. DNS: Getaddrinfo support
   537    There's now an asynchronous getaddrinfo clone, evdns_getaddrinfo(),
   538    to make the results of the evdns functions more usable.  It doesn't
   539    support every feature of a typical platform getaddrinfo() yet, but it
   540    is quite close.
   542    There is also a blocking evutil_getaddrinfo() declared in
   543    event2/util.h, to provide a getaddrinfo() implementation for
   544    platforms that don't have one, and smooth over the differences in
   545    various platforms implementations of RFC3493.
   547    Bufferevents provide bufferevent_connect_hostname(), which combines
   548    the name lookup and connect operations.
   550 6.1.4. DNS: No more evdns globals
   552    Like an event base, evdns operations are now supposed to use an evdns_base
   553    argument.  This makes them easier to wrap for other (more OO) languages,
   554    and easier to control the lifetime of.  The old evdns functions will
   555    still, of course, continue working.
   557 6.2. Listener support
   559    You can now more easily automate setting up a bound socket to listen for
   560    TCP connections.  Just use the evconnlistener_*() functions in the
   561    event2/listener.h header.
   563    The listener code supports IOCP on Windows if available.
   565 6.3. Secure RNG support
   567    Network code very frequently needs a secure, hard-to-predict random number
   568    generator.  Some operating systems provide a good C implementation of one;
   569    others do not.  Libevent 2.0 now provides a consistent implementation
   570    based on the arc4random code originally from OpenBSD.  Libevent (and you)
   571    can use the evutil_secure_rng_*() functions to access a fairly secure
   572    random stream of bytes.
   574 6.4. HTTP
   576    The evhttp uriencoding and uridecoding APIs have updated versions
   577    that behave more correctly, and can handle strings with internal NULs.
   579    The evhttp query parsing and URI parsing logic can now detect errors
   580    more usefully.  Moreover, we include an actual URI parsing function
   581    (evhttp_uri_parse()) to correctly parse URIs, so as to discourage
   582    people from rolling their own ad-hoc parsing functions.
   584    There are now accessor functions for the useful fields of struct http
   585    and friends; it shouldn't be necessary to access them directly any
   586    more.
   588    Libevent now lets you declare support for all specified HTTP methods,
   589    including OPTIONS, PATCH, and so on.  The default list is unchanged.
   591    Numerous evhttp bugs also got fixed.
   593 7. Infrastructure improvements
   595 7.1. Better unit test framework
   597    We now use a unit test framework that Nick wrote called "tinytest".
   598    The main benefit from Libevent's point of view is that tests which
   599    might mess with global state can all run each in their own
   600    subprocess.  This way, when there's a bug that makes one unit test
   601    crash or mess up global state, it doesn't affect any others.
   603 7.2. Better unit tests
   605    Despite all the code we've added, our unit tests are much better than
   606    before.  Right now, iterating over the different backends on various
   607    platforms, I'm getting between 78% and 81% test coverage, compared
   608    with less than 45% test coverage in Libevent 1.4.

mercurial