[ntp:bk-ntp-dev-send] BitKeeper diffs

Harlan Stenn stenn at deacon.udel.edu
Fri Apr 15 05:34:36 UTC 2011


#### ChangeSet ####
2011-04-15 00:12:03+00:00, davehart at shiny.ad.hartbrothers.com
  Automerge cleanup

==== ChangeLog ====
2011-04-15 00:12:03+00:00, davehart at shiny.ad.hartbrothers.com +1 -0
  Update embedded libevent to current 2.1 git HEAD.

--- 1.848/ChangeLog	2011-04-14 04:03:44 -04:00
+++ 1.849/ChangeLog	2011-04-14 20:12:03 -04:00
@@ -1,3 +1,4 @@
+* Update embedded libevent to current 2.1 git HEAD.
 (4.2.7p151) 2011/04/14 Released by Harlan Stenn <stenn at ntp.org>
 * Detect vsnprintf() support for "%m" and disable our "%m" expansion.
 * Add --enable-c99-sprintf to configure args for -noopenssl variety of

==== sntp/libevent/event.c ====
2011-04-15 00:12:03+00:00, davehart at shiny.ad.hartbrothers.com +2 -70
  Automerge cleanup

--- 1.3/sntp/libevent/event.c	2011-04-14 16:32:08 -04:00
+++ 1.4/sntp/libevent/event.c	2011-04-14 20:12:03 -04:00
@@ -374,61 +374,6 @@ gettime(struct event_base *base, struct 
 	return (evutil_gettimeofday(tp, NULL));
 }
 
-/** Set 'tp' to the current time according to 'base'.  We must hold the lock
- * on 'base'.  If there is a cached time, return it.  Otherwise, use
- * gettimeofday to find out the right time.
- * Return 0 on success, -1 on failure.
- */
-static int
-gettod(struct event_base *base, struct timeval *tp)
-{
-	EVENT_BASE_ASSERT_LOCKED(base);
-
-#if defined(_EVENT_HAVE_CLOCK_GETTIME) && defined(CLOCK_MONOTONIC)
-	if (base->tod_tv_cache.tv_sec) {
-		*tp = base->tod_tv_cache;
-		return (0);
-	}
-#else
-	if (base->tv_cache.tv_sec) {
-		*tp = base->tv_cache;
-		return (0);
-	}
-#endif
-
-	return (evutil_gettimeofday(tp, NULL));
-}
-
-int
-event_base_tv_cached(struct event_base *base, struct timeval *tv)
-{
-	int r;
-	if (!base) {
-		base = current_base;
-		if (!current_base) {
-#if defined(_EVENT_HAVE_CLOCK_GETTIME) && defined(CLOCK_MONOTONIC)
-			if (use_monotonic) {
-				struct timespec	ts;
-
-				if (clock_gettime(CLOCK_MONOTONIC, &ts) == -1)
-					return (-1);
-
-				tv->tv_sec = ts.tv_sec;
-				tv->tv_usec = ts.tv_nsec / 1000;
-				return (0);
-			}
-#endif
-
-			return evutil_gettimeofday(tv, NULL);
-		}
-	}
-
-	EVBASE_ACQUIRE_LOCK(base, th_base_lock);
-	r = gettime(base, tv);
-	EVBASE_RELEASE_LOCK(base, th_base_lock);
-	return r;
-}
-
 int
 event_base_gettimeofday_cached(struct event_base *base, struct timeval *tv)
 {
@@ -459,28 +404,15 @@ static inline void
 clear_time_cache(struct event_base *base)
 {
 	base->tv_cache.tv_sec = 0;
-#if defined(_EVENT_HAVE_CLOCK_GETTIME) && defined(CLOCK_MONOTONIC)
-	base->tod_tv_cache.tv_sec = 0;
-#endif
 }
 
 /** Replace the cached time in 'base' with the current time. */
 static inline void
 update_time_cache(struct event_base *base)
 {
-	clear_time_cache(base);
-	if (base->flags & EVENT_BASE_FLAG_NO_CACHE_TIME)
-		return;
-
-#if defined(_EVENT_HAVE_CLOCK_GETTIME) && defined(CLOCK_MONOTONIC)
-	gettod(base, &base->tod_tv_cache);
-	if (use_monotonic)
+	base->tv_cache.tv_sec = 0;
+	if (!(base->flags & EVENT_BASE_FLAG_NO_CACHE_TIME))
 		gettime(base, &base->tv_cache);
-	else
-		base->tv_cache = base->tod_tv_cache;
-#else
-	gettime(base, &base->tv_cache);
-#endif
 }
 
 struct event_base *

#### ChangeSet ####
2011-04-14 23:28:43+00:00, davehart at shiny.ad.hartbrothers.com
  overlooked file

==== sntp/libevent/evconfig-private.h.in ====
2011-04-14 23:28:10+00:00, davehart at shiny.ad.hartbrothers.com +43 -0
  BitKeeper file C:/ntp/ntp-dev-libevent-upstream/sntp/libevent/evconfig-private.h.in

--- /dev/null	2011-04-15 01:34:14 -04:00
+++ 1.1/sntp/libevent/evconfig-private.h.in	2011-04-14 19:28:10 -04:00
@@ -0,0 +1,43 @@
+/* evconfig-private.h template - see "Configuration Header Templates" */
+/* in AC manual.  Kevin Bowling <kevin.bowling at kev009.com */
+#ifndef _EVENT_EVCONFIG__PRIVATE_H
+#define _EVENT_EVCONFIG__PRIVATE_H
+
+/* Enable extensions on AIX 3, Interix.  */
+#ifndef _ALL_SOURCE
+# undef _ALL_SOURCE
+#endif
+/* Enable GNU extensions on systems that have them.  */
+#ifndef _GNU_SOURCE
+# undef _GNU_SOURCE
+#endif
+/* Enable threading extensions on Solaris.  */
+#ifndef _POSIX_PTHREAD_SEMANTICS
+# undef _POSIX_PTHREAD_SEMANTICS
+#endif
+/* Enable extensions on HP NonStop.  */
+#ifndef _TANDEM_SOURCE
+# undef _TANDEM_SOURCE
+#endif
+/* Enable general extensions on Solaris.  */
+#ifndef __EXTENSIONS__
+# undef __EXTENSIONS__
+#endif
+
+/* Define to 1 if on MINIX. */
+#ifndef _MINIX
+#undef _MINIX
+#endif
+
+/* Define to 2 if the system does not provide POSIX.1 features except with
+   this defined. */
+#ifndef _POSIX_1_SOURCE
+#undef _POSIX_1_SOURCE
+#endif
+
+/* Define to 1 if you need to in order for `stat' and other things to work. */
+#ifndef _POSIX_SOURCE
+#undef _POSIX_SOURCE
+#endif
+
+#endif

==== sntp/libevent/evconfig-private.h.in ====
2011-04-14 23:28:10+00:00, davehart at shiny.ad.hartbrothers.com +0 -0

#### ChangeSet ####
2011-04-14 19:55:12+00:00, davehart at shiny.ad.hartbrothers.com
  libevent 2.1 (prerelease git head bfdda26534ea66b847760720260a4b4d8fcefe58)

==== sntp/libevent/CommitLog ====
2011-04-14 19:54:05+00:00, davehart at shiny.ad.hartbrothers.com +18272 -0
    libevent 2.1 (prerelease git head bfdda26534ea66b847760720260a4b4d8fcefe58)

--- /dev/null	2011-04-15 01:34:14 -04:00
+++ 1.1/sntp/libevent/CommitLog	2011-04-14 15:54:05 -04:00
@@ -0,0 +1,18272 @@
+commit bfdda26534ea66b847760720260a4b4d8fcefe58
+Merge: d7c0ffa 1a21d7b
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Tue Apr 5 17:22:36 2011 -0400
+
+    Merge remote-tracking branch 'origin/patches-2.0'
+
+commit 1a21d7b840ea1011d4bef1675ee3c7309d48ab3e
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Tue Apr 5 17:21:12 2011 -0400
+
+    Fix the check for multicast or broadcast addresses in evutil_check_interfaces
+    
+    First of all, it is totally okay to have an address end with .255,
+    depending on what your netmask is, so we shouldn't reject a local
+    address if it ends with .255.
+    
+    Second, our check for ending with .255 was broken.  So was our check
+    for class-d addresses.
+    
+    Found by Dave Hart.
+
+commit d7c0ffa1c06cf8aa2b1caf99332f2669d30fcc74
+Merge: ddcca17 fc7f34b
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Tue Apr 5 17:19:00 2011 -0400
+
+    Merge remote-tracking branch 'origin/patches-2.0'
+
+commit fc7f34bd4dac0738a16e4d3732e997c83fd8f88c
+Merge: 0d6622e 637d17a
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Tue Apr 5 17:17:51 2011 -0400
+
+    Merge branch '20_socktype_protocol_nomem' into patches-2.0
+
+commit 637d17a1b975ad33334c64c5ce8d0a19898e5c14
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Tue Apr 5 16:32:39 2011 -0400
+
+    Check for allocation failures in apply_socktype_protocol_hack
+
+commit ddcca1760f7ef0fc9c4abf09a2af8aff6dec702e
+Merge: 7a91f73 0d6622e
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Mon Apr 4 15:09:47 2011 -0400
+
+    Merge remote-tracking branch 'origin/patches-2.0'
+
+commit 0d6622e26a83c1efac4a26a5b98e86ca61dc0a7f
+Author: Tomash Brechko <tomash.brechko at gmail.com>
+Date:   Thu Mar 31 19:11:10 2011 +0400
+
+    Fix the case when failed evhttp_make_request() leaved request in the queue.
+
+commit 218cf19743e3671924ec01edc9dc26be8b6f1ae8
+Author: Tomash Brechko <tomash.brechko at gmail.com>
+Date:   Thu Mar 24 15:52:34 2011 +0300
+
+    Fix subtle recursion in evhttp_connection_cb_cleanup().
+
+commit 272823f8b0fb3c5f752ea5ff79b9b223b4d1b453
+Author: Tomash Brechko <tomash.brechko at gmail.com>
+Date:   Wed Mar 23 12:05:33 2011 +0300
+
+    Reset outgoing connection when read data in idle state.
+    
+    Imagine server side is buggy and miscalculates Content-Length: in the
+    reply.  Data arriving in idle state shouldn't make us crash, instead we
+    can just reset the connection.
+
+commit 7a91f732beb72af5a7d8c6084e7a59ed5224c189
+Merge: 4ab2a89 c621359
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Wed Mar 23 16:34:58 2011 -0400
+
+    Merge remote branch 'origin/patches-2.0'
+
+commit c621359122c0b86f917407c6c544d51c4b49cd1b
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Wed Mar 23 16:32:42 2011 -0400
+
+    Add comment to configure.in to explain gc-sections test logic
+    
+    (Basically, we need access to conftest.err for the test to work properly.)
+
+commit 6bb23e4bb17701ccc319c76797e4673897db8f77
+Author: Dave Hart <hart at ntp.org>
+Date:   Wed Mar 23 16:22:57 2011 -0400
+
+    Fix for --gc-sections on NetBSD
+    
+    This patch fixes http://bugs.ntp.org/1844, works around
+    http://gnats.netbsd.org/cgi-bin/query-pr-single.pl?number=40401, by
+    improving the test for support of --gc-sections to run a program which
+    reads a file using stdio built with --gc-sections, instead of simply
+    link the binary.  This catches the buggy linker as the garbage
+    collection removes a tag NetBSD uses to distinguish its own elf
+    binaries from Linux ones, causing it to treat conftest as a Linux
+    binary and run it with the wrong syscall table.
+
+commit b5a1f9f74bd4ffa342e388897de895611d6ea9ca
+Author: Dave Hart <hart at ntp.org>
+Date:   Wed Mar 23 16:22:24 2011 -0400
+
+    Fix make distcheck & installation of libevent 1 headers
+    
+    libevent/Makefile.am corrects a typo (thanks to Harlan for spotting it
+    once we realized make distcheck was broken when building the libevent
+    tearoff).  The result was the include/ev*.h were not distributed nor
+    installed whether or not --disable-libevent-install was used.  This
+    was introduced with the final round (3/3) of
+    --disable-libevent-install patch from me.
+
+commit 4ab2a89dc73202f90a266979fadbb154df7dcd65
+Merge: f28084d 4b8f02f
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Sat Mar 12 12:12:35 2011 -0500
+
+    Merge remote branch 'origin/patches-2.0'
+
+commit 4b8f02f14751c6c2d53cad3597a711a1a008e07f
+Author: Christophe Fillot <cf at utc.fr>
+Date:   Sat Mar 12 12:08:19 2011 -0500
+
+    Fix incorrect assertions and possible use-after-free in evrpc_free()
+    
+    Original description:
+    
+      The following patch fixes incorrect assertions in evrpc_free():
+      evrpc_unregister_rpc() and evrpc_remove_hook() return 0 for success.
+    
+      Also, in evrpc_unregister_rpc(), it is better to free RPC structure
+      at the end: evrpc_free() uses rpc->uri as "name" parameter when
+      calling evrpc_unregister_rpc(), then rpc->uri is freed, but we have
+      "registered_uri = evrpc_construct_uri(name)". So at this time "name"
+      is invalid.
+
+commit f28084ddda02886a97943e36099c4a523f72af0b
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Mon Mar 7 23:18:07 2011 -0500
+
+    munge the debug_lock signature before freeing it: it might help us catch use-after-free
+
+commit b4a29c0a0fbd25a2de8a16b3049677fb2b8e1645
+Author: Dave Hart <hart at ntp.org>
+Date:   Mon Mar 7 23:08:42 2011 -0500
+
+    Add a magic number to debug_locks to better catch lock-coding errors.
+    
+    Original description by Dave Hart:
+    
+     [This patch contains] the addition of a signature field to debug_lock
+     initialized by the alloc routine and verified by the rest, to catch
+     invalid lock pointers sooner. That helped me track down a nasty
+     problem I had before adding the time.h include to
+     libevent-internal.h, where different .c files had different ideas of
+     whether event_base had a tod_tv_cache member depending on which
+     included time.h before libevent-internal.h.
+
+commit 2a83ecc8496c1470c8a29fad5df1e89a9d1d9864
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Mon Mar 7 23:01:54 2011 -0500
+
+    In the 2.1 branch, let's try out lazy gettimeofday/clock_gettime comparison
+    
+    For now, we'll only check for gettimeofday jumps once every 5 seconds.
+    Let's see how that works.
+    
+    This reverts commit 5209fadfd07af3f3379ac607582c37933b33e044.
+
+commit 4560b31bdf1ed633518ebbdd0b3e11ffa1272cf5
+Merge: c538959 5209fad
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Mon Mar 7 23:00:45 2011 -0500
+
+    Merge remote branch 'origin/patches-2.0'
+    
+    Conflicts:
+    	event-internal.h
+
+commit 5209fadfd07af3f3379ac607582c37933b33e044
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Mon Mar 7 22:59:19 2011 -0500
+
+    Disable lazy gettimeofday/clock_gettime comparison for now
+
+commit 9193dc4ecd12be779654e045a14ab32e1e616ddd
+Merge: c8baac9 a459ef7
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Mon Mar 7 22:45:10 2011 -0500
+
+    Merge branch '20_timescale' into patches-2.0
+
+commit c53895944dfefd0f8586d2639d400e0ffe956562
+Merge: 74bf57a c8baac9
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Mon Mar 7 21:59:47 2011 -0500
+
+    Merge remote branch 'origin/patches-2.0'
+
+commit c8baac90231ab3dc4179b302568c640ab4ae05c8
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Mon Mar 7 21:55:47 2011 -0500
+
+    Followup for Tomash Brechko's http patch
+    
+    This patch makes bufferevent_disable_hard() non-public, and
+    adds a comment about what it's for and why it's used.
+
+commit 5dc566284d736cb692f88685a3bcec70595a7689
+Author: Tomash Brechko <tomash.brechko at gmail.com>
+Date:   Thu Feb 24 12:30:40 2011 +0300
+
+    Workaround libevent bug
+    https://sourceforge.net/tracker/index.php?func=detail&aid=3078187&group_id=50884&atid=461324
+    
+    The problem is that bufferevent_disable() doesn't disable EV_WRITE
+    when 'connecting' flag is set.  However from evhttp_connection_reset()
+    we want to disable EV_WRITE for sure (we are closing the socket next).
+    So we add bufferevent_disable_hard(), which acts like
+    bufferevent_disable(), but resets 'connecting' flag before the call to
+    the actual handler.
+    
+    TODO: bufferevent_disable_hard() shouldn't be public, remove it from
+    event2/bufferevent.h.
+
+commit a459ef70ec82eaa07680b0a4bc25e5d05efcc6fb
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Thu Mar 3 15:34:22 2011 -0500
+
+    Have event_base_gettimeofday_cached() always return wall-clock time
+    
+    Based on code by Dave Hart
+
+commit 74bf57a63ed5ae48d903b11235803984cefd6962
+Merge: 83fb674 ab008c7
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Thu Mar 3 12:58:06 2011 -0500
+
+    Merge remote-tracking branch 'origin/patches-2.0'
+
+commit ab008c7d0588887e88dffd35986005150e5a53e6
+Author: Dave Hart <hart at ntp.org>
+Date:   Thu Mar 3 12:57:17 2011 -0500
+
+    Make --no-libevent-install apply to event1 headers too
+
+commit 83fb674a75653adae863e1451d2327db58ff8a5f
+Merge: 975eaca b5ab955
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Fri Feb 25 10:42:58 2011 -0500
+
+    Merge remote branch 'origin/patches-2.0'
+
+commit b5ab955531c2008d33e46437ec926f5e0f0df3cd
+Author: Dave Hart <hart at ntp.org>
+Date:   Fri Feb 25 10:35:12 2011 -0500
+
+    Make --no-libevent-install apply to headers too
+
+commit 975eacad363aea1781f563b55d6a4e9aaf95f456
+Merge: e2e3c32 3f79a3a
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Wed Feb 23 11:25:09 2011 -0500
+
+    Merge remote branch 'origin/patches-2.0'
+
+commit 3f79a3a01a4a39fcaf24486f828a2b115b0542c0
+Author: Sebastian Hahn <sebastian at torproject.org>
+Date:   Wed Feb 23 09:19:08 2011 +0100
+
+    Continue AM_CFLAGS to AM_CPPFLAGS correction
+    
+    9c469db300e1b270a93c6b04c1709ac0f7751136 had started with the conversion
+    but left out another instance of incorrectly used AM_CFLAGS.
+    
+    Dave Hart provided the suggestion for this fix.
+
+commit e2e3c3223937aaa0fadbe52c95b06ccbe4c421a6
+Merge: 6350e6c 5dc200b
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Tue Feb 22 18:55:05 2011 -0500
+
+    Merge remote branch 'origin/patches-2.0'
+
+commit 5dc200b7c840188288facc7e9803f51d6396697f
+Merge: 2fba21d 95060b5
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Tue Feb 22 18:53:55 2011 -0500
+
+    Merge branch '20_uri_nonconformant' into patches-2.0
+
+commit 6350e6c4c5fab254d67e86e85a5ade70e2e32c36
+Author: Constantine Verutin <cverutin at gmail.com>
+Date:   Tue Feb 22 17:52:50 2011 -0500
+
+    Add new evhttp_{connection_}set_timeout_tv() functions to set finger-grained http timeouts
+
+commit a11c30b5feda088ad79b5fb71370616a7c3a4f30
+Merge: 8f5cca4 2fba21d
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Tue Feb 22 17:41:27 2011 -0500
+
+    Merge remote branch 'origin/patches-2.0'
+    
+    This branch is the big one that merges all the ntp folks' changes
+    
+    Conflicts:
+    	configure.in
+
+commit 2fba21d8676f941b0b7d61850f440b12f0fb61cc
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Tue Feb 22 16:20:42 2011 -0500
+
+    Make -ffunction-sections off-by-default in 2.0.x
+    
+    I don't see how this can burn anybody, but I don't want to take
+    chances: new build options are something that should be done in an
+    alpha.  To turn -ffunction-sections on, pass
+    --enable-function-sections to configure.
+
+commit 7d913f4c8e98a22e75ab2ddea6587f00ef050dbf
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Tue Feb 22 16:14:16 2011 -0500
+
+    Remove nonfunctional enable_libevent_(install|regress)_def variables
+
+commit 15b2408c9bc4f2b307df8fdecf3ef5a7401f60d2
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Tue Feb 22 16:13:49 2011 -0500
+
+    Use $(), not @@, for LIBEVENT_GC_SECTIONS
+
+commit f95bafb60854d07dd8af5033d55656bc371c43f7
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Tue Feb 22 00:34:49 2011 -0500
+
+    Be explicit about how long event loops run in event.h documentation
+
+commit 039b9bd0e3ab6e02cd9709d213f1abf32dbd13f0
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Tue Feb 22 00:31:56 2011 -0500
+
+    Use %s with printf in test.sh
+
+commit 9c469db300e1b270a93c6b04c1709ac0f7751136
+Author: Dave Hart <hart at ntp.org>
+Date:   Sun Feb 13 02:27:42 2011 -0500
+
+    Correct an AM_CFLAGS to an AM_CPPFLAGS in test/Makefile.am
+
+commit 49e9bb7fb014a84de677f265cedac58f4d8a8ad5
+Author: Dave Hart <hart at ntp.org>
+Date:   Sun Feb 13 02:05:04 2011 -0500
+
+    Add configure options to disable installation, regression tests
+    
+    The main reason for disabling installation is if you're building
+    libevent as a subpackage for embedding: you want to have your main
+    package's "make all" build libevent, but you don't want your main
+    package's "make install" to install libevent.
+
+commit 0b334799d6c48a5830774ee1f62fc2540810051e
+Author: Harlan Stenn <stenn at ntp.org>
+Date:   Sun Feb 13 02:00:10 2011 -0500
+
+    Add -D_OSF_SOURCE to fix hpux builds
+
+commit 0965c563568e49448955aea30bd43df30e544b92
+Author: Dave Hart <hart at ntp.org>
+Date:   Sun Feb 13 01:50:40 2011 -0500
+
+    Use the gcc -ffunction-segments feature to allow gc when linking with static libevent
+
+commit af08a94085e49e6942835b4c6b50a774536d5b5b
+Author: Harlan Stenn <stenn at ntp.org>
+Date:   Sun Feb 13 01:42:58 2011 -0500
+
+    Check for getservbyname even if not on win32.
+
+commit 833e5e9fcd3d06adfbd7c47d4f1fe42f46fbb26b
+Author: Harlan Stenn <stenn at ntp.org>
+Date:   Sun Feb 13 01:39:10 2011 -0500
+
+    Fix autoconf bracket issues; make check for getaddrinfo include netdb.h
+
+commit a317c068fe573050677599736a59b0b101bfa07c
+Author: Harlan Stenn <stenn at ntp.org>
+Date:   Sun Feb 13 01:34:40 2011 -0500
+
+    Skip check for zlib if we have no zlib.h
+
+commit 05a2c22fee8821e7d36837e1b3cba3b105dd5dfc
+Author: Harlan Stenn <stenn at ntp.org>
+Date:   Sun Feb 13 01:30:37 2011 -0500
+
+    Make test-eof fail with a timeout if we never get an eof.
+    
+    Previously, it would just wait forever.
+
+commit 4eb281c8a96e246b7493570a89686f8c56c75853
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Sun Feb 13 01:29:54 2011 -0500
+
+    FIX: comment internal headers used in sample code.
+
+commit eb692be9c8ea2d52e28a0b7b8258bd76483c3f3c
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Sun Feb 13 01:27:06 2011 -0500
+
+    NM: Fix sample/http-server ipv6 fixes
+    
+    Fix 1: Use #include "../xyz" rather than #include <../xyz>
+    
+    Fix 2: util-internal.h includes ipv6-internal.h, which in turn defines
+           a replacement AF_INET6 on platforms that don't have it.  As such,
+           the AF_INET6 checks shouldn't be needed.  (right?)
+
+commit bbf55150b65a5de2edf7c77e3acd1c52caf364a9
+Author: Harlan Stenn <stenn at ntp.org>
+Date:   Sun Feb 13 01:25:33 2011 -0500
+
+    Include util-internal.h as needed to build on platforms with no sockaddr_storage
+
+commit 10c834c4dfda193c031a6bab9e86e0dcb818a061
+Author: Harlan Stenn <stenn at ntp.org>
+Date:   Sun Feb 13 01:22:25 2011 -0500
+
+    Include arpa/inet.h as needed on HPUX
+
+commit 8f5cca47dd6a74e13e358a911ff580d0ba94fb46
+Merge: 9f5bf66 63a715e
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Mon Feb 21 23:27:23 2011 -0500
+
+    Merge remote branch 'origin/patches-2.0'
+
+commit 63a715e125cd6ad24b672411b10946ff89d113fe
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Mon Feb 21 23:25:13 2011 -0500
+
+    Correctly detect and stop non-chunked http requests when the body is too long
+    
+    Based on analysis and code from Bas Verhoeven and from
+    Constantine Verutin.
+
+commit deb2f73879102b4a65df772972910f62e3a64649
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Fri Feb 18 16:17:22 2011 -0500
+
+    fix spelling mistake in whatsnew-2.0.txt
+
+commit f665924649b3d6306eb3c24df8f77c3671b7a082
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Tue Feb 15 11:33:40 2011 -0500
+
+    Correct evhttp_del_accept_socket documentation on whether socket is closed
+    
+    Thanks to Constantine Verutin for pointing this out.
+
+commit 0c9be76804608dbff0bd8d4b96c633f4780437cf
+Merge: 926f816 b42ce4b
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Sun Feb 13 02:51:27 2011 -0500
+
+    Merge branch '20_evport_pollhup' into patches-2.0
+
+commit 926f8165a72f58f59583d21a091ffaf6bfd307b6
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Sun Feb 13 00:54:21 2011 -0500
+
+    Clarify event_set_mem_functions doc
+
+commit 95060b54fe9dba5ec5e22bee3454a1e83b888d48
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Sun Feb 13 00:41:22 2011 -0500
+
+    Make URI parser able to tolerate nonconformant URIs.
+    
+    If the EVHTTP_URI_NONCONFORMANT flag is passed in (which it is when
+    parsing URIs we get over the wire), then we relax our checks a lot.
+    Specifically, we do nothing to check for correct characters in the
+    path, query, and fragment parts of such a URI.
+    
+    We could do much more here: we could relax our hostname requirements,
+    deal with spaces differently/better, trap some errors but not others,
+    etc.  But this should solve the worst user-agent compatibility issues
+    for now; the other issues can wait for a later release.
+
+commit 9f5bf6639625f66055c1858551dd6d2208809ce6
+Merge: 4cb3f53 f736198
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Tue Feb 8 22:24:51 2011 -0500
+
+    Merge remote branch 'origin/patches-2.0'
+
+commit f73619808622c6267aee1ee6cbeb35e2d02c460f
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Tue Feb 8 22:24:06 2011 -0500
+
+    Fix a type error in our (unused) arc4random_stir()
+
+commit 4cb3f53a6bb26376e547ad14bf4fb17c7731a309
+Merge: 86f02d7 f663112
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Thu Feb 3 14:04:25 2011 -0500
+
+    Merge remote branch 'origin/patches-2.0'
+
+commit f663112fa238a3f5a1bdfddfd26c17e625e182df
+Author: Sebastian Hahn <sebastian at torproject.org>
+Date:   Thu Oct 14 20:15:04 2010 +0200
+
+    Fix warnings about AC_LANG_PROGRAM usage
+    
+    Autoconf 2.68 introduced some new warnings that were triggered during
+    autogen.sh. Fix those.
+
+commit 86f02d75335ab0b6238865fcbabc414273efbb7c
+Merge: 2284588 b4f89b6
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Tue Feb 1 02:12:46 2011 -0500
+
+    Merge remote branch 'origin/patches-2.0'
+
+commit b4f89b608acfdaafb3c14d753a5055ca9f291182
+Author: Dave Hart <hart at ntp.org>
+Date:   Tue Feb 1 01:15:48 2011 -0500
+
+    Fix test.sh output on solaris
+    
+    Solaris echo -n doesn't omit newlines, but printf omits newlines in
+    more places.
+
+commit c1260b0e7ccda55b1ab20f59e9c271e8f4576d40
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Mon Jan 31 17:36:49 2011 -0500
+
+    Do not check for gethostbyname_r versions if we have getaddrinfo
+
+commit 22845886c6561c26b9aa29cfc01859946d39d811
+Merge: da13d64 3c8f4e7
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Mon Jan 31 16:45:23 2011 -0500
+
+    Merge remote branch 'origin/patches-2.0'
+
+commit 3c8f4e758e5a636e79f518b70319b115c39b1f23
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Mon Jan 31 16:44:06 2011 -0500
+
+    Add compile-time check for AF_UNSPEC==PF_UNSPEC
+
+commit 6092f1265f956f1968185bf669b8730edd7e3eaa
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Mon Jan 31 16:37:27 2011 -0500
+
+    Fix http unit test on non-windows platforms without getaddrinfo
+
+commit cb921139790bed29427fdd5c07e804f26ea4c334
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Mon Jan 31 16:32:05 2011 -0500
+
+    Build on systems without AI_PASSIVE
+
+commit 713c254d21449e73b2877d6f69ee6c41aa56f182
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Mon Jan 24 18:55:10 2011 -0500
+
+    Try to build correctly on platforms with no IPv6 support
+
+commit 9184563e49562f07efdfcb76618b74822f03e273
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Mon Jan 24 18:29:20 2011 -0500
+
+    Build correctly on platforms without sockaddr_storage
+
+commit 453317b28cf8286a6bb849ab425fcce74d4148f3
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Mon Jan 24 18:22:32 2011 -0500
+
+    Fall back to sscanf if we have no other way to implement strtoll
+
+commit da13d64486b6888465dae8df2edacf101a593f26
+Merge: f1f8514 3267703
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Mon Jan 24 18:02:11 2011 -0500
+
+    Merge remote branch 'origin/patches-2.0'
+
+commit 3267703658799e76ee661d5354bc5cff69b75863
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Mon Jan 24 17:42:23 2011 -0500
+
+    Make --enable-gcc-warnings a no-op if not using gcc
+
+commit f1f85147f364628d27c506774168482156cbcf17
+Author: Dave Hart <hart at ntp.org>
+Date:   Mon Jan 24 15:50:25 2011 -0500
+
+    Allow use of --enable-silent-rules for quieter compilation with automake 1.11
+
+commit 8b0afe96eb3436bfa286a1fb2059f137458139b7
+Merge: b647e0b 0c0ec0b
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Wed Jan 12 21:41:58 2011 -0500
+
+    Merge remote branch 'origin/patches-2.0'
+
+commit 0c0ec0be2ba977b8133294e27b076a65a2d65711
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Wed Jan 12 20:28:47 2011 -0500
+
+    Correctly free selectop fields when select_resize fails in select_init
+
+commit 83e805a41554a9e69ab7d2d75e56c30f3147ffa6
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Fri Jan 7 13:18:09 2011 -0500
+
+    Handle resize failures in the select backend better.
+
+commit 3f8d22a123aef2698ce2e7d6ca1ad96d13760cef
+Author: Jardel Weyrich <jweyrich at gmail.com>
+Date:   Sat Dec 18 02:40:22 2010 -0200
+
+    Use event_err() only if the failure is truly unrecoverable.
+
+commit 666b09669187daad7107b340dd7dde50070a2feb
+Author: Jardel Weyrich <jweyrich at gmail.com>
+Date:   Sat Dec 18 01:07:27 2010 -0200
+
+    Detect and handle more allocation failures.
+
+commit b647e0bc94a6c1a32767f00b6c19a22483720c4f
+Merge: f1e9a7e ded0a09
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Fri Jan 7 12:31:30 2011 -0500
+
+    Merge remote branch 'kev009/21_ac_use_system_extensions'
+
+commit ded0a0907b5b49ba2ae4783edc24a465f1b66418
+Author: Kevin Bowling <kevin.bowling at kev009.com>
+Date:   Fri Jan 7 00:41:37 2011 -0700
+
+    Add evconfig-private to remaining files
+
+commit fd7b5a81eb635dee2f48600fe3e96698b358c077
+Author: Kevin Bowling <kevin.bowling at kev009.com>
+Date:   Fri Jan 7 00:37:05 2011 -0700
+
+    Shell hack for weird mkdir -p commands
+
+commit c13e18591457ed8ea2042d8c92bca5e340cfd5df
+Author: Kevin Bowling <kevin.bowling at kev009.com>
+Date:   Fri Jan 7 00:34:22 2011 -0700
+
+    Remove use and reference to event-private.h
+
+commit f1e9a7e7e442f80b61a2dd6f0c8f1f5ce456b033
+Merge: ac69042 0144886
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Thu Jan 6 12:44:45 2011 -0500
+
+    Merge remote branch 'origin/patches-2.0'
+
+commit 0144886e7e9fdfb5dc630dcf0567846b952994bd
+Author: Trond Norbye <trond.norbye at gmail.com>
+Date:   Sun Jan 2 10:17:15 2011 +0100
+
+    Check for POLLERR, POLLHUP and POLLNVAL for Solaris event ports
+
+commit f964b7215ac2a3dc0edaef6c130f67e31576f738
+Author: Kevin Bowling <kevin.bowling at kev009.com>
+Date:   Mon Jan 3 15:44:26 2011 -0700
+
+    Prefer the ./configure evconfig-private.h in MinGW, just in case.
+
+commit ad03952edfc2e08e2743c09389840412fcf81958
+Author: Kevin Bowling <kevin.bowling at kev009.com>
+Date:   Mon Jan 3 15:09:21 2011 -0700
+
+    Backport libevent to vanilla Autoconf 2.59 (as used in RHEL5)
+
+commit b3651d1576606ceb2dd27ec5fcd99beaa8e312c8
+Author: Kevin Bowling <kevin.bowling at kev009.com>
+Date:   Sun Jan 2 08:48:12 2011 -0700
+
+    Add an evconfig-private.h stub for Win32.
+
+commit dc628c030469f8671943b5cb86ff8ec179f1a7b7
+Author: Kevin Bowling <kevin.bowling at kev009.com>
+Date:   Sun Jan 2 08:47:46 2011 -0700
+
+    Add an include guard
+
+commit 0915ca0aa64edac92b05c2dfcf6b11d1b1753321
+Author: Kevin Bowling <kevin.bowling at kev009.com>
+Date:   Sun Jan 2 08:43:45 2011 -0700
+
+    Include evconfig-private.h in internal files for great good.
+
+commit f6d66bc7167a5b1249cf5a82196547ebe1077d83
+Author: Kevin Bowling <kevin.bowling at kev009.com>
+Date:   Sun Jan 2 08:05:33 2011 -0700
+
+    Fix a comment warning and add evconfig-private.h to .gitignore
+
+commit 9b27b30720935d1bdc911d7f7823a4cebd359eef
+Author: Kevin Bowling <kevin.bowling at kev009.com>
+Date:   Sun Jan 2 08:04:12 2011 -0700
+
+    Remove event-private.h and switch to evconfig-private.h
+
+commit 868f88874ff0c14530368a3077462a92a47eae9f
+Author: Kevin Bowling <kevin.bowling at kev009.com>
+Date:   Sun Jan 2 07:51:23 2011 -0700
+
+    Use a Configuration Header Template for evconfig-private.h
+
+commit edf62dddbc3b9ced06d10de041d682c18965413e
+Author: Kevin Bowling <kevin.bowling at kev009.com>
+Date:   Sun Jan 2 07:29:45 2011 -0700
+
+    Revert "evconfig-private.h with recusive configure subdirs"
+    
+    This reverts commit ed53d5ef8053af08186ef80dfc1647cff769fac8.
+
+commit ed53d5ef8053af08186ef80dfc1647cff769fac8
+Author: Kevin Bowling <kevin.bowling at kev009.com>
+Date:   Sun Jan 2 06:35:05 2011 -0700
+
+    evconfig-private.h with recusive configure subdirs
+
+commit ea8fa4cb231a674797ea8efe23f68951db505159
+Author: Kevin Bowling <kevin.bowling at kev009.com>
+Date:   Sun Jan 2 05:14:41 2011 -0700
+
+    Add AC_GNU_SOURCE to the fallback case.
+
+commit ac6904241be9bf56e1de7d6e1f780134359dbd2e
+Merge: 41bb1ca cb8059d
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Sun Jan 2 00:59:20 2011 -0500
+
+    Merge remote branch 'origin/patches-2.0'
+
+commit cb8059d2d399a2db5f3de1e911b5b9947d6c7339
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Sat Jan 1 21:37:21 2011 -0500
+
+    Fix compilation on Windows with NDEBUG
+    
+    Dongsheng Song reports that when building on windows with NDEBUG, you
+    run into an attempt to do EVUTIL_ASSERT(x) where x is a bitfield,
+    which turns into _EVUTIL_NIL_CONDITION(x), which takes sizeof(x),
+    which is illegal.  This patch fixes _EVUTIL_NIL_CONDITION to work on
+    bitfields too.
+
+commit b42ce4bf08c8e70bf6b357d4e2e95885fff0d530
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Sat Jan 1 21:17:31 2011 -0500
+
+    Fix evport handling of POLLHUP and POLLERR
+    
+    In other backends, they make _all_ events trigger; with evport they
+    previously triggered nothing.  Found by Phua Keat Yee.
+
+commit c51ef9307ad04d8e98487d1331f1910941e50390
+Author: Kevin Bowling <kevin.bowling at kev009.com>
+Date:   Wed Dec 22 23:24:01 2010 -0700
+
+    Eliminate a couple more manual internal _GNU_SOURCE defines
+
+commit 3b265412b7fce5e2e56bf130224c38cfc6d3bed2
+Author: Kevin Bowling <kevin.bowling at kev009.com>
+Date:   Wed Dec 22 23:08:10 2010 -0700
+
+    Remove internal usage of _GNU_SOURCE
+
+commit 2c5566a9c720e49a0c49ab5eded26bebb330783e
+Author: Kevin Bowling <kevin.bowling at kev009.com>
+Date:   Wed Dec 22 23:00:59 2010 -0700
+
+    Add event-private.h to noinst_HEADERS
+
+commit 321b558793db13ed3e57bb615d7811add6e10d6a
+Author: Kevin Bowling <kevin.bowling at kev009.com>
+Date:   Wed Dec 22 22:53:03 2010 -0700
+
+    Filter '# define' statements from autoconf and generate event-private.h
+
+commit 1fa7dbe1e84f659f295652858b1a9d76cb4c074a
+Author: Kevin Bowling <kevin.bowling at kev009.com>
+Date:   Wed Dec 22 22:11:26 2010 -0700
+
+    Add AC_USE_SYSTEM_EXTENSIONS to configure.in.
+    Requires follow on patches for correctness and robustness.
+
+commit 41bb1cae794b6484242c841f17084cb9cfa06da6
+Merge: 076680a 0aad014
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Mon Dec 20 19:30:13 2010 -0500
+
+    Merge branch 'file_offset_v2'
+
+commit 0aad01436af27c5807d48701028020bb51cba387
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Mon Dec 20 18:40:03 2010 -0500
+
+    Refactor addfile tests; add test for big files and for offsets
+
+commit 3f405d2d4b583a4211a685e6425b1d7fc5797538
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Mon Oct 25 12:29:39 2010 -0400
+
+    Add CreateFileMapping file_segment implementation for win32
+
+commit c2d9884a6adbfcb2c95421671817cd00c5f4d8e5
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Mon Oct 25 12:10:10 2010 -0400
+
+    Add support for mmaps with nonzero offset values.  Needs testing.
+
+commit e72afae068c31c62fa125f99b9c5102ba2e7ec7c
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Thu Oct 21 19:45:49 2010 -0400
+
+    Add evbuffer_add_file_segment() so one fd can be used efficiently in more than one evbuffer_add_file at a time
+
+commit 076680abe495dc17a330534e45c4cc6d985a7d50
+Merge: b8b8aa5 d4970d4
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Thu Dec 16 14:37:15 2010 -0500
+
+    Merge branch 'epoll_table_v2'
+
+commit d4970d4edde9ebf985e7272c8e932e570fcb10de
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Thu Dec 16 14:36:09 2010 -0500
+
+    Reindent epoll_apply_one_change()
+
+commit 2d55a190e128cf9277334249de431facb6343866
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Thu Dec 16 14:25:04 2010 -0500
+
+    Clean up error handling in epoll_apply_one_change() a little
+    
+    The old code was more or less:
+       if (op == X && errno == FOO) {
+         ...
+       } else if (op == Y && errno == BAR) {
+         ...
+       }
+    but really we wanted to do a switch (op) to avoid needless checks
+    and branches.
+    
+    This patch leaves the indentation a little weird so as to make it
+    easier to see what changed; the next patch will fix the indentation.
+
+commit 8c83eb6948e3461aa7493a0e29468eec6ccea7b6
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Sun Oct 24 12:53:52 2010 -0400
+
+    Replace big chain of if/thens in epoll.c with a table lookup
+    
+    This should save a bunch of branches by doing instead a lookup in a
+    nice static table.
+    
+    To ensure correctness, the table is generated from a Python script,
+    included with this commit.
+
+commit b8b8aa560c038c6f0c22a574d99d314a1f4a3b7a
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Thu Sep 2 17:52:20 2010 -0400
+
+    Use GetSystemTimeAsFileTime to implement gettimeofday on win32.
+    
+    It is (in my benchmarks) way faster than _ftime, though the
+    conversion process is not so straightforward.  In theory, it can
+    have a better granularity too, though in practice who knows what
+    you're getting.
+
+commit 04ba27ebf252746a3fdb79422cccd36f1af4be82
+Author: Mike Smellie <mike.j.smellie at gmail.com>
+Date:   Mon Jul 19 14:18:31 2010 +1200
+
+    Use current event set rather than current pending change when deciding whether to no-op a del
+    
+    This alters event_changelist_del to quash deletion of events that
+    didn't exist in the first place.
+    
+    As far as I can see, the add,delete, dispatch case described in the
+    original comment will never happen.  The recorded change is a single
+    operation, not a queue.  This seems to leave actions to delete
+    events that never existed as the real targets for no-oping
+
+commit 2570ae50d3ecd6c9ba5304c20b8f204627162243
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Thu Dec 16 12:59:22 2010 -0500
+
+    Bump version in master to 2.1.0-alpha-dev
+
+commit 05f0195dd94fa8a84a2006bda8900f5f6b30cd40
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Thu Dec 16 12:57:23 2010 -0500
+
+    Bump version to 2.0.10-stable-dev
+
+commit 5a12d8359727e8f10d08f8cd2b36c9f78747908f
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Wed Dec 15 14:31:08 2010 -0500
+
+    Add changelog for 2.0.10-stable
+
+commit d34d21d959974682e2d163f0143806890b5c123a
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Wed Dec 15 14:30:04 2010 -0500
+
+    Add more acknowledgements to the readme for 2.0.10-stable
+
+commit bffc411ed64313d04b01248fbbdb92b4ce78d995
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Wed Dec 15 14:29:50 2010 -0500
+
+    Set the version to 2.0.10-stable
+
+commit b63ab1776b3bbf3fe47406d0ca9639b299c4348d
+Author: Evan Jones <evanj at mit.edu>
+Date:   Mon Dec 6 14:17:44 2010 -0500
+
+    EVUTIL_ASSERT: Use sizeof() to avoid "unused variable" warnings.
+
+commit 18adc3f0159949a628b4e77dfeed857cc4b924a4
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Thu Dec 9 12:17:58 2010 -0500
+
+    Add stuff to whatsnew based on reading include changes since August.
+
+commit 57689c4484ba3fd098739bcea1557c329a8fa16b
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Thu Dec 9 12:17:11 2010 -0500
+
+    Document that the cpu_hint is only used on Windows with IOCP for now
+
+commit bb0d2b4e85dcb674ecee0e4cb4db18d03f64d4d9
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Thu Dec 9 11:47:54 2010 -0500
+
+    Consistentize tabs
+
+commit 22f4af6580bb330c073350580fc7e49d1051a8cf
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Thu Dec 9 11:43:12 2010 -0500
+
+    Remove end-of-line whitespace
+
+commit 74f75758cbc942b748b4aff271871e51def93f89
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Thu Dec 9 11:40:35 2010 -0500
+
+    tweak readme, whatsnew
+
+commit 7011f9ec1f96f8fa2939beec685e292c57e5addf
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Tue Dec 7 11:45:14 2010 -0500
+
+    Fix a signed/unsigned comparison in the last commit
+
+commit d23839fc6e30e265e139d763d7155b14934bab0a
+Author: Constantine Verutin <cverutin at gmail.com>
+Date:   Tue Dec 7 11:43:52 2010 -0500
+
+    Reject overlong http requests early when Expect:100-continue is set
+
+commit c0bf63cecbaa8ce061bd3f64978445fdf90e82e6
+Author: Evan Jones <evanj at mit.edu>
+Date:   Thu Dec 2 14:13:33 2010 -0500
+
+    tests: Use relative includes ("") instead of system includes (<>)
+
+commit 4f332091c38ac73a05e3d2b148cd9975799afbcf
+Author: Evan Jones <evanj at mit.edu>
+Date:   Thu Dec 2 14:09:52 2010 -0500
+
+    tests: Use new event2 headers instead of old compatibility headers.
+
+commit fbe64f216cbcf3980e436ca6bb708416c4d856a4
+Author: Evan Jones <evanj at mit.edu>
+Date:   Thu Dec 2 10:26:12 2010 -0500
+
+    Use relative includes instead of system includes consistently.
+
+commit ef5e65a484406586c161f3e7bf7eafc162ee858e
+Author: Evan Jones <evanj at mit.edu>
+Date:   Thu Dec 2 10:27:06 2010 -0500
+
+    bufferevent-internal.h: Use the new event2/util.h header, not evutil.h
+
+commit 5beeec9d43cbf7de700a9a0fd7d144a341e102c2
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Wed Dec 1 21:28:03 2010 -0500
+
+    Correctly notify the main thread when activating an event from a subthread
+
+commit 2599b2d5f55cdb36e0601c41cea0f3b0ecd9dc52
+Author: Kelly Brock <Kerby at inocode.com>
+Date:   Tue Nov 30 11:34:26 2010 -0500
+
+    Minor fix for IOCP shutdown handling fix
+    
+    Call setsockopt() on the actual new socket, not on as->s, which was
+    set to INVALID_SOCKET.
+
+commit 2b0b06d7a3f5dacff55df382094f32cc8b9516f7
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Tue Nov 30 02:19:25 2010 -0500
+
+    Increment version to 2.0.9-rc-dev
+
+commit ce46db99b94389a8fed0248f64f88d047cdac416
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Tue Nov 30 01:21:00 2010 -0500
+
+    Give the correct date for 2.0.9-rc in the changelog
+
+commit 9ce4cc4ed9a580f131bf857e69a820eaa818a2af
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Tue Nov 23 11:17:24 2010 -0500
+
+    Increment version to 2.0.9-rc
+
+commit 79957b89d6dd446add398de269f5507e607aaa9d
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Tue Nov 23 11:17:06 2010 -0500
+
+    Bump VERSION_INFO to 5:0:0
+
+commit 0c54f17605c1637b5c24ab6c0a8354bdc9fab482
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Tue Nov 23 11:08:30 2010 -0500
+
+    Changelog and acknowledgments for 2.0.9-rc
+
+commit 13fd242ddba16bc02c1e54c7209b4be4d85ac906
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Tue Nov 30 00:53:16 2010 -0500
+
+    Fix win32 build of http-server.c with unicode enabled
+
+commit 04861d5e62d42e9626c08d74c43b1050e28c8858
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Tue Nov 30 00:05:54 2010 -0500
+
+    Correctly detect timeouts during http connects
+
+commit 0faaa395921e3da1da5202befd849614c6e9c37c
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Mon Nov 29 22:44:18 2010 -0500
+
+    Try to fix an assertion failure related to close detection
+    
+    f700566c removed a line from evhttp_connection_stop_detectclose that
+    cleared the EVHTTP_CON_CLOSEDETECT flag.  I think this was an
+    accident, and suspect that it may be the cause of bug 3069555.
+
+commit 29f7623c82207914b1ff3123bb1eec3745e3dab2
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Mon Nov 29 22:14:54 2010 -0500
+
+    Possible crash fix when freeing an underlying bufferevent of an openssl bufferevent
+
+commit 0c4d54598b12ce08ba438b14861984a2501b7dde
+Merge: 18d0327 fa9305f
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Mon Nov 29 21:56:23 2010 -0500
+
+    Merge remote branch 'chrisd/http_continue'
+
+commit fa9305f8f5a9641bf7edf7577b186455b6c43ac6
+Author: Christopher Davis <chrisd at torproject.org>
+Date:   Mon Nov 29 18:25:04 2010 -0800
+
+    Preliminary support for Continue expectation in evhttp.
+
+commit 18d0327666a6d92bd045eacf91b538bf90e82a04
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Mon Nov 29 20:39:09 2010 -0500
+
+    make http-server example code build on win32
+
+commit ad66dfd064d8e246f699c9512f9c3c6a5a0b2b69
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Mon Nov 29 20:13:19 2010 -0500
+
+    Fix http-server.c compilation on freebsd
+
+commit a12839b0838cb6b24f6993b17b2a284a3944d1c5
+Merge: 026ac5d 4feedef
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Mon Nov 29 14:25:33 2010 -0500
+
+    Merge remote branch 'chrisd/http_fixes2'
+
+commit 4feedef94b254f5aaf8e7cf7cd104ddfffd8496a
+Author: Christopher Davis <chrisd at mangrin.org>
+Date:   Mon Nov 29 07:18:32 2010 -0800
+
+    Add a few more comments.
+
+commit 026ac5d5ada4a5d2f107e652916b50ebd17c8609
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Fri Nov 26 13:29:56 2010 -0500
+
+    add http-server to gitignore
+
+commit 4881778c5c898577bcb756c2b23ed15003c4a0bc
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Fri Nov 26 13:28:48 2010 -0500
+
+    Fix a misplaced ) in http_server.c
+
+commit d40aa673c23c4120fc1bab7a51d0a23c7fbb9463
+Merge: 4e794d5 ec5c5ae
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Fri Nov 26 12:59:02 2010 -0500
+
+    Merge branch '20_empty_body'
+
+commit 4e794d5d3910c053aed7aa1d7900531894ed0dd7
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Mon Oct 18 13:44:05 2010 -0400
+
+    Add a basic example of how to write a static HTTP server.
+
+commit aab8c38b768597274104bc5ecdf267de4ff3c7c9
+Author: Christopher Davis <chrisd at mangrin.org>
+Date:   Fri Nov 5 11:17:07 2010 -0700
+
+    Add evhttp server alias interface, correct flagging of proxy requests.
+    
+    evhttp needs to be mindful of all hostnames and addresses that clients
+    use to contact the main server and vhosts to know the difference between
+    proxy requests and non-proxy requests.
+
+commit 2e5a175bf387bd5c80b88f276b4ba7dcf9eaaf08
+Merge: 3239073 057a514
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Thu Nov 25 23:03:46 2010 -0500
+
+    Merge remote branch 'github/20_once_fixes'
+
+commit 32390732d75d1d4680a562404ef4298869f37b12
+Author: Kevin Bowling <kevin.bowling at kev009.com>
+Date:   Tue Nov 23 19:40:23 2010 -0700
+
+    Fix snprintf related failures on IRIX.
+
+commit 1cd45e56608b50b594a629433ca48368dc1a9074
+Author: Kevin Bowling <kevin.bowling at kev009.com>
+Date:   Tue Nov 23 19:26:34 2010 -0700
+
+    If not WIN32, include <sys/socket.h> in event2/util.h.
+
+commit c2e5e22c4c47073fecf0acc300d8d73aaccdab2d
+Author: Kevin Bowling <kevin.bowling at kev009.com>
+Date:   Tue Nov 23 14:09:03 2010 -0700
+
+    xlC doesn't obey C99 comments here.  autoconf isn't invoking full C99
+    mode.
+
+commit c4dc3353412733345010114220378f45f1951bb1
+Author: Kevin Bowling <kevin.bowling at kev009.com>
+Date:   Tue Nov 23 00:22:01 2010 -0700
+
+    Add some checks since lack of TAILQ_FOREACH doesn't imply lack of FIRST,
+    END, NEXT, or INSERT_BEFORE.  Quiet some warnings in XL C.
+
+commit 2e2a3d7bb6c7a7d6e8f0ccd7282c65308c6226f7
+Author: Kevin Bowling <kevin.bowling at kev009.com>
+Date:   Tue Nov 23 19:09:08 2010 -0700
+
+    Reworked AIX __ss_family workaround to use AC_STRUCT_MEMBER.
+
+commit a3a9f6b2d9fbc853e9f54f1af3132adce760e9bb
+Author: Kevin Bowling <kevin.bowling at kev009.com>
+Date:   Mon Nov 22 20:44:10 2010 -0700
+
+    select comes from <sys/select.h> according to POSIX.1-2001, or from a
+    variety of other standard headers on older systems, but not <select.h>.
+    AIX build fix.
+
+commit ec5c5aec6d5373e47936891c6b8111716d16f3e6
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Tue Nov 23 20:31:28 2010 -0500
+
+    Handle evhttp PUT/POST requests with an empty body
+    
+    When we call evhttp_get_bodylen() [when transfer-encoding isn't set],
+    having req->ntoread == -1 means that we have no content-length.  But a
+    request with no content-length has no body!  We were treating the
+    absent content-length as meaning "read till closed", which only holds
+    for replies, not requests.
+    
+    This patch also allows PATCH requests to have a body.
+
+commit 652024b6b1c43a4898f7c3f13aeff5d3736f4ce5
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Tue Nov 23 13:08:07 2010 -0500
+
+    Remove _event_initialized(); make event_initialized() a function(); make it consistent on windows and non-windows
+
+commit 88be27dc0613eb15f6f5499ea18b8253631ad92e
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Tue Nov 23 12:26:46 2010 -0500
+
+    Document event_get_assignment
+
+commit e431bcd6861fd75051ea6dca8af8db966eb7f636
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Tue Nov 23 12:26:34 2010 -0500
+
+    Note that reentrant calls to libevent from logging cbs may fail badly
+
+commit 7bcace2d549f5afc65665a9be6cbb4daf7360273
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Mon Nov 22 21:02:34 2010 -0500
+
+    Fix some irix compilation warnings spotted by Kevin Bowling
+
+commit 150d7d0a497b52968e2223178c8ed6e4cd8659b0
+Merge: 26049c2 e874982
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Mon Nov 22 20:24:03 2010 -0500
+
+    Merge remote branch 'kev009/master'
+
+commit e87498231c5f1d0cbda6e16f6a9f721d96affd6f
+Author: Kevin Bowling <kevin.bowling at kev009.com>
+Date:   Mon Nov 22 16:40:31 2010 -0700
+
+    Fix IRIX build.  sa_family collides with a #define in sys/socket.h on IRIX.
+
+commit 26049c2f93e3266819d8456cb7481521b7b255fa
+Merge: 568ac4f da1bf52
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Mon Nov 22 16:24:52 2010 -0500
+
+    Merge remote branch 'github/20_getaddrinfo_cancel_v2'
+
+commit da1bf528110d2676ab9a32c3a92d50ec5665e926
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Mon Nov 22 16:24:09 2010 -0500
+
+    Add a stress test for getaddrinfo_cancel
+
+commit 568ac4fd1b5e325c21ca2d30f2c17b452b622985
+Merge: ece974f 4f228a1 3ab578f
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Mon Nov 22 15:52:34 2010 -0500
+
+    Merge remote branches 'github/20_epoll_nochangelist_v4', 'github/20_openssl_closeonfree' and 'github/20_cloexec'
+
+commit ece974fbba32db1b21a411adfdfce6f37f63ab59
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Mon Nov 22 14:13:24 2010 -0500
+
+    Reorder backends in test.sh to match preference order in event.c
+
+commit aed7e02979886ec07bad56daa0d7bdda290bc509
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Mon Nov 22 14:10:01 2010 -0500
+
+    Make unit tests for epoll-with-changelist pass
+    
+    The only changes needed were to handle the fact that the methodname
+    "epoll (with changelist)" matches the environment variable
+    EVENT_NOEPOLL rather than the imaginary "EVENT_EPOLL (WITH CHANGELIST)".
+
+commit 9531763ab0b57e8d4249db58ef162800c6fb116b
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Sun Nov 14 17:52:16 2010 -0500
+
+    Disable changelist for epoll by default because of Linux dup() bug; add an option and/or an envvar to reenable it for speed.
+    
+    Rename option to control epoll changelist; make epoll changelist off by default
+
+commit 3ab578f848b024da14a5cdf3dff24d666275bada
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Sat Nov 20 01:41:34 2010 -0500
+
+    Make sure the CLOEXEC flag is set on fds we open for base notification
+
+commit 3a67d0bf42c69423fca36d001023d563b0326399
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Fri Nov 19 17:09:30 2010 -0500
+
+    Resolve an evport bug in the thread/forking test
+
+commit d51b2fc6556de1ad086683ce1d0201910f7c6e00
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Fri Nov 19 12:14:18 2010 -0500
+
+    Make evdns_getaddrinfo_cancel threadsafe
+
+commit c7cfbcf466780755c40a9889fd15a3c571799ca3
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Fri Nov 19 12:01:05 2010 -0500
+
+    Fix some more cancel-related bugs in getaddrinfo_async
+    
+    Also imposed a new rule to make this much much simpler: no freeing
+    the getaddrinfo request until both dns callbacks have been invoked.
+
+commit abf01ed13af22637ceeb4c5732c2347fd25a8c03
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Fri Nov 19 11:33:48 2010 -0500
+
+    Avoid double-invocation of user callback with EVUTIL_EAI_CANCEL
+
+commit 494186129fdec5d47db0bd0b582922c1b37abe0f
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Tue Nov 16 12:55:10 2010 -0500
+
+    Use the US-English "canceled", not the UK "cancelled".
+
+commit 8faf223ac593a2c8a93a9bb16eb314f858fce59b
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Wed Nov 17 00:09:10 2010 -0500
+
+    Fix a memory leak in evhttp_uri_free.
+
+commit 4f228a1fc1569cb26c9ae7dde4a1b79ca25cb0ce
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Sun Nov 14 19:52:18 2010 -0500
+
+    Fix bug in bufferevent_connect on an openssl bufferevent that already had an fd
+    
+    The problem was that we were using openssl's BIO code's shutdown flag
+    whenever BEV_OPT_CLOSE_ON_FREE was set.  This made the BIO close the
+    socket when it was freed... but it would be freed whenever we did a
+    setfd on the bufferevent_openssl, even the no-op setfd in
+    bufferevent_connect.
+    
+    So instead, we just set the shutdown flag to 0, and handle closing the
+    fd ourselves.
+    
+    Spotted by Linus Nordberg
+
+commit 057a51468e1368384478788800f66c6d82e2bce3
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Sun Nov 14 19:34:49 2010 -0500
+
+    Clarify EVLOOP_* documentation to be more precise.
+
+commit 2d5e1bd0be546efb848006652b8df612d6d3d681
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Sun Nov 14 19:32:13 2010 -0500
+
+    Do not let EVLOOP_ONCE exit the loop until all deferred callbacks have run
+
+commit 0617a818204397790e5e4c9bcb9e91ae5ea7817a
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Sun Nov 14 19:25:54 2010 -0500
+
+    Make EVLOOP_ONCE ignore internal events
+    
+    Merely getting an internal notification event from having an event
+    added or deleted from another thread should not cause
+    event_base_loop(base, EVLOOP_ONCE) to exit; previously, it did.
+
+commit 1ac5b2303aab11dee3d2030a2c9bee466f002772
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Tue Nov 9 15:18:59 2010 -0500
+
+    Only clear underlying callbacks when the user hasn't reset them.
+
+commit fc7b1b005c906d720e03975224ae809974402f55
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Tue Nov 9 11:43:47 2010 -0500
+
+    When closing a filtering bufferevent, clear callbacks on the underlying bufferevent
+    
+    Previously, if BEV_OPT_CLOSE_ON_FREE wasn't set on a
+    bufferevent_filter or a filtering bufferevent_openssl, when we went
+    to free the filtering bufferevent, we'd leave the underlying
+    bufferevent unchanged.  That's not so good, since the callbacks are
+    set to activate stuff in the filtering bufferevent that we're about
+    to free.  Instead, set all the callbacks to NULL.
+
+commit 5c8a59e8867a45b5791e45a548a73eb135a6a3ea
+Merge: 9ed30de 0512487 a38140b 3db6bc0 52aa419 34b84b9
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Tue Nov 9 10:19:05 2010 -0500
+
+    Merge remote branches 'github/20_evdns_cancel_segfault_v2', 'github/20_http_close_detect', 'github/20_http_versions', 'github/20_more_http_methods', 'github/20_shutdown_iocp_listener' and 'github/20_win64_fixes'
+
+commit a38140be18b764e98b899ed435b61ea2aa6447bc
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Tue Nov 9 10:14:32 2010 -0500
+
+    Refactor http version parsing into a single function
+    
+    Based on a suggestion by Chris Davis to make
+    evhttp_parse_response_line tolerate odd versions too.
+
+commit 3db6bc007949366e89cb83efa5027ea9da9af102
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Tue Nov 9 10:03:00 2010 -0500
+
+    Remove some debugging puts() calls from allow_methods test
+
+commit 52aa419bf69bc2f46f203800919abcfc25ea98fe
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Thu Nov 4 15:40:44 2010 -0500
+
+    Set SO_UPDATE_ACCEPT_CONTEXT on sockets from AcceptEx so that shutdown() can work
+    
+    Based on patch (and lots of debugging work) by Kelly Brock.
+
+commit 229714d123824d686bece18e6d2d157ed401abd4
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Thu Nov 4 16:04:28 2010 -0400
+
+    Fix a mistake in http documentation found by Julien Blache
+
+commit 05124879d34731eafe8a31698c943c0f5e7e24bf
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Thu Nov 4 14:05:08 2010 -0400
+
+    Never call evhttp_readcb while writing.
+
+commit c76640b5c29390ca3a11eba6614bf51a92e7a2ca
+Author: Felix Nawothnig <felix.nawothnig at gmail.com>
+Date:   Tue Jun 1 04:45:55 2010 +0200
+
+    Don't disable reading from the HTTP connection after sending the request to be notified of connection-close in time
+
+commit 75e3320efd318634ec367327e4e286fa68178179
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Thu Nov 4 12:41:13 2010 -0400
+
+    Units test for unexpected evhttp methods.
+
+commit 536311a46b407902ca0ee52d504c327ec54cfdf1
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Thu Nov 4 12:39:41 2010 -0400
+
+    evhttp: Return 501 when we get an unrecognized method, not 400.
+
+commit f5b391e22eb119304877b3829f32a241a0688fa3
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Thu Nov 4 11:53:34 2010 -0400
+
+    Tweak interface for allowed methods
+
+commit 75a73414a402005ddc2d2adde5a3acffc00d6382
+Author: Felix Nawothnig <felix.nawothnig at gmail.com>
+Date:   Thu Nov 4 11:25:35 2010 -0400
+
+    Define enumerators for all HTTP methods, including PATCH from RFC5789
+    
+    This patch defines enumerators for all HTTP methods that exist
+    (including PATCH introduced in RFC 5789).
+    
+    It also makes them bit-masky (that's not a word, is it?), breaking
+    binary- but not source-code compatibility.
+    
+    evhttp now stores a bitmask specifying for which methods requests to
+    dispatch and which ones to reject with "405 Method Not Allowed".
+    
+    By default that's the ones we currently have (GET, POST, HEAD, PUT,
+    DELETE), thereby keeping functional compatibility (besides the minor
+    change that one of the other methods will now cause 405 instead of
+    400. But I believe that could even be considered a bug-fix).
+    
+    evhttp is extended by evhttp_set_allowed_methods() with which the
+    user can change that bitmask.
+    
+    no regressions here and my test-app still works. Haven't yet
+    actually tested any of the new methods.
+    
+    What's obviously missing here is the special logic for the methods:
+    
+    OPTIONS: We should be fine here - I believe our current dispatch
+    logic should work fine. Some convenience functions would be fine
+    though.
+    
+    TRACE: I'm pretty certain we should never dispatch this to the
+    callbacks and simply implement the necessary functionality built-in.
+    
+    CONNECT: Pretty straight-forward to implement (and considering the
+    framework in which we implement it very efficient too). Should
+    probably go built-in.
+    
+    PATCH: Except for checking the RFC against our pre-dispatch logic
+    (there just might be some "MUST not have Some-Header" lurking
+    somewhere) there is nothing to be done here, this is completely up
+    to the user. Nothing to do.
+
+commit 9ed30de7ffeb3e5acede92a4e47f3aeb7c6af255
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Wed Nov 3 12:37:37 2010 -0400
+
+    Don't free evdns_request handles until after the callback is invoked
+    
+    Previously, once the callback was scheduled, it was unsafe to cancel
+    a request, but there was no way to tell that.  Now it is safe to
+    cancel a request until the callback is invoked, at which point it
+    isn't.
+    
+    Found and diagnosed by Denis Bilenko.
+
+commit 34b84b972775db759f5c2da301967cb288439e93
+Author: Christopher Davis <chrisd at torproject.org>
+Date:   Wed Nov 3 14:38:45 2010 -0700
+
+    Fix more wn64 warnings.
+
+commit 78762383b74ad8159d8c6176fb73c9fdb9ce9623
+Merge: aa5f55f 985430a
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Wed Nov 3 15:18:34 2010 -0400
+
+    Merge branch 'http_nolegacy_v2'
+
+commit 985430aed122a8c61ca7260779940d523f78ce23
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Wed Nov 3 15:17:57 2010 -0400
+
+    Remove need for http_compat.h in http tests
+
+commit 0b137f452ee4516d479ea61ae54d458888cfa8e9
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Wed Nov 3 15:14:29 2010 -0400
+
+    Stop accessing http request struct directly from in the unit tests.
+
+commit 22e0a9b2e8f752bfdcff7b0d96065c2da391bf03
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Wed Nov 3 15:12:08 2010 -0400
+
+    Add evhttp_response_code to remove one more reason to include http_struct.h
+
+commit c91622d18cb4dda945d92b983a712d1c3a37b45e
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Wed Nov 3 15:04:44 2010 -0400
+
+    Stop using event_compat.h in regress_http
+
+commit 9bb8239375b78a7be65ce17b4545159590894dc3
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Wed Nov 3 14:31:23 2010 -0400
+
+    Convert the rest of the http tests to be non-legacy unit tests.
+
+commit 353402a87ad41788997d4100bbf00bfc21693b4c
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Wed Nov 3 14:13:20 2010 -0400
+
+    Rename the confusing "base" static variable in regress_http.c
+
+commit 8505a7449cfb6bca91daee1c4d9bae80be92fa26
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Wed Nov 3 13:55:20 2010 -0400
+
+    Start porting http tests to not use legacy interfaces
+
+commit 647e094ca2ff90da79bfc3081848f50583d2042c
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Tue Nov 2 15:19:12 2010 -0400
+
+    Replace exact-version checks for HTTP/1.1 with >= or < checks
+
+commit aa5f55face7347a7fa766ff37534d9413486fcfe
+Author: Joachim Bauch <mail at joachim-bauch.de>
+Date:   Tue Nov 2 13:50:57 2010 -0400
+
+    reset "chunked" flag when sending non-chunked reply
+
+commit ba014569991ead06594e3418705ad42e4818cb33
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Tue Nov 2 12:42:35 2010 -0400
+
+    Use the label_len local variable in evdns instead of recalculating it over and over
+
+commit a3245afec2a7c7035cf62bdb67bab482e5986a8c
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Mon Nov 1 14:23:33 2010 -0400
+
+    Fix win32 build in response to fixes from win64 build.
+
+commit 74a91e5aafcb62f9518615dbc1021dfde113e001
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Mon Nov 1 14:16:39 2010 -0400
+
+    fix signed/unsigned warnings in http.c
+
+commit f8095d64e21d7abd16649a65080fd077bf0f0488
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Mon Nov 1 14:15:34 2010 -0400
+
+    Fix a typo in 7484df61c981fc33db2~
+
+commit 545a61145ca8ae38c3d19f5404ff3be18c275308
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Mon Nov 1 13:59:04 2010 -0400
+
+    Fix even more win64 warnings: buffer, event_tagging, http, evdns, evrpc
+
+commit 7484df61c981fc33db2152f75ddac689791b9929
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Mon Nov 1 13:43:43 2010 -0400
+
+    Fix even more win64 warnings
+
+commit b6a158ca22359831475e4cb10498063f72b07823
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Mon Nov 1 11:48:57 2010 -0400
+
+    Rename "size" variables in win32select that were really fd counts.
+
+commit f8064762ae697d34b15039c32d74e55f5491e5bd
+Author: Christopher Davis <chrisd at torproject.org>
+Date:   Thu Oct 28 10:11:25 2010 -0700
+
+    Increase the skew tolerance to 2 seconds in thread/deferred_cb_skew
+    
+    This is to make the test not fail on Sebastian Hahn's Win7 box.
+
+commit 7b40a0005062e67423f5217e1c8082d0f7d36f1b
+Author: Christopher Davis <chrisd at torproject.org>
+Date:   Thu Oct 28 10:08:17 2010 -0700
+
+    Make sure IOCP evconnlistener uses virtual events.
+
+commit 598d13360918e557d1ce5e37078364f4ddd24e36
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Wed Oct 27 22:57:53 2010 -0400
+
+    Try to clear up more size_t vs int/long issues.
+
+commit b81217f78dc511782451e793b0505624d8159499
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Wed Oct 27 17:37:32 2010 -0400
+
+    Fix signal handler types for win64.
+
+commit 1ae82cd8c6aba98d21342d242facd1bb5e461555
+Author: Dimitre Piskyulev <piskyulev at users.sourceforge.net>
+Date:   Wed Oct 27 17:32:41 2010 -0400
+
+    Set _EVENT_SIZEOF_VOID_P correctly on win32 and win64
+
+commit f817bfa4d37448f21d6f753769f6ad91d113dd7c
+Author: Dimitre Piskyulev <piskyulev at users.sourceforge.net>
+Date:   Wed Oct 27 17:31:52 2010 -0400
+
+    Fix some ints to evutil_socket_t; make tests pass on win64.
+
+commit 19c71e7454305e4e10c7d0c6ed1520fe5e1521df
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Wed Oct 27 10:36:08 2010 -0400
+
+    Fix som event_warns that should have been event_warnx
+
+commit e8a903cee8b3bfc56423a58ba313ee1a030ae6f1
+Merge: 5d389dc f5ad31c
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Wed Oct 27 10:27:04 2010 -0400
+
+    Merge remote branch 'trondn/master'
+
+commit f5ad31c186ec68c78f0106da4474dca3b660bca0
+Author: Trond Norbye <trond.norbye at gmail.com>
+Date:   Wed Oct 27 12:47:07 2010 +0200
+
+    Check return value for ioctlsocket on win32
+
+commit 5d389dc0f0acd8077b51eb053bb98bc4c1b3baa4
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Tue Oct 26 22:27:57 2010 -0400
+
+    Fix some uses of int for socket in regress
+
+commit 84a7053e412c08269535431aa845264b90a5a0c2
+Merge: 73bf07f 74c0e86
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Tue Oct 26 21:33:22 2010 -0400
+
+    Merge remote branch 'github/20_http_read_after_write'
+
+commit 73bf07fe9b133a39440c03a7fd9ac2f0c2f32f28
+Merge: 093fb98 a4063c0
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Tue Oct 26 21:33:13 2010 -0400
+
+    Merge remote branch 'github/20_abi_breaks'
+
+commit 093fb989ecd3ae65700289e00511b678d8b4896c
+Merge: 4f20eea 2cbb1a1
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Tue Oct 26 21:33:05 2010 -0400
+
+    Merge remote branch 'github/20_ratelim_size'
+
+commit 4f20eeaa0966f01485be21df3a6529edc20451e9
+Merge: fbaf077 e4f34e8
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Tue Oct 26 21:32:53 2010 -0400
+
+    Merge remote branch 'github/20_chain_realign'
+
+commit fbaf0770a709aaf7ed50914e26ea3d5a350e189d
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Tue Oct 26 12:09:20 2010 -0400
+
+    Fix bugs in posix thread-id calculation when sizeof(pthread_t) != sizeof(long)
+    
+    When pthread_t was smaller, our calculated thread IDs would include
+    uninitialized RAM, and so our unit tests would fail because thread_ids
+    would never match one another.
+    
+    When pthread_t was larger and alignment was big-endian, our calculated
+    thread IDs would only have the most significant bytes of the
+    pthread_t, when in practice all the entropy is in the low-order bytes.
+    
+    Found with help from Dagobert Michelsen.
+
+commit ac1931ac3d3ed4977c95f3aedf047e7c3adedc7f
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Tue Oct 26 11:07:26 2010 -0400
+
+    Remove event-config.h from .gitignore; it moved to include/event2
+
+commit e56ff65af118163e4bed33fa33c5cabcea067839
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Tue Oct 26 11:01:58 2010 -0400
+
+    Fix a minor syntax error that most compilers didn't care about
+
+commit a4063c06f9a904930631abba6a2b5b8028b10383
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Tue Oct 26 10:38:30 2010 -0400
+
+    Note that 2.0.9 will break the ABI, and make changes we were postponing.
+    
+    We had to turn a couple of 32-bit size arguments into 64-bit arguments
+    or size_t arguments (since otherwise we would have had to do it post
+    2.0.x-stable, and that would be worse).
+
+commit 2cbb1a161e843a0f50f3d42f622d58d5c58c510d
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Tue Oct 26 10:27:29 2010 -0400
+
+    Make rate-limits go up to SIZE_MAX/EV_SSIZE_MAX, not just INT32_MAX
+    
+    Someday, when networks are far faster and people frequently want a
+    burst value greater than 2GB per tick, this will seem very forsightful
+    indeed.
+    
+    For now, it breaks ABI, but not source.  Fixes bug 3092096.
+
+commit e4f34e8a0fec22a0300d6d529a5899ced3d0582a
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Mon Oct 25 22:36:23 2010 -0400
+
+    Correct logic for realigning a chain in evbuffer_add
+    
+    The old logic was both too eager to realign (it would move a whole
+    chain to save a byte) and too reluctant to realign (it would only
+    realign when data would fit into the misaligned portion, without
+    considering the space at the end of the chain).
+    
+    The new logic matches that from evbuffer_expand_singlechain: it only
+    realigns a chain when not much data is to be moved, and there's a
+    bunch of space to be regained.
+    
+    Spotted by Yan Lin.
+
+commit 74c0e862984edc5585b34abce9e6decd6aa05969
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Mon Oct 25 21:53:15 2010 -0400
+
+    Avoid missed-request bug when entire http request arrives before data is flushed
+    
+    The trigger for starting to read the first line of a request used to
+    be, "When data has arrived and we're looking for the first line."
+    But that's not good enough: if the entire next request gets read
+    into our bufev->inbuf while we're still processing the current
+    request, we'll never see any more data arrive, and so will never
+    process it.
+    
+    So the fix is to make sure that whenever we hit evhttp_send_done, we
+    call evhttp_read_cb.  We can't call it directly, though, since
+    evhttp_send_done is reachable from the user API, and evhttp_read_cb
+    can invoke user functions, and we don't want to force everyone to
+    have reentrant callbacks.  So, we use a deferred_cb.
+    
+    Found by Ivan Andropov.  This is bug 3008344.
+
+commit 8e342e563060a5dfc4c33bd46a2a6819a5d5b2f7
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Mon Oct 25 16:09:11 2010 -0400
+
+    Correctly count req->body_size on http usage without Content-Length
+    
+    There was a dumb bug where we would look at the length of the input
+    buffer immediately _after_ we drained it.
+
+commit 58a1cc6bc8d4c309a6d8a7bd937479615d4bbffc
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Mon Oct 25 16:00:47 2010 -0400
+
+    Fix a bug where we would read too much data in HTTP bodies or requests.
+    
+    We were using evbuffer_add_buffer, which moved the entire buffer
+    contents.  But if we had a valid content_length, we only wanted to
+    move up to the amount of data remaining in ntoread.  Our bug would
+    make us put our ntoread in the negative, which would in turn make us
+    read all data until the connection closed.
+    
+    Found by Denis Bilenko.  Should fix bug 2963172.
+
+commit 525da3e1eb5fc227e2af245bf3acae02b0627162
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Mon Oct 25 15:49:42 2010 -0400
+
+    Fix Content-Length when trying send more than 100GB of data (!) on an evhttp.
+
+commit f1250eb69836eff5a0bca69b48fbd5efe9d742cc
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Mon Oct 25 15:23:41 2010 -0400
+
+    add a requested docstring for event_rpcgen.CommandLine.__init__
+
+commit 9c71a3413ab8f52797e504fdbd9ab52ff88f951a
+Merge: ac7e52d 006efa7
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Mon Oct 25 15:13:32 2010 -0400
+
+    Merge remote branch 'github/http_and_listener'
+
+commit ac7e52d84df955bab7845f4b52a43bf228946fc9
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Mon Oct 25 14:29:30 2010 -0400
+
+    Make evbuffer_add_file take ev_off_t, not off_t
+    
+    This change has no effect on non-windows platforms, since those
+    either define off_t to 64-bits, or allow you to decide whether
+    it should be 64-bits yourself via some LARGEFILE-like macro.
+    
+    On Windows, however, off_t is always 32-bit, so it's a bad choice
+    for "file size" or "file offset" values.  Instead, I'm adding
+    an ev_off_t type, and using it in the one place where we used
+    off_t to mean "the size of a file" or "an offset into a file" in the
+    API.
+    
+    This breaks ABI compatibility on Windows.
+
+commit 006efa7dbbcaec4d412670107b893f04d38f0d83
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Mon Oct 25 11:50:51 2010 -0400
+
+    Functions to actually use evhttp_bound_socket with/as evconnlistener.
+
+commit 46ee061ca011346ec3d99c896cae8571847bdf70
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Mon Oct 25 11:47:05 2010 -0400
+
+    Add a function to change a listener's callback.
+    
+    You can also now initialize listeners with no callbacks set; if so,
+    they won't get enabled until the callback is set to non-NULL.
+
+commit 2c66983a6d46cbd863b079a1c92c916b41efe0ba
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Sun Oct 24 11:51:14 2010 -0400
+
+    Simplify the logic for choosing EPOLL_CTL_ADD vs EPOLL_CTL_MOD
+    
+    Previously, we chose "ADD" whenever old_events==new_events, (since
+    we expected the add to fail with EEXIST), or whenever old_events
+    was==0, and MOD otherwise (i.e., when old_events was nonzero and not
+    equal to new_events).
+    
+    But now that we retry failed MOD events as ADD *and* failed ADD
+    events as MOD, the important thing is now to try to guess right the
+    largest amount of the time, since guessing right means we do only
+    one syscall, but guessing wrong means we do two.
+    
+    When old_events is 0, ADD is probably right (unless we're hitting
+    the dup bug, when we'll fall back).
+    
+    And when old_events is set and != new_events, MOD is almost
+    certainly right for the same reasons as before.
+    
+    But when old_events is equal to new events, then MOD will work fine
+    unless we closed and reopened the fd, in which case we'll have to
+    fall back to the ADD case.  (Redundant del/add pairs are more common
+    than closes for most use cases.)
+    
+    This change lets us avoid calculating new_events, which ought to
+    save a little time in epoll.c
+
+commit c281aba30e69a501fc183d068894bfa47f891700
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Sun Oct 24 11:38:29 2010 -0400
+
+    Fix a nasty bug related to use of dup() with epoll on Linux
+    
+    Current versions of the Linux kernel don't seem to remove the struct
+    epitem for a given (file,fd) combo when the fd is closed unless the
+    file itself is also completely closed.  This means that if you do:
+       fd = dup(fd_orig);
+       add(fd);
+       close(fd);
+       dup2(fd_orig, fd);
+       add(fd);
+    you will get an EEXIST when you should have gotten a success.  This
+    could cause warnings and dropped events when using dup and epoll.
+    
+    The solution is pretty simple: when we get an EEXIST from
+    EPOLL_CTL_ADD, we retry with EPOLL_CTL_MOD.
+    
+    Unit test included to demonstrate the bug.
+    
+    Found due to the patient efforts of Gilad Benjamini; diagnosed with
+    help from Nicholas Marriott.
+
+commit bf11e7ddf7a3f8d6e6bd13aec944dcd37f1763ff
+Merge: 70e1b60 bc98f5e
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Thu Oct 21 15:33:13 2010 -0400
+
+    Merge branch 'http_uri_parse'
+
+commit bc98f5e6bad6a8502895d992cc3413b118969e01
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Thu Oct 21 14:53:21 2010 -0400
+
+    Unit tests for evhttp_uri_set*
+
+commit 45f6869c753218a72dd44660a880237aa8daa386
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Thu Oct 21 14:41:12 2010 -0400
+
+    Make evhttp_uri non-public, and give it accessor functions.
+
+commit 70e1b607d67657c573cdfc5c1ee832bc64391ddd
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Thu Oct 21 14:05:04 2010 -0400
+
+    Document that two bufferevent functions only work on socket bufferevents
+
+commit aab49b6069bc86a5cae7f0e8433f3844956dfa8e
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Thu Oct 21 14:04:24 2010 -0400
+
+    Add a bufferevent_get_base function
+
+commit d9ffa899fa382c8e9a4640e4bacb434e128d0b06
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Thu Oct 21 12:48:13 2010 -0400
+
+    Update the HTTP regression tests to use Libevent2 apis for non-http stuff
+
+commit 1f507d754107355c316fe55295a8b2f8b2ba00c1
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Thu Oct 21 12:27:16 2010 -0400
+
+    Stop using Libevent-1 headers in regress_http
+
+commit 2a3b5872fe1a2fa0f67d1b435b4650d337c16c4d
+Merge: cd00079 90b3ed5
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Thu Oct 21 12:23:10 2010 -0400
+
+    Merge branch 'http_small_tweaks'
+    
+    Conflicts:
+    	http-internal.h
+
+commit cd00079b2266893472fac795a69fe8aaea6c52e0
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Thu Oct 21 12:19:28 2010 -0400
+
+    Add evhttp_connection_get_base() to get the event_base from an http connection
+    
+    Based on a patch by Mark Ellzey from 27 July 2010.
+    
+    Closes ticket 3052406
+
+commit 1213d3dd8b477faa80b4828e16edc467d1007f20
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Wed Oct 20 13:41:02 2010 -0400
+
+    Fix a 100%-CPU bug where an SSL connection would sometimes never stop trying to write
+    
+    If an SSL connection becamse disabled or suspended before became open,
+    it could (under the right circumstances) wind up without ever getting
+    its write callback disabled.
+    
+    The most correct fix is probably more subtle, and involves checking
+    all caseswhen a write callback is enabled or disabled.  This fix is
+    more blunt, and explicitly checks whether the callback should have
+    been disabled at the end of the callback to prevent infinite looping.
+    
+    Diagnosed with help from Sebastian Hahn
+
+commit 2075fbcff0d8a9e06e2c3287b1cf4d400394c285
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Tue Oct 19 13:15:48 2010 -0400
+
+    Add evhttp_parse_query_str to be used with evhttp_uri_parse.
+    
+    The old evhttp_parse_query() doesn't work well with struct
+    evhttp_uri.query, since it expects to get whole URIs, rather than
+    just the query portion.
+
+commit 3a33462827ec1c31083c297a16aa0287c92a8bfe
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Tue Oct 19 13:02:18 2010 -0400
+
+    Document behavior of URI parsing more thoroughly.
+    
+    Also, move evhttp_uri struct into http.h, since it is part of the API.
+
+commit a5a76e689c185fb9f6f430fd8e989645b627bdb3
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Tue Oct 19 12:35:50 2010 -0400
+
+    Add a huge pile of tests for the new URI functions, and make them pass.
+
+commit ad923a11f1e110b3bf03b7179cdcd15ccfcfedd6
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Tue Oct 19 12:33:50 2010 -0400
+
+    Improvements to tinytest_macros.h
+    
+    First, handle cases where we have %s in a tt_want or tt_assert.
+    
+    Second, add tt_want_*_op that do a tt_*_op test, but do not exit the
+    test on failure.
+    
+    We should push these upstream to tinytest some time.
+
+commit eaa5f1d9edd8ae2a5f637a3a07928dfee113accc
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Tue Oct 19 11:26:59 2010 -0400
+
+    Revise evhttp_uri_parse implementation to handle more of RFC3986
+
+commit fadbfd4e6e2d9badd4b61d5f847c589ed84dd2c8
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Mon Oct 18 14:43:54 2010 -0400
+
+    Clean up error handling in uri_parse a little
+
+commit 7d45431e15dc0d8aa88fddc4fc406e19fe54d004
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Mon Oct 18 14:38:48 2010 -0400
+
+    Do not silently truncate URIs in evhttp_uri_join. Also avoid evbuffer_pullup.
+
+commit 86212341c5f38a973e3190a2c5c36ea947ef7253
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Mon Oct 18 14:34:20 2010 -0400
+
+    Make evhttp_uri_parse and friends conform to memory management standards
+
+commit 86dd720a666aca5b95c4f913c3f705d6b7a8f17d
+Author: Pavel Plesov <pavel.plesov at gmail.com>
+Date:   Sun Aug 8 16:46:39 2010 +0400
+
+    Introduce absolute URI parsing helpers.
+    
+    See evhttp_uri_parse(), evhttp_uri_free() and evhttp_uri_join() for details.
+
+commit f13e449b531bb14d076e28660e2d33fb6fb255ab
+Merge: 9dc5f44 49f4bf7
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Mon Oct 18 14:20:06 2010 -0400
+
+    Merge branch 'http_parse'
+
+commit 49f4bf7c577790fad711324250ed571a0aceac8b
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Mon Oct 18 13:58:02 2010 -0400
+
+    Add evhttp_request_get_command so code can tell GET from POST without peeking at the struct.
+
+commit e5870690fcd68fbb02c1367dede73864fd6a61dc
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Mon Oct 18 13:53:31 2010 -0400
+
+    Modernize header usage in bench_http.c
+
+commit 9dc5f44a19a749e3d5091a2a8003741efb91cf91
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Thu Oct 14 22:12:32 2010 -0400
+
+    Increment version in git to 2.0.8-rc-dev
+
+commit ef18c994c3f80c6b7e2699309227b50a9b6dc77d
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Thu Oct 14 18:36:07 2010 -0400
+
+    Increment the version to 2.0.8-rc
+    
+    NOTE: This is not the official release until I tag it.  If you see
+        this commit, and you decide that Libevent 2.0.8-rc is now
+        finalized, you might get something besides 2.0.8-rc.
+
+commit 15be0493f6fc10f9484570339f50ee363fdcc42e
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Thu Oct 14 18:35:11 2010 -0400
+
+    Changelog and readme for 2.0.8-rc
+
+commit 4ebf9509f741b4cd85ff925a4009b41d62223e7c
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Thu Oct 14 14:40:40 2010 -0400
+
+    Fixes for MSVC compilation
+
+commit d3b096c011606836d9b550f009a827c18445844a
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Thu Oct 14 13:54:15 2010 -0400
+
+    Make the --enable-gcc-warnings option include signed comparison warnings
+
+commit e06f514d4e7bbc5d777c40400f5aecbded667854
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Thu Oct 14 13:51:24 2010 -0400
+
+    Fix signed/unsigned warnings on win32
+
+commit 6be589ae687531a992e5ce4c32de78ba5197d1d3
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Thu Oct 14 13:48:40 2010 -0400
+
+    Fix signed/unsigned warnings on opensolaris, where iov_len is signed
+
+commit e5c214a4235d77610ce19298d47b01b95c2fe4c9
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Thu Oct 14 13:16:41 2010 -0400
+
+    Fix -Wsigned-compare warnings in test/*
+
+commit f2763fa864a0d84c5ec9433a8693b7815a89f400
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Thu Oct 14 13:16:00 2010 -0400
+
+    add limits.h to event_tagging.c so opensolaris will build
+
+commit 5e4bafbb89623f36666e80a5bc9c956990a9ccb1
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Thu Oct 14 13:15:32 2010 -0400
+
+    fix a signed/unsigned warning in kqueue.c
+
+commit 02f6259fc3f0430936defb62a94a26aba7db64a8
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Thu Oct 14 11:44:32 2010 -0400
+
+    New unit test for ssl bufferevents starting with connected SSLs.
+
+commit 93bb7d8e1965054eb46b4c84b19a580928b174ee
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Thu Oct 14 11:41:10 2010 -0400
+
+    Fix a case where an ssl bufferevent with CLOSE_ON_FREE didn't close its fd
+    
+    This could happen when we got an SSL with a BIO already set on it.
+
+commit 223ee40fde947db7b5abe18ac4b91da7aee46a46
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Thu Oct 14 10:53:26 2010 -0400
+
+    Avoid spurious reads from just-created open openssl bufferevents
+    
+    When handshaking, we listen for reads or writes from the
+    transport. But when we're connected, we start out with writes enabled
+    and reads disabled, which means we should not have the transport read
+    for us.
+
+commit 34331e456d0abb2f19e2ecfa28249deeaf410de2
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Fri Oct 8 01:09:02 2010 -0400
+
+    The corrected bufferevent filter semantics let us fix our openssl tests
+
+commit ac27eb827655b344a08207bf92a0c25da94ac7eb
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Fri Oct 8 00:59:02 2010 -0400
+
+    Correct logic on disabling underlying bufferevents when disabling a filter
+    
+    Previously, whenever writing was disabled on a bufferevent_filter (or
+    a filtering SSL bufferevent), we would stop writing on the underlying
+    bufferevent.  This would make for trouble, though, since if you
+    implemented common patterns like "stop writing once data X has been
+    flushed", your bufferevent filter would disable the underlying
+    bufferevent after the data was flushed to the underlying bufferevent,
+    but before actually having it written to the network.
+    
+    Now, we have filters leave their underlying bufferevents enabled for
+    reading and writing for reading and writing immediately.  They are not
+    disabled, unless the user wants to disable them, which is now allowed.
+    To handle the case where we want to choke reading on the underlying
+    bufferevent because the filter no longer wants to read, we use
+    bufferevent_suspend_read().  This is analogous to the way that we use
+    bufferevent_suspend_write() to suspend writing on a filtering
+    bufferevent when the underlying bufferevent's output buffer has hit
+    its high watermark.
+
+commit 34d64f8a347147aa5a6ac222f302e12b142a8f2e
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Tue Oct 12 13:46:14 2010 -0400
+
+    Fix serious bugs in per-bufferevent rate-limiting code
+    
+    Our old code was too zealous about deleting the refill events that
+    would actually make connections able to read or write again after
+    they had run out of bandwidth.  Under some circumstances, this could
+    cause a bufferevent to never actually refill one of its
+    rate-limiting buckets.
+    
+    Also, the code treated setting a per-connection rate-limit on a
+    connection that already had a group-limit as if it were changing the
+    limit on a connection whose allocation had already run out.
+    
+    This patch fixes both of those problems.
+
+commit 819b1715723f1ab8bdf6f3d21d6eac859cf8950e
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Tue Oct 12 12:59:13 2010 -0400
+
+    Handle rate-limiting for reading on OpenSSL bufferevents correctly.
+    
+    We were looking at the number of bytes read on the wbio, not in the
+    rbio.  But these are usually different BIOs, and the reading is
+    supposed to happen on the rbio.
+
+commit 7ad90f6a25a952836892fbd12b7ad9a43feac9be
+Merge: 08ebd26 90651b3
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Sat Oct 9 00:02:31 2010 -0400
+
+    Merge branch '20_internal_prio'
+
+commit a8148cedcd4cbff429cbe60e31ee084d236ccc43
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Fri Oct 8 13:05:13 2010 -0400
+
+    New evhttp_uri(encode|decode) functions to handle + and NUL characters right
+    
+    The old evhttp_decode_uri() function would act as tough it was doing
+    an (illegal, undefined) decode operation on a whole URL at once, and
+    treat + characters following a ? as different from + characters
+    preceding one.  But that's not useful: If you are decoding a URI
+    before splitting off query parameters, you are begging to fail as soon
+    as somebody gives you a value with an encoded & in it.
+    
+    The new evhttp_uridecode() function takes an argument that says
+    whether to decode + signs.  Both uridecode and uriencode also now
+    support encoding or decoding to strings with internal 0-valued
+    characters.
+
+commit 2e63a604da3f3c77800d2a2ff1681d8397ecdac6
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Fri Oct 8 12:57:11 2010 -0400
+
+    evhttp_encode_uri encodes all reserved characters, including !$'()*+,/:=@
+    
+    Perviously, some characters not listed as "unreserved" by RFC 3986
+    (notably "!$'()*+,/:=@") were not encoded by evhttp_encode_uri.  This
+    made trouble, especially when encoding path components (where @ and /
+    are bad news) and parameters (where + should get encoded so it doesn't
+    later decode into a space).
+    
+    Spotted by Bas Verhoeven.
+
+commit 08ebd26730036feed0609b18e62ecf3f3cc783fb
+Merge: 1205703 fdc640b
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Thu Oct 7 21:06:25 2010 -0400
+
+    Merge branch 'iovmax'
+
+commit 120570356be98c931beb91bb345c5c7a8fa44461
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Thu Oct 7 18:05:01 2010 -0400
+
+    Turn some booleans in evconnlistener_iocp into one-bit bitfields.
+
+commit 62b429afa8a8138635a891ff668613e7be3c3aa7
+Author: Christopher Davis <chrisd at torproject.org>
+Date:   Thu Oct 7 13:41:39 2010 -0700
+
+    Make iocp/listener/error work; don't accept again if lev is disabled.
+
+commit 481ef920860cbdf8be2772ee332c03b0fb57da2d
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Thu Sep 23 17:41:49 2010 -0400
+
+    Fix allocation error for IOCP listeners. Probably harmless, since struct event is big
+
+commit 127d4f2195638bbfa8b693558f3eb408abdcdf24
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Thu Sep 23 16:49:58 2010 -0400
+
+    Add a LEV_OPT_THREADSAFE option for threadsafe evconnlisteners
+
+commit 3b844893859c08a17c039dccef2e07e42e7c2f69
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Wed Oct 6 12:35:38 2010 -0400
+
+    Tweak evhttp_parse_query hack to avoid breaking abi
+
+commit b1756d019d23656170d0295ed05e13c2fc201ca7
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Wed Oct 6 11:48:52 2010 -0400
+
+    Let evhttp_parse_query return -1 on failure
+    
+    We already detected certain malformed queries, but we responded by
+    aborting the query-parsing process half-way through without telling
+    the user.  Now, if query-parsing fails, no headers are returned, and
+    evhttp_parse_query returns -1.
+
+commit fdc640b02dada6d731452c5a02475a7766d1ecfa
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Tue Oct 5 21:34:07 2010 -0400
+
+    Fix an EINVAL on evbuffer_write_iovec on OpenSolaris.
+    
+    The writev() call is limited to at most IOV_MAX iovecs (or UIO_MAXIOV,
+    depending on whom you ask).  This isn't a problem anywhere we've
+    tested except on OpenSolaris, where IOV_MAX was a mere 16.
+    
+    This patch makes us go from "use up to 128 iovecs when writing" to
+    "use up to 128 iovecs when writing, or IOV_MAX/UIO_MAXIOV, whichever
+    is less".  This is still wrong if you somehow find a platform that
+    defines IOV_MAX < UIO_MAXIOV, but I hereby claim that such a platform
+    is too stupid to worry about for now.
+    
+    Found by Michael Herf.
+
+commit 5b7a37063647760646823215361df8605c36acd6
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Tue Oct 5 14:29:48 2010 -0400
+
+    Fix warnings on mingw with gcc 4.5
+
+commit 145f221e8f1f12809a54f0ed3168a930255feee3
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Tue Oct 5 13:06:32 2010 -0400
+
+    Define symbolic constants to use in place of SHUT_RD etc
+
+commit e0fd87085d5392039f7406445d1abac47fdde2f5
+Author: Christopher Davis <chrisd at torproject.org>
+Date:   Tue Oct 5 13:01:54 2010 -0400
+
+    Send a shutdown(SHUT_WR) before closing an http connection
+    
+    This avoids getting an ECONNRESET from the TCP stack.
+    
+    Fixes bug 2928690
+
+commit 0faaee016583a46006b46c5c2c82440dad1aefb8
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Thu Sep 30 23:15:47 2010 -0400
+
+    Fix a spurious-call bug on epoll.c
+    
+    We were trying to check whether any events had really been
+    notified on an fd before calling evmap_io_active on it, but instead
+    we were checking for an event pointer, which was always true.
+    
+    In practice, this patch shouldn't change much, since epoll_wait
+    shouldn't return an event unless there is actually an event going
+    on.
+    
+    Spotted by an anonymous bug reporter on Sourceforge.  Closes bug
+    3078425.
+
+commit a8b7674cd5e3636ce36aef9dc1a0cdb4bd3584f2
+Merge: a78ac0f 9c8db0f
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Tue Sep 28 01:09:17 2010 -0400
+
+    Merge remote branch 'github/signed_compare'
+
+commit a78ac0facb406a056554a3fe9247e4c7fb9209a5
+Merge: b395392 d49b5e3
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Mon Sep 27 16:05:20 2010 -0400
+
+    Merge remote branch 'github/win_lib'
+
+commit d49b5e33260d0c5373187e6d0ef08e489f9a0592
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Mon Sep 27 15:12:55 2010 -0400
+
+    Do not search outside of the system directory for windows DLLs
+    
+    Hardens against some attacks.
+
+commit b395392746f93516bb14cc81ca8b48409b3c359f
+Author: Sebastian Hahn <sebastian at torproject.org>
+Date:   Mon Sep 27 21:14:28 2010 +0200
+
+    Fix compile in kqueue.c
+    
+    Commit 38d09606 removed the evsigbase pointer, but forgot to remove
+    an assignment to it in kqueue.c.
+
+commit 9c8db0f804360325e37f032c56c46ef627d2aaf7
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Thu Sep 23 22:45:55 2010 -0400
+
+    Fix all warnings in the main codebase flagged by -Wsigned-compare
+    
+    Remember, the code
+       int is_less_than(int a, unsigned b) {
+          return a < b;
+       }
+    is buggy, since the C integer promotion rules basically turn it into
+       int is_less_than(int a, unsigned b) {
+          return ((unsigned)a) < b;
+       }
+    and we really want something closer to
+       int is_less_than(int a, unsigned b) {
+          return a < 0 || ((unsigned)a) < b;
+       }
+    .
+    
+    Suggested by an example from Ralph Castain
+
+commit 045eef4cdea75c12be49327f961d6d2002c105dd
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Thu Sep 23 14:23:45 2010 -0400
+
+    Unit tests for listener error callbacks
+
+commit c4be8d82b36a17537b6cc805945e0cf21ab1724c
+Author: Simon Perreault <simon.perreault at viagenie.ca>
+Date:   Mon Sep 20 12:47:39 2010 -0400
+
+    Add error callback to evconnlistener
+
+commit e1198997bc58403376ec5909ebd8ef872ee48591
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Tue Sep 21 22:44:39 2010 -0400
+
+    Make event.c debugging messages report fds
+
+commit ec2b05edddee6144c33ceff23421598fea7c406f
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Tue Sep 21 22:23:32 2010 -0400
+
+    Make debugging output for epoll backend more comprehensive
+
+commit 90651b327a9819e890e8ababe1e46f3fa989850c
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Fri Sep 17 00:24:50 2010 -0400
+
+    Put internal events at highest priority
+    
+    (If we allow user events to starve internal events, then internal events
+    never actually happen, signals don't get acked, etc)
+
+commit 38d09606acd9dfa9aba64390435a0901e491317f
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Wed Sep 15 12:50:31 2010 -0400
+
+    Remove event_base.evsigbase; nothing used it.
+
+commit 4858b7949c665c3b6dafbf69665b9d126fc33e8f
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Wed Sep 15 01:54:51 2010 -0400
+
+    Remove the now-useless evsig_caught and evsig_process
+
+commit 95a7d418ab4ff332bc299813e6fc83c9be4ed0ec
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Wed Sep 15 01:40:02 2010 -0400
+
+    Make default signal backend fully threadsafe
+    
+    Jason Toffaletti discovered with helgrind that our signal handler was
+    messing with evsig_base, which can be set from lots of places in the
+    code.  Ordinarly, we'd just stick a lock on it, except that it is
+    illegal (and genuinely error-prone) to call pthread_mutex_acquire()
+    from inside a signal handler.
+    
+    The solution is to only store the fd we write to in a static variable,
+    write the signal number to the fd, and put evsig_cb in charge of
+    activating signal events.
+    
+    I have no idea how we'll cope if we want to enable this to handle
+    siginfo (where available) in the future.
+
+commit 720bd933c8a4e9f0b850be075e055eea98767665
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Wed Sep 15 01:08:39 2010 -0400
+
+    Warn when using the error-prone EV_SIGNAL interface in an error-prone way.  Also, fix a couple of race conditions in signal.c
+    
+    When using the signal.c signal backend, Libevent currently only allows
+    one event_base to actually receive signals at a time.  (This has been
+    the behavior since at least 1.4 and probably much earlier.)  Now, we
+    detect and warn if you're likely to be racing about which signal goes
+    to which thread.
+    
+    We also add a lock to control modifications of the evsig_base field,
+    to avoid race conditions like those found by Jason Toffaletti.
+    
+    Also, more comments.  Comments are good.
+
+commit 040a019f52a7933b2478fe41c3ab0b56835012b1
+Author: Simon Perreault <simon.perreault at viagenie.ca>
+Date:   Thu Sep 9 17:19:20 2010 -0400
+
+    Obey enabled status when unsuspending
+
+commit f0bd83ea88788c595fa78ed5da4a91efd36eca48
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Thu Sep 9 16:13:09 2010 -0400
+
+    Bump to the latest version of tinytest
+    
+    This lets us do without libevent-specific code in tinytest.c, and
+    lets us add a feature to skip individual tests from the command
+    line.
+
+commit a5ce9ad4aff34fc10689d0c3b01ab2b7d55fabf0
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Thu Sep 9 16:01:42 2010 -0400
+
+    Make SSL tests cover enabling/disabling EV_READ.
+    
+    I want my 80% coverage.
+
+commit 5811d74c6b39b5b619b19a2cebe0e709942effc3
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Thu Sep 9 15:59:18 2010 -0400
+
+    Bump version to 2.0.7-rc-dev
+
+commit fe008ed656766266b93cdf2083f5b8bc50e6aad3
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Thu Sep 9 14:59:27 2010 -0400
+
+    Make all versioning changes for 2.0.7-rc, and add ChangeLog
+
+commit d98511c027320d6c425ff11720e87e04e5594626
+Author: Christopher Davis <chrisd at torproject.org>
+Date:   Thu Sep 9 14:36:45 2010 -0400
+
+    Make event_base_virtual_del() notify the base if needed
+
+commit 2756a10cd94485109caae29dc0c914acd25f5137
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Thu Sep 9 13:43:31 2010 -0400
+
+    Add a missing time.h include to test/regress_thread.c
+
+commit fb36f9a7e5456db948263dfb800d2e5bddb27765
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Thu Sep 9 13:00:54 2010 -0400
+
+    Fix an uninitialized-variable warning on windows
+
+commit 71b680142120293fb730ac34576c80f63541cd63
+Author: Christopher Davis <chrisd at torproject.org>
+Date:   Wed Sep 8 20:33:21 2010 -0700
+
+    Don't decrement virutal event count twice in connect_complete.
+
+commit 3ec65d6984833310ec125a91c88ef8f7654464f4
+Author: Christopher Davis <chrisd at torproject.org>
+Date:   Wed Sep 8 19:55:13 2010 -0700
+
+    Fix a few Windows compile warnings.
+
+commit 25b6a74be68bc1e8bfcb69193505e7e6d4d39ef5
+Merge: 6f82171 1115366
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Wed Sep 8 14:53:57 2010 -0400
+
+    Merge branch 'tests'
+
+commit 6f8217101366642d54d89694c9ff31a9b9a85789
+Merge: de41294 e7dc501
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Wed Sep 8 14:52:37 2010 -0400
+
+    Merge remote branch 'github/win_notify'
+
+commit de412948a1f2cf0dce9e0f4c5095e2a5ce5c076e
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Wed Sep 8 14:52:24 2010 -0400
+
+    Add a missing header for regress_thread.c
+
+commit e7dc501ee5254083feaee97a93d4a47b04b93553
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Wed Sep 8 14:40:51 2010 -0400
+
+    Implement EVBASE_NEED_NOTIFY on win32
+
+commit 911e0db8f095e9fd386fd90087603327a5339c7c
+Author: Sebastian Hahn <sebastian at torproject.org>
+Date:   Wed Sep 8 20:29:39 2010 +0200
+
+    Fix a compile warning in regress_thread.c
+
+commit 3658b1696df8784b156cc6643a36f7cfa69e0213
+Merge: 9580e28 17a14f1
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Wed Sep 8 14:12:12 2010 -0400
+
+    Merge remote branch 'chrisd/iocp-fixes4'
+    
+    Conflicts:
+    	test/regress_thread.c
+
+commit 9580e282d7e5801802e935956902a1948525d474
+Merge: 57d3413 ce85280
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Wed Sep 8 14:00:45 2010 -0400
+
+    Merge branch 'th_notify_fd_reinit'
+
+commit ce85280beb56c4b1c7e69c542878a8f1fe647f28
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Wed Sep 8 13:29:06 2010 -0400
+
+    Improve testing of when thread-notification occurs
+
+commit 4632b78e01a312ae716bc17322c462be53182eca
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Wed Sep 8 13:22:55 2010 -0400
+
+    Minimize calls to base_notify implementation functions, thereby avoiding needless syscalls
+    
+    The trick here is that if we already told the base to wake up, and it
+    hasn't woken up yet, we don't need to tell it to wake up again.  This
+    should help lots with inherently multithreaded code like IOCP.
+
+commit c7a06bfaee7f96327779972214e8b744170531ff
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Wed Sep 8 13:02:58 2010 -0400
+
+    Avoid needlessly calling evthread_notify_base() when the loop is not running
+    
+    Also make sure that we always hold the base lock when calling evthread_notify_base.
+
+commit 57d3413c55689d623dad4eb2765d8a3bed9b586b
+Merge: 4209007 5de2bcb
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Wed Sep 8 11:39:24 2010 -0400
+
+    Merge remote branch 'github/globals'
+
+commit 17a14f1af2ace0201baa1b5bbba031296e62d879
+Author: Christopher Davis <chrisd at torproject.org>
+Date:   Wed Sep 1 11:04:57 2010 -0700
+
+    Only process up to MAX_DEFERRED deferred_cbs at a time.
+    
+    If threads queue callbacks while event_process_deferred_callbacks is
+    running, the loop may spin long enough to significantly skew timers.
+    A unit test stressing this behavior is also in this commit.
+
+commit 2447fe88860c40e968261ad8ea059166cb84a280
+Author: Christopher Davis <chrisd at torproject.org>
+Date:   Sat Aug 28 04:07:48 2010 -0700
+
+    Add event_config_set_num_cpus_hint for tuning thread pools, etc.
+
+commit 499452f4c24f172bf6846599e3886838a4207aca
+Author: Christopher Davis <chrisd at torproject.org>
+Date:   Sat Aug 28 02:44:11 2010 -0700
+
+    IOCP-related unit test tweaks
+
+commit 76f7e7ae745ad730795f0a4a3bc1299a00137cc2
+Author: Christopher Davis <chrisd at torproject.org>
+Date:   Tue Aug 17 05:02:00 2010 -0700
+
+    Some IOCP bufferevent tweaks.
+    
+    - Increment reference count of bufferevents before initiating overlapped
+      operations to prevent the destructor from being called while operations
+      are pending. The only portable way of canceling overlapped ops is to
+      close the socket.
+    
+    - Translate error codes to WSA* codes.
+    
+    - Better handling of errors.
+    
+    - Add an interface to add and del "virtual" events. Because IOCP
+      bufferevents don't register any events with the base, the event loop
+      has no way of knowing they exist. This causes the loop to terminate
+      prematurely. event_base_{add,del}_virtual increment/decrement base's
+      event count so the loop runs while there are any enabled IOCP
+      bufferevents.
+
+commit d844242f9b138be4896942ded25d74a91bf29901
+Author: Christopher Davis <chrisd at torproject.org>
+Date:   Sat Aug 28 02:08:27 2010 -0700
+
+    Stop IOCP when freeing the event_base.
+
+commit 03afa209de96d67f1a4b935460aeabe63f5ef24f
+Author: Christopher Davis <chrisd at torproject.org>
+Date:   Mon Aug 16 01:23:57 2010 -0700
+
+    IOCP-related evbuffer fixes.
+    
+    - Prevent evbuffer_{add,prepend}_buffer from moving read-pinned chains.
+    - Fix evbuffer_drain to handle read-pinned chains better.
+    - Raise the limit on WSABUFs from two to MAX_WSABUFS for overlapped reads.
+
+commit 1115366e95388de70996b5aafda17363db2a44fd
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Tue Sep 7 10:28:15 2010 -0400
+
+    Fix a few memory leaks in the tests
+
+commit 42090072c15fedc50231bfbce347d4ffb5432e31
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Mon Sep 6 15:47:07 2010 -0400
+
+    Move the "function to getsockname() on a listener" to regress_testutils
+    
+    This reverts commit fab50488fcb741884ccdfa7b83643eac3e5c9cbf.
+    
+    The function was, on reflection, not important enough to break the feature
+    freeze, since it's trivial to build on your own.
+
+commit c51826ff50fe030f734a1b1687949e1fb621ea67
+Merge: b0f284c ca9048f
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Mon Sep 6 15:40:13 2010 -0400
+
+    Merge remote branch 'github/sysqueue_include_order'
+
+commit b0f284cb18a6aecb8a5c2a398b0738ba3662c4bc
+Author: Shuo Chen <giantchen at gmail.com>
+Date:   Mon Sep 6 10:10:17 2010 -0400
+
+    Fix event_del(0) instance in bench.c
+
+commit 749128b2cfe400755b08981f217064e2a5a64641
+Merge: 150599e e50c0fc
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Sat Sep 4 22:02:32 2010 -0400
+
+    Merge remote branch 'github/win32_posix_underscore'
+
+commit 150599e6e2a6b8a6d8a5b55cee59406c13a73e2f
+Merge: b5dd806 4788277
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Sat Sep 4 22:00:38 2010 -0400
+
+    Merge remote branch 'github/cdecl'
+
+commit b5dd8064fc42bd788c0ee46b483741419c152e39
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Fri Sep 3 22:00:25 2010 -0400
+
+    Fix uninitialized port var in http_delete_test.  Last one, I hope.
+
+commit 3b3fb7438dd7e7108d77c8d61290cbd68f7633b4
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Fri Sep 3 21:03:25 2010 -0400
+
+    Fix uninitialized variables in http_bad_request_test. (oops)
+
+commit a97320ac579e58e685c19393e2599accfb5edbe5
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Fri Sep 3 18:48:31 2010 -0400
+
+    Allow more than one copy of regression tests to run at once
+    
+    Mostly this was a matter of just removing all the hardwired ports in
+    the test code.  The http/connection_retry test is still a little
+    screwy, though.
+
+commit 195214360c7cb107e86bfaa389812c879873f19c
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Fri Sep 3 16:42:16 2010 -0400
+
+    Expose a function to add a nameserver by sockaddr
+
+commit fab50488fcb741884ccdfa7b83643eac3e5c9cbf
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Fri Sep 3 16:41:16 2010 -0400
+
+    Expose a function to getsockname() on a listener's fd.
+
+commit 7ea8e89d5cce36c7f27ea62c9a68a9208266d569
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Fri Sep 3 15:12:35 2010 -0400
+
+    Prefer autoreconf -ivf to manual autogen.sh
+    
+    Suggested by Ralph Castain
+
+commit 478827739c0365f398a63f86c08f588ae9a12401
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Thu Sep 2 13:21:17 2010 -0400
+
+    Fix pointer-to-__cdecl-function syntax
+
+commit e50c0fcc85245881eb67dacb5f5e54e0b2482655
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Thu Sep 2 11:10:50 2010 -0400
+
+    Use the _func() replacements for open, fstat, etc in evutil.c on win32
+    
+    Remember that in a fit of ANSI C compliance, Microsoft decided to
+    screw portability by renaming basically all the functions in unistd.h to
+    get prefixed with an understore.
+    
+    For some reason, mingw didn't seem to mind, but at least some people's
+    compilers did: see bug 3044490.
+
+commit f0056d041bd890dff8757a3472dd5fa9a1066405
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Thu Sep 2 12:06:58 2010 -0400
+
+    Declare signal handler function as "__cdecl" on Windows.
+    
+    I swear, they must have half a dozen different calling conventions.
+    
+    (goes to check)
+    
+    Holy crud.  They actually do.  There's __cdecl, __stdcall, __fastcall,
+    "thiscall", "naked" and the obsolete "__pascal", "__fortran", and
+    "__syscall".  And don't forget WINAPI and __far.
+    
+    Anyways, this should fix 3044488 if I got it right.
+
+commit ca9048f12cf441625ac3e90edb219d7f4c60b430
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Thu Sep 2 11:36:44 2010 -0400
+
+    Move evkeyvalq into a separate header for evhttp_parse_query users
+    
+    The evhttp_parse_query API is a bit misdesigned; all the other
+    evkeyvalq stuff is abstract and lets you get away with having a header
+    stub, but evhttp_parse_query seems to require that you instantiate an
+    empty evkeyvalq of your own.
+
+commit d3ceca800eb6478b9e0b74680e2bd247d8213187
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Thu Sep 2 11:27:57 2010 -0400
+
+    Declare evkeyvalq and event_list even if event_struct.h comes before sys/queue.h
+    
+    Fixes bug 3036645 reported by Mihai Draghicioiu
+
+commit 495ed66705d5790de031f9591b47afcbe4fc1156
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Wed Sep 1 16:36:30 2010 -0400
+
+    Close th_notify_fds and open a new pair on reinit
+    
+    After a fork, you want subthreads to wake up the event_base in the
+    child process, not to have the child process and the main process
+    fight over who wakes up whom.
+    
+    Related to a problem found by Nicholas Marriott while debugging
+    3048812.
+
+commit 5de2bcb70fa7905d26e608728db24ece01f0c675
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Wed Sep 1 16:03:39 2010 -0400
+
+    On windows, make lock/thread function tables static
+    
+    This requires us to have a separate implementation of the lock macros
+    that indirects to a set of functions.  Fortunately, this isn't too
+    hard to do.
+    
+    This may be a fix for bug 3042969, where our openssl dll and our
+    libevent dll each got their own version of the thread stuff.
+
+commit 5218d2a8b186bcf28ffe0a61e321a29585683b45
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Wed Sep 1 15:56:22 2010 -0400
+
+    Make defer-internal.h use lock macros, not direct cess to lock fns
+
+commit 1fdec20f8fb1a4e1bc2eeb66831f9ad5c3455888
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Wed Sep 1 15:01:39 2010 -0400
+
+    Stop using global arrays to implement the EVUTIL_ctype functions
+    
+    These apparently made libtool sad on win32, and the function call
+    overhead here should be negligable anyway.
+
+commit acc4aca49e246a46e03f8978517c9b3d23b1baea
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Mon Aug 30 11:35:06 2010 -0400
+
+    Fix a bug in our win32 condition implementation
+    
+    The do ... while loop in our wait code could spin while waiting
+    because the event object wasn't reset until there were no longer any
+    events waiting to be woken up.  We also want to reset the event object
+    if the count of events to wake up reaches zero.
+    
+    Found by Chris Davis.  Fixes bug 3053358.
+
+commit d61b2f33861eacdc0f9d343d38522fd91c1b7e72
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Thu Aug 26 15:09:58 2010 -0400
+
+    Fix an issue with forking and signal socketpairs in select/poll backends
+    
+    Nicholas Marriott identifies an issue where a signal socketpair
+    doesn't get recreated if the event backend doesn't set event_reinit.
+    
+    See bug 3048812
+    
+    There may be a similar issue with respect to th_notify_fd
+
+commit 041989fb6600e9eb4abe3075da721199e771e920
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Tue Aug 17 14:44:12 2010 -0400
+
+    Rename regress_pthread.c to regress_thread.c
+
+commit f1074b776a08aa1735752484e25377889140a622
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Mon Aug 23 12:01:45 2010 -0400
+
+    Detect events with no ev_base; warn instead of crashing
+
+commit 743f8665395e7e06800e1a09a0ae701b72290d02
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Mon Aug 23 11:48:46 2010 -0400
+
+    Honor NDEBUG; build without warnings with NDEBUG; make NDEBUG always-off in unit test code
+
+commit 970e6ad2ba4e42963d51c032ae8f9d2bdf2cefda
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Thu Aug 19 14:00:06 2010 -0400
+
+    Avoid deadlock when activating signals.
+    
+    Fixes bug 3048812.
+    
+    Based on patch by Nicholas Marriott.
+
+commit 6123d1298fb3433986f35b2eef90d28282e53132
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Thu Aug 19 09:38:44 2010 -0400
+
+    Fix kquue correctness test on x84_64
+    
+    Apparently, in our configure.in check for a working kqueue, we were
+    leaving some fields unset that seemed to irritate 64-bit kqueue a lot.
+    
+    Found by Christopher Layne
+
+commit 4c32b9de2c707beaf09178e0b7793efa3f585669
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Wed Aug 18 12:02:25 2010 -0400
+
+    Fix logic error in win32 TRY_LOCK that caused problems with rate-limiting
+
+commit d0b884338f62fba233e3f0d00193e6908c84ee2f
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Wed Aug 18 10:49:12 2010 -0400
+
+    Set close-on-exec bit for filedescriptors created by dns subsystem.
+    
+    Based on patch for 1.4 by Ralf Schmitt.
+
+commit da6e7cd49588f6149166e05e7b7b725b360ab72c
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Tue Aug 17 13:26:03 2010 -0400
+
+    Correctly detect failure to delete bufferevent read-timeout event
+    
+    Gilad Benjamini noted that we check the error code for deleting a
+    write-timeout event twice, and the read timeout not at all.  This
+    shouldn't be a bit problem, since it's really hard for a delete to
+    fail on a timeout-only event, but it's worth fixing.
+    
+    Fixes bug 3046787
+
+commit 5fb10958249a89b2e7f3711fe0eed624086c5336
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Mon Aug 16 22:55:45 2010 -0400
+
+    Add a unit test for conditions
+
+commit d74ae381e00cec22e562c72583739d70bc9aa1bd
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Mon Aug 16 12:38:22 2010 -0400
+
+    Make the regress_pthread.c tests work on windows with current test APIs
+
+commit e0972c21389a45c60606ce2b842311c27fea2147
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Tue Aug 17 13:18:18 2010 -0400
+
+    Use conditions instead of current_event_lock to fix a deadlock.
+    
+    Avi Bab correctly noted as bug 3044479 the fact that any thread
+    blocking on current_event_lock will do so while holding
+    th_base_lock, making it impossible for the currently running event's
+    callback to call any other functions that require th_base_lock.
+    
+    This patch switches the current_event_lock code to instead use a
+    condition variable that we wait on if we're trying to mess with
+    a currently-executing event, and that we signal when we're done
+    executing a callback if anybody is waiting on it.
+
+commit d4977b52f07d61e215e5d5e98af2216719c06d16
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Tue Aug 17 13:15:34 2010 -0400
+
+    Add a condition variable backend, with implementations for pthreads and win32
+    
+    The interface from the user's POV is similar to the locking
+    implementation: either provide a structure full of function
+    pointers, or just call evthread_use_*_threads() and everything will
+    be okay.
+    
+    The internal interface is meant to vaguely resemble pthread_cond_*,
+    which Windows people will better recognize as *ConditionVariable*.
+
+commit 3920172821c2ad7862c2e4dab4d45adb1356a724
+Author: Gilad Benjamini <gilad at altornetworks.com>
+Date:   Fri Aug 13 17:19:18 2010 -0400
+
+    Make definition of WIN32_LEAN_AND_MEAN in event.h conditional.
+    
+    (Inclusion order might trigger a warning for redefinition on Windows.)
+
+commit 60433a0a1a4f9efb5c2eb130f0dcd721cab67ec7
+Author: Gilad Benjamini <gilad at altornetworks.com>
+Date:   Fri Aug 13 17:08:59 2010 -0400
+
+    Clean up syntax on TAILQ_ENTRY() usage
+    
+    Though the C standards allow it, it's apparently possible to get MSVC
+    upset by saying "struct { int field; } (declarator);" instead of
+    "struct {int field; } declarator;", so let's just not do that.
+    
+    Bugfix for 3044492
+    
+    (commit msg by nickm)
+
+commit a4af9be10a7b725d77a2ddbfa5d6ef8712521500
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Fri Aug 13 11:41:37 2010 -0400
+
+    Make include/event2/event-config.h not included in source dist
+    
+    As a generated file, it shouldn't get included in our source
+    distribution.  Apparently there is an automake incant for this:
+    nobase_ even stacks with nodist_ .
+
+commit 4022b287f8b096edeea9b461b4a0e5eb3e7ebebf
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Fri Aug 13 11:34:39 2010 -0400
+
+    Change include order in Makefile.nmake
+    
+    If there is an event-config.h in include/event2 (either because we
+    screwed up packaging like in 2.0.6-rc or because we previously tried
+    building with mingw and we didn't make distclean in the middle), we
+    want MSVC to find the one one in WIN32-Code/include/event2 first.
+    
+    Found by Gilad Benjamini.
+
+commit 4991669b7c7a781ec11740dd7b41683c0175ab4b
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Tue Aug 10 21:05:52 2010 -0400
+
+    Update the whatsnew-2.0.txt document
+
+commit 33200e72de88d505c036c2ae1fec28f519ac72af
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Tue Aug 10 15:03:14 2010 -0400
+
+    Document that DNS_NO_SEARCH is an obsolete alias for DNS_QUERY_NO_SEARCH
+
+commit 3808168d21afac0846758dbd2d913f49da8a4155
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Tue Aug 10 15:02:50 2010 -0400
+
+    Completely remove the (mostly-removed) obsolete thread functions.
+
+commit 9b5c19ac870eae15039146c55f574eea744d31b3
+Merge: 0bffe43 ebcb1f0
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Tue Aug 10 11:46:00 2010 -0400
+
+    Merge branch 'more_pkgconfig'
+
+commit ebcb1f0387efa1805a01a4a325da67ad786ca201
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Tue Aug 10 11:11:25 2010 -0400
+
+    Add pkgconfig files for libevent_{openssl,pthreads}
+
+commit 90b3ed5bc840480f1c1d40f93bc2d850e3830d64
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Mon Aug 9 13:25:50 2010 -0400
+
+    Add some comments to http.c and make a few functions static.
+
+commit 0bffe43a15fbd43bc7826acb88a3bada528c8adf
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Mon Aug 9 12:08:40 2010 -0400
+
+    Fix a nasty dangling-event bug when using rate-limiting groups
+    
+    When we freed a bufferevent that was in a rate-limiting group and
+    blocked on IO, the process of freeing it caused it to get removed
+    from the group.  But removing the bufferevent from the group made
+    its limits get removed, which could make it get un-suspended and in
+    turn cause its events to get re-added.  Since we would then
+    immediately _free_ the events, this would result in dangling
+    pointers.
+    
+    Fixes bug 3041007.
+
+commit ff481a8e43999c4ba1556bc472b5e69fce7ea353
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Fri Aug 6 23:22:01 2010 -0400
+
+    Increment vesion to 2.0.6-rc-dev
+
+commit 556d0f4001ae5dae2e98584a7b23e3def6339681
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Fri Aug 6 21:19:44 2010 -0400
+
+    Increment versions to 2.0.6-rc
+
+commit f65826404179bdc059eefb4fe4f156170569e034
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Fri Aug 6 21:11:01 2010 -0400
+
+    Changlog and new acknowledgements for 2.0.6-rc
+
+commit ec347b92251e188a13cbbfe0fe2e00aa14aeeca5
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Wed Jul 7 16:45:03 2010 -0400
+
+    Move event-config.h to include/event2
+    
+    This change means that all required include files are in event2, and
+    all files not in event2/* are optional.
+
+commit 5fa30d2bf443e9fc4c6ab9bf01f761006b97132d
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Fri Aug 6 17:13:27 2010 -0400
+
+    Fix evdns build with -DUNICODE
+    
+    It turns out that GetProcAddress always takes its second argument as
+    a C string, regardless of whether unicode is on or not.
+
+commit 28f31a4f8da9367a950e89f28a4ec2314d0e48e0
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Fri Aug 6 16:36:23 2010 -0400
+
+    Fix unit tests with -DUSE_DEBUG enabled
+    
+    If you were to enable USE_DEBUG and slog through all 700+ MB of
+    debugging output, you'd find that one of the unit tests failed,
+    since it tested the debug logging code, but the string it expected
+    and the string it logged differed by a tab vs 2 spaces.
+
+commit ea1ea3d6eedcaa95ab10eb29401aaa600356e028
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Fri Aug 6 13:34:51 2010 -0400
+
+    Make test-changelist count cpu usage right on win32
+
+commit 9b602096758de9361fdb61b658260da58b03333f
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Fri Aug 6 13:03:17 2010 -0400
+
+    Use AF_INET socketpair to test sendfile on Solaris
+
+commit 57b30cd7ccf7aca1d89812389a1e320d012f7a9e
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Fri Aug 6 13:01:32 2010 -0400
+
+    Turn our socketpair() replacement into its own function
+    
+    This patch splits the formerly windows-only case of evutil_socketpair()
+    into an (internal-use-only) function named evutil_ersatz_socketpair(), and
+    makes it build and work right on non-Windows hosts.
+    
+    We need this for convenience to test sendfile on solaris, where socketpair
+    can't give you an AF_INET pair, and sendfile() won't work on AF_UNIX.
+
+commit de1f5d6d87c8122ede59124ea5d9255cb609af78
+Author: Christopher Davis <chrisd at mangrin.org>
+Date:   Fri Aug 6 09:33:55 2010 -0400
+
+    Remember to initialize timeout events for bufferevent_async
+    
+    Fixes segfaults in unit tests.
+
+commit 170ffd2b1d3d8458d39d9f74099c0b381557544b
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Thu Aug 5 15:57:30 2010 -0400
+
+    Increase the tolerance in our unit tests for sloppy clocks.
+    
+    (Apparently openbsd in virtualbox just doesn't keep very accurate time.)
+
+commit e996b3d411dcdf58f0d8b4e527402db089cc878d
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Thu Aug 5 15:51:16 2010 -0400
+
+    Make tests quieter on local dns resolver failure
+
+commit 4558ce23220e28e22140afd61a60399f0a8fbb76
+Merge: b2c6202 009f300
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Wed Aug 4 17:31:28 2010 -0400
+
+    Merge branch 'openssl_ratelim'
+
+commit b2c6202d65f3a057ed76f0296b52156980f2482a
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Wed Aug 4 15:52:32 2010 -0400
+
+    Fix an assertion bug in test-ratelim
+    
+    If the rate limit was low enough, then the echo_conns wouldn't finish
+    inside the 300 msec we allowed for them to close.  Instead, count the
+    number of connections we have, and keep waiting until they are all
+    closed.
+
+commit 42f6b6241444ff66b08956a7c7f4e13f2f5f49f3
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Wed Aug 4 15:51:14 2010 -0400
+
+    Add option to test-ratelim to test min_share
+
+commit 6ae53d676242227bc199c69de9244d6c3599ab44
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Wed Aug 4 15:44:08 2010 -0400
+
+    Add an interface to expose min_share in ratelimiting groups
+
+commit 009f300532481d4f3b7237f9a59fd306b371b8c0
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Wed Aug 4 14:54:38 2010 -0400
+
+    Fix rate-limit calculation on openssl bufferevents.
+    
+    When you're doing rate limiting on an openssl connection, you nearly
+    always want to limit the number of bytes sent and received over the
+    wire, not the number of bytes read or written over the secure
+    transport.
+
+commit 13b912e4acb6fea5802ae3005898535af2ae5263
+Author: Trond Norbye <trond.norbye at gmail.com>
+Date:   Sun Aug 1 21:39:48 2010 +0200
+
+    Fixed compilation of sample/le-proxy.c on win32
+
+commit 42a8c7111264ff1469083e50bd5b0c0ee494725b
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Sat Jul 31 17:10:04 2010 -0400
+
+    Build more cleanly with NetBSDs that dislike toupper(char)
+    
+    To be fair, when char can be signed, if toupper doesn't take negative
+    characters, toupper(char) is a very bad idea.  So let's just use the
+    nice safe EVUTIL_TOUPPER instead.  (It explicitly only upcases ASCII,
+    but we only use it for identifiers that we know to be ASCII anyway).
+
+commit 840a72fbd52197e443efe413650ef3556cfcee60
+Author: Joachim Bauch <mail at joachim-bauch.de>
+Date:   Thu Jul 29 20:32:40 2010 -0400
+
+    Fix badly-behaved subtest of dns/bufferevent_connect_hostname
+    
+    The bufferevent_connect_hostname test was specifying AF_INET, but the
+    gethostbyname test we were using to see what error to expect was using
+    PF_UNSPEC, leading to possible divergence of results.
+
+commit 9e725f72e72cb9b37b39915a260f9aee265f2c59
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Thu Jul 29 18:12:05 2010 -0400
+
+    Improve error message for failed epoll to make debugging easier.
+
+commit cc2379d2642d2b9d0cbb1098ce1b3095e14551b3
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Mon Jul 26 14:48:32 2010 -0400
+
+    Constify a couple of arguments to evdns_server_request_add_*_reply
+
+commit e1c1167cbe7c3c7e60267abe242a2fa91f4c2dfe
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Thu Jul 22 14:38:08 2010 +0200
+
+    Replace (unused,always 0) is_tcp argument to evdns_add_server_port*() with flags
+    
+    Since we weren't using it for anything, and we always failed if it was
+    set, we're allowed to change the future semantics of setting it.
+
+commit 7e87a599bb004574de8e6a9cdd13a27f561df7e9
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Wed Jul 21 14:33:42 2010 +0200
+
+    Stop asserting when asked for a (unsupported) TCP dns port. Just return NULL.
+
+commit c991317409f7787223fc11541100d0b0f60afa20
+Author: Mike Smellie <mike.j.smellie at gmail.com>
+Date:   Mon Jul 19 15:31:19 2010 +1200
+
+    Change bufferevent_openssl::do_write so it doesn't call SSL_write with a 0 length buffer
+    
+    I was running into a problem when using bufferevent_openssl with a
+    very simple echo server.  My server simply bufferevent_read_buffer 'd
+    data into an evbuffer and then passed that evbuffer straight to
+    bufferevent_write_buffer.
+    
+    The problem was every now and again the write would fail for no
+    apparent reason. I tracked it down to SSL_write being called with the
+    amount of data to send being 0.
+    
+    This patch alters do_write in bufferevent_openssl so that it skips
+    io_vecs with 0 length.
+
+commit 7c926916b21b88d6c3d6f6aff36406023c4aa89c
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Mon Jul 19 15:14:10 2010 +0200
+
+    Make test/test.sh call test-changelist
+    
+    Eventually test-changelist should expand to try more cases, maybe
+    query the status of the actual changelist somehow, and integrate it
+    with the rest of the unit tests.
+    
+    Also, add test-changelist to gitignore.
+
+commit cb927a51731188a4135906b6d7518c04ce12b05e
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Mon Jul 19 15:03:43 2010 +0200
+
+    Fix whitespace.
+
+commit b00d4c0452e59b9ca8c8d4454078e1538a3bac8b
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Mon Jul 19 14:58:08 2010 +0200
+
+    Remove unused variables in test/test-changelist.c
+
+commit cf249e7d997743523ef5bf8b5328697751d303bc
+Author: Mike Smellie <mike.j.smellie at gmail.com>
+Date:   Mon Jul 19 13:44:56 2010 +1200
+
+    Possible fix to 100% cpu usage with epoll and openssl
+    
+    I'm running a fairly simple bit of test code using libevent2 with epoll and
+    openssl bufferevents and I've run into a 100% cpu usage problem.
+    
+    Looking into it 100% usage was caused by epoll_wait constantly
+    returning write events on the openssl socket when it shouldn't really have
+    been looking for write events at all (N_ACTIVE_CALLBACKS() was returning 0
+    also).
+    
+    Looking a bit deeper eventbuffer_openssl socket seems to be requesting
+    that the EV_WRITE event be removed when it should, but the event isn't
+    actually being removed from epoll.
+    
+    Continuing to follow this I think I've found a bug in
+    event_changelist_del.
+    
+    For evpoll event_del calls event_changelist_del which caches the change
+    which is then actioned later when evpoll_dispatch is called.
+    
+    In event_changlist_del there is a check so that if the currently changed
+    action is an add then the cached action is changed to a no-op rather than a
+    delete (which makes sense). The problem arises if there are more than
+    two add or delete operations between calls to dispatch, in this case it's
+    possible that the delete is turned into a no-op when it shouldn't have
+    been.
+    
+    For example starting with the event on, a delete followed by an add and
+    then another delete results in a no-op when it should have been a delete (I
+    added a fair bit of debug output that seems to confirm this behaviour).
+    
+    I've applied a small change that checks the original old_event stored with
+    the change and only converts the delete to a no-op if the event isn't on in
+    old_event. This seems to have fixed my problem.
+
+commit 928b7d4960e609e312180b93952c09449bf2d8e3
+Merge: 65abdc2 fc5e0a2
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Fri Jul 16 12:38:23 2010 -0400
+
+    Merge branch 'pncalls_fix'
+
+commit 65abdc2011fe1019471cddff78d3cf596b2bccbe
+Author: niks <niksniksniks at sourceforge.net>
+Date:   Fri Jul 16 09:11:09 2010 -0400
+
+    Fix wrong sie calculation of iovec buffers when exact=1
+    
+    The old code had a bug where the 'exact' flag to 1 in
+    _evbuffer_read_setup_vecs would never actually make the iov_len field
+    of the last iovec get truncated.  This patch fixes that.
+
+commit 7c2dea1615fa1488c9cadc9f5aeb885c1ba26a60
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Tue Jul 13 11:06:08 2010 -0400
+
+    Pass flags to fcntl(F_SETFL) and fcntl(F_SETFD) as int, not long
+    
+    Everybody but Linux documents this as taking an int, and Linux is
+    very tolerant of getting an int instead.  If it weren't, everybody
+    doing fcntl(fd,F_SETFL,O_NONBLOCK) would break, since the glibc
+    headers define O_NONBLOCK as an int literal.
+
+commit e73cbde15f7fe71649c2d9783a03a805edc10027
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Thu Jul 8 14:41:02 2010 -0400
+
+    Suppress a spurious EPERM warning in epoll.c
+    
+    It's okay for us to get an EPERM when doing an EPOLL_DEL on an fd; it
+    just means that before we got a chance to the EPOLL_DEL, we closed the
+    fd and reopened a new non-socket that wound up having the same fd.
+    
+    Partial fix for Bug 3019973.
+
+commit fc5e0a23442f04ccb3b10355a8c5d05419bf0f6c
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Mon Jul 5 14:39:39 2010 -0400
+
+    Don't race when calling event_active/event_add on a running signal event
+    
+    There was previously no lock protecting the signal event's
+    ev_ncalls/ev_pncalls fields, which were accessed by all of
+    event_signal_closure, event_add_internal, event_del_internal, and
+    event_active_nolock.  This patch fixes this race by using the
+    current_event_lock in the same way it's used to prevent
+    event_del_internal from touching an event that's currently running.
+
+commit 61e1eeec6f914a0c00955e7f376f17010446c78e
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Mon Jul 5 13:24:45 2010 -0400
+
+    Tidy up the code in evthread_make_base_notifiable a little
+    
+    Previously, we had a few conditional statements with the "if (...)"
+    inside an #ifdef and the body outside.  That kind of thing is hard to
+    read.
+
+commit a5bc15b2e114a39d7b4f14bd1ba17182d6f07ed2
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Mon Jul 5 13:24:12 2010 -0400
+
+    Drain th_notify_fd[0] more bytes at a time.
+
+commit 17522d2af846bdeb18bd7e39527caea03a021afa
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Mon Jul 5 13:17:47 2010 -0400
+
+    Fix a deadlock related to event-base notification.  Diagnosed by Zhou Li, Avi Bab, and Scott Lamb.
+    
+    The problem was that the thread doing the notification could block on
+    write in evthread_notify_base_default while holding the th_base_lock.
+    The main thread would never drain th_notify_fd[0], since it would need
+    th_base_lock to actually trigger events.
+
+commit d89fdba424c654445d0f927670691d9b55f20846
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Mon Jul 5 12:28:22 2010 -0400
+
+    Make sample/hello_world	work on	windows
+    
+    We forgot to include the WSAStartup call in main().
+    
+    Patch from an anonymous user on Sourceforge.
+    
+    Fixes bug 3025354.
+
+commit 085987093f186dc6eb1145ae861af0d34fc0d9fd
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Mon Jul 5 12:26:21 2010 -0400
+
+    never let bufferevent_rlim functions return negative
+
+commit 142500317e84517472a548637efb2844d63cbd47
+Author: Sebastian Hahn <sebastian at torproject.org>
+Date:   Wed Jun 23 01:15:15 2010 +0200
+
+    Really only add libevent_core.la to LIBADD on mingw
+    
+    Commit fdc629736e1 tried to do this, but added it for mingw and
+    for everything else. Fixes a segfault in bufferevent unittests.
+
+commit 215e629cd4244f40769e09df5951c6cbe66ed246
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Mon Jun 21 12:26:21 2010 -0400
+
+    Add bufferevent_lock()/bufferevent_unlock()
+    
+    Although bufferevent operations are threadsafe, sometimes you need
+    to make sure that a few operations on a single bufferevent will all
+    be executed with nothing intervening.  That's what these functions
+    are for.
+
+commit 7b259b6796fc34948402805e88184c29400db159
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Mon Jun 21 12:24:49 2010 -0400
+
+    Fix sentence fragment in docs for event_get_struct_event_size()
+
+commit 7510aac3b900d876024f968d8fbbb72f6f49671b
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Mon Jun 21 12:23:32 2010 -0400
+
+    Unit test for event_get_struct_event_size()
+
+commit 9659eced03c101bf83205c56383f7f52f7f9ee09
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Sat Jun 19 18:23:16 2010 -0400
+
+    Add a comment to describe our plan for library versioning
+
+commit b2d7440a9121ab372e8b2b6bf2cec8185bb6b10e
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Sat Jun 19 18:22:48 2010 -0400
+
+    Set library version for libevent_pthreads correctly
+
+commit e21f5d15ebcc42a2f3300f59afad0c599a0f41a2
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Sat Jun 19 18:21:40 2010 -0400
+
+    Document a change in the semantics of event_get_struct_event_size()
+
+commit 8a4406230824ed7d6bc5b9c12b2d8a9293f71c94
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Thu Jun 17 10:33:06 2010 -0400
+
+    Have autogen.sh pass --force-missing to automake
+    
+    Previously, our autogen.sh script wouldn't tell automake to update
+    older versions of its copied-in scripts, which would cause problems if
+    they got sufficiently out-of-date.
+
+commit 9b14911654dec0ab521f29c3868774fea5a492b3
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Thu Jun 17 10:31:35 2010 -0400
+
+    Remove some automake-generated files from version control.
+
+commit 276e7ee97eedd3f3745bff2eecccb4f29fcbfdac
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Fri Jun 11 11:57:13 2010 -0400
+
+    Fix a pedantic gcc 4.4 warning in event2/event.h
+
+commit 29b2e233a7a4eb0f1842368770d545a685743d80
+Author: Felix Nawothnig <felix.nawothnig at gmail.com>
+Date:   Sun May 30 03:17:48 2010 +0200
+
+    Fix possible nullptr dereference in evhttp_send_reply_end()
+    
+    (The existing implementation had sanity-checking code for the case where
+     its argument was NULL, but it erroneously dereferenced it before actually
+     doing the sanity-check. --nickm)
+
+commit 17a8e2d72b156f82c7ecaba989a996c943f03042
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Mon Jun 7 12:06:43 2010 -0400
+
+    Add a function to retrieve the other side of a bufferevent pair
+
+commit 44d57eee93724a8f6db24c466de34a410ab22d79
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Thu Jun 3 11:25:54 2010 -0400
+
+    Add test for behavior on remote socket close
+    
+    On all the backends on this little mac laptop, that behavior is to
+    report a remote socket close as both EV_READ and EV_WRITE.
+    Historically, we had problem for some of these behaviors on some
+    backends, so let's make sure that such behaviors don't come back.
+
+commit 3467f2fa3bbff0dab6865a0ed08475ed3573c230
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Fri May 28 15:05:32 2010 -0400
+
+    Fix logic in correcting high values from FIONREAD
+    
+    The old logic made sense back when buffer.c was an enormous linear
+    buffer, but it doesn't make any sense for the chain-based
+    implementation.
+    
+    This patch also refactors the ioctl{socket}? call into its own function.
+
+commit 0798dd1247407fcbae7c8401a41a082b64060e1d
+Author: Pierre Phaneuf <pphaneuf at gmail.com>
+Date:   Thu May 27 22:37:09 2010 -0400
+
+    Close the file in evutil_read_file whether there's an error or not.
+    
+    evutil_read_file would close the file if there was an error, but not if things went normally.
+
+commit c21c6631618c71575dd8f372c534af8eedf2f871
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Thu May 27 01:32:11 2010 -0400
+
+    Add the libtool-generated /m4/* stuff to .gitignore
+
+commit 39906698ca5db840495af1b68923ae6bd12ae1dd
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Wed May 26 12:58:02 2010 -0400
+
+    Let evhttp_send_error infer the right error reasons
+
+commit 06bd05634d2f1d098b81859c7b7309a5a4b4a746
+Author: Felix Nawothnig <felix.nawothnig at googlemail.com>
+Date:   Wed May 26 12:50:59 2010 -0400
+
+    Fix the default HTTP error template
+    
+    The current template...
+    
+    <HTML><HEAD><TITLE>%s</TITLE>
+    </HEAD><BODY>
+    <H1>Method Not Implemented</H1>
+    Invalid method in request<P>
+    </BODY></HTML>
+    
+    is highly confusing. The given title is easily overlooked and the
+    hard-coded content is just plain wrong in most cases (I really read
+    this as "the server did not understand the requested HTTP method)
+    
+    This patch changes the template to include the error reason in the
+    body as well as in the header, and to infer the proper reason from
+    the status code whenever the reason argument is NULL.
+    
+    This patch also removes a redundant evhttp_add_header from
+    evhttp_send_error; evhttp_send_page already adds a "Connection:
+    close" header.
+
+commit 3689bd2d497d8af224532282c263581ea47b6db5
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Wed May 26 13:32:32 2010 -0400
+
+    Have the unit tests report errors from test.sh
+    
+    The default behavior of test.sh was to suppress all output from
+    test/regress, and say nothing but OKAY or FAILED.  This wasn't so good
+    for getting bugs reported, since lots of people didn't know to set
+    TEST_OUTPUT_FILE, or re-run ./test/regress on its own.
+    
+    Now, when you don't specify an output file for test.sh, it runs
+    regress with the --quiet option.  This option makes the unit tests
+    only print output on failure, which is what we probably wanted.
+
+commit faf2a04fa5e4c44a356d635502cc7e2dbead34d3
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Wed May 26 13:31:41 2010 -0400
+
+    Make test.sh exit with nonzero status if tests fail
+    
+    This behavior makes "make verify" actually fail when the tests fail,
+    which is what it's supposed to do.
+
+commit 8bc1e3d6d109c4f72b2c3962e721c0b9399fb855
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Wed May 26 13:19:08 2010 -0400
+
+    Remove all non-error prints from test/regress.c
+    
+    Now, running ./test/regress --quiet will indeed only inform you
+    about errors.  Previously, it would also spew extra output.
+
+commit e73f1d792a1c3e8e97a0339fbc20c062c880669a
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Wed May 26 13:18:30 2010 -0400
+
+    Remove the now-obsolete setup_test() and cleanup_test() functions
+
+commit 899b0a39abdac0af5be956c160b176392c5e6233
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Mon May 24 15:24:03 2010 -0400
+
+    Use generic win32 interfaces, not ASCII-only ones, where possible.
+
+commit 4ff247b293c98bae4dc1576f3e9631554cfeb00a
+Merge: 47c5dfb b14f151
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Wed May 19 10:49:49 2010 -0400
+
+    Merge branch 'evdns_no_empty_handles'
+
+commit 47c5dfbea9b84e41f4b1579fe245307d3a7fc5a4
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Tue May 18 17:28:51 2010 -0400
+
+    Remove some dead assignments
+
+commit b14f151b42ca9fddd52bee7c323e1217b28ae8af
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Tue May 18 17:27:06 2010 -0400
+
+    If no evdns request can be launched, return NULL, not a handle
+    
+    Some of our evdns code was willing to return an evdns_request with
+    handle->current_req set to NULL.  Really, those cases should just
+    return NULL.
+
+commit d14bb926b42a91a1ac48c10b41cfe3a96e8408b9
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Tue May 18 14:05:01 2010 -0400
+
+    Use -Wlogical-op on gcc 4.5 or higher
+    
+    It exposed one bug for us (see 8c3452bcb294e07888), and might
+    prevent more.
+
+commit 8c3452bcb294e07888f9044030d5e93825537c08
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Tue May 18 13:55:32 2010 -0400
+
+    Correctly recognize .255 addresses as link-local when looking for interfaces
+
+commit bda21e7ff96dafd679f8308eed5fa9c7e83a2d93
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Mon May 17 11:58:07 2010 -0400
+
+    Avoid close of uninitialized socket in evbuffer unit test
+    
+    Attempts to fix a crash bug found by Brodie Thiesfield.
+
+commit caca2f451c3ecc97745f578bae9b4ad40145d84d
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Fri May 14 14:36:49 2010 -0400
+
+    Replace (safe) use of strcpy with memcpy to appease OpenBSD
+    
+    If Libevent uses strcpy, even safely, it seems OpenBSD's linker will
+    complain every time a library links Libevent.  It's easier just not to
+    use the old thing, even when it's safe to do so.
+
+commit 75701e897b7a077beb57d49cc1b13df84ec23fb9
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Fri May 14 14:30:09 2010 -0400
+
+    Add some missing includes to fix Linux build again
+
+commit b5bfc44d6bf97f404e47217a38b80bf75338d6e7
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Thu May 13 15:38:39 2010 -0400
+
+    Make test-ratelim clean up after itself better.
+
+commit 6d195109eb4c7233486fefe7cef834e912f610ec
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Thu May 13 14:59:33 2010 -0400
+
+    Avoid event_del on uninitialized event in event_base_free
+    
+    This was mostly harmless, since the event was cleared with calloc, but
+    still it's not a correct thing to do.
+
+commit 2b44dccaaf632794b22e8e0e3e407702b1719851
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Thu May 13 12:01:30 2010 -0400
+
+    Add options to test-ratelim.c to check its results
+    
+    The new options let you specify a maximum deviation of bandwidth used
+    from expected bandwidth used, and make test-ratelim.c exit with a
+    nonzero status when those deviations are violated.
+    
+    This patch also adds a test-ratelim.sh script to run test-ratelim with
+    a few sensible options for testing.
+
+commit 218a3c372c9eb0fab8325833342fa7e8e0ce8e86
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Thu May 13 11:24:07 2010 -0400
+
+    Do not check that event_base is set in EVBASE_ACQUIRE_LOCK
+    
+    In every place that we call EVBASE_ACQUIRE_LOCK, the base is either
+    set, or must be set, so the test is redundant.
+
+commit fdfc3fc502bf04b2cedf0b9a812e52af315e32b7
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Thu May 13 11:23:12 2010 -0400
+
+    Remove the now-unusable EVTHREAD_LOCK/UNLOCK constants
+
+commit 33bbbed9dde90b68d3bf88dca1f21b557425db4b
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Thu May 13 10:57:30 2010 -0400
+
+    Mark the event_err() functions as __attribute__((noreturn))
+    
+    This attribute tells gcc (and anything else that understands gcc
+    attributes) that the functions will never return control, and helps
+    the optimizer a little.  With luck, it will also tell
+    less-than-full-program dataflow analysis tools that they don't need to
+    worry about any code path that involves calling one of these functions
+    and then returning.
+    
+    This patch also forces event_exit() to always exit, no matter what the
+    user-supplied fatal_callback does.  This means that the old unit tests
+    for the event_err* functions don't work any more, since they assume it
+    is safe to call event_err* if you've given it a bogus fatal_callback
+    that doesn't exit.  Instead, we have to make the unit tests fork
+    before calling event_err(), and have the main unit test process wait
+    for the event_err() test to exit with a sane exit code.  On unix,
+    that's trivial.  On windows, let's not bother and just assume that
+    event_err* works.
+
+commit dfb75ab207f105c780a9819414c78f235548773d
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Wed May 12 15:38:28 2010 -0400
+
+    Test the unlocked-deferred callback case of bufferevents
+
+commit c5bab56002bd2cdbfe4687b80a6abf5397786d76
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Tue May 11 11:44:07 2010 -0400
+
+    Remove the obsolete evthread interfaces
+    
+    These were added in 2.0.1, and deprecated in 2.0.4 and 2.0.5; we've
+    promised that they would be removed, and warned whenever they were
+    invoked.  Users should call evthread_set_lock_callbacks instead...  or
+    ideally just call evthread_use_windows_threads or
+    evthread_use_pthreads.
+
+commit 9cb5bc86a9a03a1fb81764ae5fcd54e98772c767
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Mon May 10 14:51:32 2010 -0400
+
+    Bump version to 2.0.5-beta-dev
+
+commit ad9b7f153d4774c444793f335990983b47b68811
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Sun May 9 00:22:08 2010 -0400
+
+    Increment version numbers for 2.0.5-beta
+
+commit f6aaf176d26e57d1640ed4308e91cf0ce046fea7
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Sun May 9 00:16:35 2010 -0400
+
+    Add a changelog for 2.0.5-beta
+
+commit 7c519dfd4fc62493d4ed07f77f9aa4a7bb472cd6
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Sat May 8 23:29:29 2010 -0400
+
+    Fix some autoconf issues on OpenBSD
+    
+    Issue 1: autoconf gets accept when a header works properly with cpp
+    but not with cc.  This was true of the sys/sysctl.h header on
+    openbsd.  The fix: include sys/param.h (if present) when testing for
+    sys/sysctl.h
+    
+    Issue 2: Somehow, autoconf's macro generation code is messed up on
+    some versions of openbsd (including mine, and other people's too) so
+    that instead of SIZEOF_VOID_P, it makes SIZEOF_VOID__.
+    evutil/util.h now works around that.
+
+commit c1cd32a156b75fa692471def021261126df33f88
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Sat May 8 22:21:52 2010 -0400
+
+    Define _REENTRANT as needed on Solaris, elsewhere
+    
+    It turns out that _REENTRANT isn't only needed to make certain
+    functions visible; we also need it to make pthreads work properly
+    some places (like Solaris, where forgetting _REENTRANT basically
+    means that all threads are sharing the same errno).  Fortunately,
+    our ACX_PTHREAD() configure macro already gives us a PTHREAD_CFLAG
+    variable, so all we have to do is use it.
+
+commit 3d9e05b17498c8b982a8d34031341fbe9b6dbb0e
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Sat May 8 19:56:25 2010 -0400
+
+    Fix test.sh on freebsd
+    
+    It turns out that in all conformant shells, "unset FOO" removes FOO
+    both from the shell's variables and from the exported environment.
+    (I've tested this on msys, opensolaris, linux, osx, and freebsd.)
+    
+    And in nearly every shell I can find, "unset FOO; export FOO" does
+    the same as unset FOO... except in my FreeBSD VM, where the "export
+    FOO" sets the exported value of FOO equal to "".  This broke test.sh
+    for us.
+    
+    The fix is simple: remove the needless exports!
+
+commit 0ee6f6ce805570576755142d28022c27446e27cc
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Sat May 8 18:00:26 2010 -0400
+
+    Make test.sh support mingw/msys on win32
+    
+    This required:
+       - Adding another WIN32 section in test.sh
+       - not running "touch /dev/null"
+       - calling WSAStartup in all the test binaries
+       - Fixing a dumb windows-only bug in test-time.c
+
+commit 935e1504b1bb090119c4b9b42f3b34141290523c
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Sat May 8 19:36:05 2010 -0400
+
+    Fix whitespace in evutil.c
+
+commit 35570716988ba70f28f9580818903437b6409bcb
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Sat May 8 19:16:47 2010 -0400
+
+    Fix another nasty solaris getaddrinfo() behavior
+    
+    Everybody else thinks that when you getaddrinfo() on an ip address
+    and don't specify the protocol and the socktype, it should give you
+    multiple answers , one for each protocol/socktype implementation.
+    
+    OpenSolaris takes a funny view of RFC3493, and leaves the results set
+    to 0.
+    
+    This patch post-processes the getaddrinfo() results for consistency.
+
+commit 2cf2a286e42356601514d754acbcefc3cf0b23ad
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Wed Apr 21 11:57:55 2010 -0400
+
+    Fix getaddrinfo with protocol unset on Solaris 9. Found by Dagobert Michelsen
+    
+    Apparently when you call Solaris 9's getaddrinfo(), it likes to leave
+    ai_protocol unset in the result. This is no way to behave, if I'm
+    reading RFC3493 right.
+    
+    This patch makes us check for a getaddrinfo() that's broken in this way,
+    and work around it by trying to infer socktype and protocol from one
+    another.
+    
+    Partial bugfix for 2987542
+
+commit c44de06c766906a7d90f5dcb99877caafad241af
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Sat May 8 18:09:27 2010 -0400
+
+    Numerous opensolaris compilation fixes
+    
+    For future note, opensolaris doesn't have sys/sysctl.h, doesn't like
+    comparing iov_buf to a chain_space_ptr without a cast, and is (predictably)
+    unforgiving of dumb syntax errors.
+    
+    Also, we had accidentally broken the devpoll backend test in configure.in
+
+commit f89168e7eafb40bc68e17b8fa3323c23343e400a
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Sat May 8 19:11:50 2010 -0400
+
+    Make test for bufferevent_connect_hostname system-neutral
+    
+    Previously, the be5_outcome field for the dns error would be set to
+    something dependent on our system resolver.  It turns out that you
+    can't rely on nameservers to really give you an NEXIST answer for
+    xyz.example.com nowadays: too many of them are annoyingly broken and
+    like to redirect you to their locked-in portals.  This patch changes
+    the bufferevent_connect_hostname test so that it makes sure that the
+    dns_error of be5_outcome is "whatever you would get from resolving
+    the target hostname"
+
+commit 88a543fc190c7c3f339e0650b833adfe81caa12e
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Sat May 8 19:09:09 2010 -0400
+
+    Make unit test for add_file able to tell "error" from "done"
+    
+    Importantly, we don't actually want to call evbuffer_write() when
+    the buffer is empty.  This makes it an error to ever get a -1 return
+    value from evbuffer_add_file(), which makes it safe for us to test
+    the return value.
+
+commit 384d124581e929e4a9765a8ad16c0edddc0efc2e
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Sat May 8 17:15:52 2010 -0400
+
+    Fix bench_http build on win32.
+
+commit 05de45d63fa79bb495f9cee5eae707c57f26eb78
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Sat May 8 16:47:07 2010 -0400
+
+    add more (currently skipped) add_file tests on win32
+
+commit ad811cdc2b33c0fc72fdd3ae684a5c3763033d90
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Sat May 8 16:41:01 2010 -0400
+
+    Fix unused-variable warning when building with threads disabled
+
+commit dcdae6b743b1cfc2dceff0b95b3236dd83742f61
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Sat May 8 16:34:18 2010 -0400
+
+    Make evbuffer_add_file() work on windows
+    
+    Right now only the add_file() mode is supported, when it would be
+    nicer to have mmap support.  Perhaps for Libevent 2.1.x.
+
+commit b4f12a17aaa6e9badb25409e59cd32d0c549dbb7
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Sat May 8 14:49:59 2010 -0400
+
+    Implement regress_make_tempfile on win32 to test evbuffer_add_file
+    
+    (Conclusion: evbuffer_add_file is broken on win32, since it
+    uses recv on a file.)
+
+commit 90d4225137d00bc58eeee82f1a5fa4272dc17bd1
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Sat May 8 15:31:54 2010 -0400
+
+    Fix some crazy macro mistakes in arc4random.c
+
+commit f37cd4c227397bfbc8c0b635417f0bf85d7ded33
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Wed Apr 21 12:25:29 2010 -0400
+
+    Detect broken unsetenv at unit-test runtime
+    
+    If we have an unsetenv function that doesn't work, we can't run the
+    main/base_environ unit test, so we should skip it.
+
+commit fdc629736e1cedb7bb4ab201e49cb1638c69888e
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Thu May 6 14:37:23 2010 -0400
+
+    Only add libevent_core.la to LIBADD on mingw
+    
+    Chris Davis reports that this is also necessary to fix building with
+    shared libraries on OSX for him.  Should fix bug 2997775.
+    
+    There is probably a better fix for the issues solved by commit
+    3cbca8661f, but for now, we're trying to get a beta out the door.
+
+commit 25433b96dc071b6b53914b069fd6525a19b839ac
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Thu May 6 14:37:23 2010 -0400
+
+    Only specify -no-undefined on mingw
+    
+    It turns out that commit 3cbca8661f broke building with shared
+    libraries on OSX.  Since -no-undefined is only necessary on platforms
+    like win32, only use it there.
+    
+    There may be a better fix for this.  Should fix bug 2997775.
+
+commit a62c8433407c5c6d762394a3395470e34fb20f49
+Merge: 7731ec8 0ef4070
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Thu May 6 14:16:50 2010 -0400
+
+    Merge commit 'chrisd/connect-hostname-report-err'
+
+commit 7731ec882833e3ca660db3875a61432058495a02
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Thu May 6 13:26:05 2010 -0400
+
+    Stop distributing and installing manpages: they were too inaccurate
+    
+    It would be great to have the manpages come back some time, perhaps
+    from a refactoring of my asciidoc book, but for now the existing
+    manpages were the single worst, most incomplete, and most misleading
+    libevent documentation we had.  (Less misleading: the doxygen output,
+    the header files, and my reference book.)
+
+commit c16e68448c546c99d3c0d1a1447214a55e137b35
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Tue May 4 13:27:36 2010 -0400
+
+    Rename current_base symbol to event_global_current_base_
+    
+    The "current_base" symbol was never actually declared in an exported
+    header; it's hideously deprecated, and it was the one remaining
+    exported symbol (fwict) that was prefixed with neither ev nor
+    bufferevent nor _ev nor _bufferevent.
+    
+    codesearch.google.com turns up no actual attempts to use our
+    current_base from outside libevent.
+
+commit 99e50e90bd2a03638f9bef11dae12d9951b0c793
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Tue May 4 12:57:40 2010 -0400
+
+    Fix symbol conflict between mm_*() macros and libmm
+    
+    Our mm_malloc, mm_calloc, etc functions were all exported, since C
+    hasn't got a nice portable way to say "we want to use this function
+    inside our library but not export it to others".  But they apparently
+    conflict with anything else that calls its symbols mm_*, as libmm does.
+    
+    This patch renames the mm_*() functions to event_mm_*_(, and defines
+    maros in mm_internal so that all the code we have that uses mm_*()
+    will still work.  New code should also prefer the mm_*() macro names.
+    
+    Reported by Gernot Tenchio.  Fixes sf bug 2996541
+
+commit 20fda296c5faada095c7122244ecd6beff1c0931
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Mon May 3 13:00:00 2010 -0400
+
+    Try /proc on Linux as entropy fallback; use sysctl as last resort
+    
+    It turns out that the happy fun Linux kernel is deprecating sysctl,
+    and using sysctl to fetch entropy will spew messages in the kernel
+    logs.  Let's not do that.  Instead, let's call sysctl for our
+    entropy only when all other means fail.
+    
+    Additionally, let's add another means, and try
+    /proc/sys/kernel/random/uuid if /dev/urandom fails.
+
+commit 71afc525804f416cfaabf4ec253f725fe3ec6822
+Author: Frank Denis <chrysalis at users.sourceforge.net>
+Date:   Mon May 3 11:37:16 2010 -0400
+
+    Fix nonstandard TAILQ_FOREACH_REVERSE() definition
+    
+    Every current BSD system providing TAILQ_* macros define
+    TAILQ_FOREACH_REVERSE in this order:
+    
+    TAILQ_FOREACH_REVERSE(var, head, field, headname)
+    
+    However, libevent defines it in another order:
+    
+    TAILQ_FOREACH_REVERSE(var, head, headname, field)
+    
+    Here's a trivial patch to have libevent compatible with stock queue.h headers.
+    
+    -Frank.
+    
+    [From sourceforge patch 2995179. codesearch.google.com confirms that
+    the only people defining TAILQ_FOREACH_REVERSE our way are people
+    using it in a compatibility header like us.  Did we copy this from
+    OpenSSH or something?]
+    
+    -Nick
+
+commit 953e2290fc9a649c465d5bcc7b26bdb0d5693c3b
+Author: Frank Denis <chrysalis at users.sourceforge.net>
+Date:   Mon May 3 11:29:22 2010 -0400
+
+    Refuse null keys in evhttp_parse_query()
+    
+    evhttp_parse_query() currently accepts empty keys, that don't make any
+    sense.
+    
+    -Frank
+    
+    [From sourceforge patch 2995183]
+    -Nick
+
+commit bd1ed5f3c5015999c91a33bd5d7ed69b8b7b81d5
+Author: Sebastian Hahn <sebastian at torproject.org>
+Date:   Sun May 2 12:51:35 2010 +0200
+
+    Fix a compile warning introduced in 739e688
+
+commit 739e6882757a0b6b398f95859da4720ca60269c8
+Author: Pierre Phaneuf <pphaneuf at gmail.com>
+Date:   Wed Apr 28 21:33:13 2010 -0700
+
+    Allow empty reason line in HTTP status
+
+commit 50ec59f4a6aa662fd80e070b9efd795e627b8d59
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Wed Apr 28 15:16:32 2010 -0400
+
+    Remove redundant checks for lock!=NULL before calling EVLOCK_LOCK
+    
+    The EVLOCK_LOCK and EVLOCK_UNLOCK macros already check to make sure
+    that the lock is present before messing with it, so there's no point
+    in checking the lock before calling them.
+    
+    A good compiler should be able to simplify code like
+      if (lock) {
+         if (lock)
+            acquire(lock);
+      }
+    , but why count on it?
+
+commit 40c301b76c81257fdf1275eb4cc618b1124391a7
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Wed Apr 28 14:56:51 2010 -0400
+
+    Fix compilation when openssl support is disabled
+    
+    Previously, we'd fail if OpenSSL was present but openssl support was
+    disabled.  Now we don't.
+
+commit 9ecf0d486dbfaba16451676ab3ecefa631d63e6a
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Wed Apr 28 12:03:08 2010 -0400
+
+    Catch attempts to enable debug_mode too late
+    
+    Debug mode needs to be enabled before any event is setup or any
+    event_base is created.  Otherwise, we will not have recorded when events
+    were first setup or added, and so it will look like a bug later when we
+    delete or free them.
+    
+    I have already confused myself because of this requirement, so let's
+    make Libevent catch it for the next poor forgetful developer like me.
+
+commit cb6707405cc07e34925e9c9f81a0c4d34ef9b135
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Wed Apr 28 11:51:56 2010 -0400
+
+    Make debug mode catch mixed ET and non-ET events on an fd
+    
+    Of the backends that support edge-triggered IO, most (all?) do not
+    support attempts to mix edge-triggered and level-triggered IO on the
+    same FD.  With debugging mode enabled, we now detect and refuse attempts
+    to add a level-triggered IO event to an fd that already has an
+    edge-triggered IO event, and vice versa.
+
+commit a5208fe4228b0e2c77d43dd2e3991f2fbac9148a
+Author: Joachim Bauch <jojo at struktur.de>
+Date:   Tue Apr 27 13:42:26 2010 -0400
+
+    Release locks on bufferevents while executing callbacks
+    
+    This fixes a dead lock for me where bufferevents in different event
+    loops use each other and access their input/output buffers (proxy-like
+    scenario).
+
+commit 0ef407065e5fb98f704b426d1d4fc878a85a391d
+Author: Christopher Davis <chrisd at mangrin.org>
+Date:   Sat Apr 24 00:06:38 2010 -0700
+
+    Report DNS error when lookup fails during bufferevent_socket_connect_hostname.
+
+commit 25c442e5825d7ca468b61926c729b2766c75442b
+Merge: 601a3ff f6ab2a2
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Sat Apr 24 00:15:15 2010 -0400
+
+    Merge branch 'rpc_leaks'
+
+commit 601a3ff98c0152a740aa6710bad1c4443960d35d
+Merge: 96730d3 a47a4b7
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Sat Apr 24 00:01:31 2010 -0400
+
+    Merge branch 'arc4seed'
+
+commit f6ab2a2811477547347b395789c0340c38603944
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Fri Apr 23 23:55:30 2010 -0400
+
+    Fix a memory leak when unmarshalling RPC object arrays
+    
+    The old code would use type_var_add() for its side-effect of expanding the
+    array, then leak the new object that was added to the array.
+    
+    The new code adds a static function to handle the array resizing.
+
+commit 94ee1251cb0984ca2683c682dda0bb4ab8148508
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Fri Apr 23 23:55:03 2010 -0400
+
+    fix a leak when unpausing evrpc requests
+
+commit 96730d319134f2754533ebf7e9a9bd4c0e0acdca
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Fri Apr 23 23:13:26 2010 -0400
+
+    Make http_base_test stop leaking an event_base.
+
+commit d49b92a8358c42d9fe7208571e9ef0cee9b045a8
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Fri Apr 23 23:04:20 2010 -0400
+
+    Remove one last bug in last_with_datap logic. Found with valgrind
+
+commit 9d8edf2ff5882aff3c85f2fa6b5eeaf05ef8c9b4
+Author: Niels Provos <provos at gmail.com>
+Date:   Fri Apr 23 18:59:22 2010 -0700
+
+    do not leak the request object on persistent connections
+
+commit a47a4b7e7e52ad8722771c36c4bc147f679c88d1
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Fri Apr 23 16:08:09 2010 -0400
+
+    Fix a couple of bugs in the BSD sysctl arc4seed logic
+    
+    Of course, FreeBSD has its own arc4random() implementation, so this should
+    never actually be needed.  Still, it's good to paint the underside of the
+    wagon.
+
+commit a5bf43abb0671ee2ceac7b38cbe36424f621934a
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Thu Mar 4 01:14:32 2010 -0500
+
+    Document evutil_secure_rng_init() and evutil_secure_rng_add_bytes()
+
+commit f9807167075aacc512ad7bca007064449eee93d9
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Fri Apr 23 15:17:10 2010 -0400
+
+    Make evutil_secure_rng_init() work even with builtin arc4random
+
+commit 71fc3eb08b9acd359ba61b31059bf4220808a03b
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Thu Mar 4 01:13:51 2010 -0500
+
+    Seed the RNG using sysctl() as well as /dev/urandom
+    
+    William Ahern points out that if the user has chrooted, they might not
+    have a working /dev/urandom.  Linux and many of the BSDs, however,
+    define a sysctl interface to their kernel random number generators.
+    
+    This patch takes a belt-and-suspenders approach and tries to do use the
+    sysctl _and_ the /dev/urandom approach if both are present.  When using
+    the sysctl approach, it tries to bulletproof itself by checking to make
+    sure that the buffers are actually set by the sysctl calls.
+
+commit b1c795007fd6db4655a66ee2dfb306803a43fc1e
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Fri Apr 23 14:42:25 2010 -0400
+
+    Make evdns logging threadsafe
+    
+    The old logging code was littered with places where we stored messages in
+    static char[] fields.  This is fine in a single-threaded program, but if you
+    ever tried to log evdns messages from two threads at once, you'd hit a race.
+    
+    This patch also refactors evdns's debug_ntop function into a more useful
+    evutil_sockaddr_port_format() function, with unit tests.
+
+commit ceefbe87303c8c96dc809ad8afc736f2dbaa194a
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Fri Apr 23 14:04:03 2010 -0400
+
+    Add a comment to explain why evdns_request is now separte from request
+
+commit 39b870b8a0a40a63851c37b8854399ba370ed2b1
+Author: Christopher Davis <chrisd at mangrin.org>
+Date:   Thu Apr 22 21:49:05 2010 -0700
+
+    Add dns/search_cancel unit test.
+
+commit 67072f3c3bf362654e2069bd468045a3d354190c
+Author: Christopher Davis <chrisd at mangrin.org>
+Date:   Thu Apr 22 21:46:05 2010 -0700
+
+    Assert for valid requests as necessary.
+    
+    A valid request has an associated handle, and the handle must point
+    to the request.
+
+commit a62584000af5b2563ee98596f174a3a36c1ae6c1
+Author: Christopher Davis <chrisd at mangrin.org>
+Date:   Wed Apr 21 22:20:10 2010 -0700
+
+    Free search state when finished searching to avoid an infinite loop.
+
+commit beaa14a46f5db71d890c3aa9326eb223ff176bdf
+Author: Christopher Davis <chrisd at mangrin.org>
+Date:   Wed Apr 21 22:01:59 2010 -0700
+
+    Move domain search state to evdns_request.
+    
+    It doesn't seem to make sense to copy the state to each new request
+    in the search.
+
+commit 15bb82d690ae0a5df0625b83addcd18d9246afab
+Author: Christopher Davis <chrisd at mangrin.org>
+Date:   Wed Apr 21 21:21:21 2010 -0700
+
+    Ensure that evdns_request is a persistent handle.
+    
+    When searching is enabled, evdns may make multiple requests before
+    calling the user callback with the result. This is a problem because
+    the same evdns_request handle is not retained for each search request,
+    so the user cannot reliably cancel the request.
+    
+    This patch attempts to ensure that evdns_request persists accross
+    search requests.
+
+commit b84b598eae8293dc02bf91cfb4f1cde9516f2fe0
+Author: Gilad Benjamini <gilad at altornetworks.com>
+Date:   Wed Apr 21 01:15:19 2010 -0400
+
+    Clean up properly when adding a signal handler fails.
+    
+    Previously, when a signation() or signal() call failed, we would free
+    the element we added to sh_old, but not actually clear the pointer.
+    This would leave a dangling pointer in sh_old that could cause a
+    crash later.
+
+commit 899c1dcc9807650ec90e0d5c847d2997fce9b751
+Author: Sebastian Sjöberg <Sebastian.Sjoberg at axis.com>
+Date:   Wed Apr 14 15:42:57 2010 -0400
+
+    Replace EVUTIL_CLOSESOCKET macro with a function
+    
+    The EVUTIL_CLOSESOCKET() macro required you to include unistd.h in your
+    source for POSIX.  We might as well turn it into a function: an extra
+    function call is going to be cheap in comparison with the system call.
+    
+    We retain the EVUTIL_CLOSESOCKET() macro as an alias for the new
+    evutil_closesocket() function.
+    
+    (commit message from email by Nick and Sebastian)
+
+commit 0861d1708ba6d035ff4c834e2aac0b5855f64afa
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Wed Apr 14 14:41:03 2010 -0400
+
+    Add ctags/etags files to .gitignore
+
+commit 755fbf16c3ce94bfa09e1bf5da27ccdfc1e7e725
+Author: Shuo Chen <giantchen at gmail.com>
+Date:   Wed Apr 14 14:27:29 2010 -0400
+
+    Add void* arguments to request_new and reply_new evrpc hooks
+    
+    This makes evprc setup more extensible, and helps with Shuo Chen's
+    work on implementing Google protocol buffers rpc on top of Libevent 2
+    evrpc.
+    
+    This patch breaks binary compatibility with previous versions of
+    Libevent, since it changes struct evrpc and the signature of
+    evrpc_register_generic().  Since all compliant code should be calling
+    evrpc_register_generic via EVRPC_REGISTER, it shouldn't break source
+    compatibility.
+    
+    (Code by Shuo Chen; commit message by Nick)
+
+commit 07edf784fab4e25c31eef3fdcccec3975e2741db
+Author: Shuo Chen <giantchen at gmail.com>
+Date:   Wed Apr 14 14:23:03 2010 -0400
+
+    Expose the request and reply members of rpc_req_generic()
+    
+    This code adds two accessor functions to evprc, and helps integrate
+    evrpc with Google protocol buffers.
+    
+    (Code by Shuo Chen; commit message by nickm)
+
+commit a0983b67f9d077d59739ed7111cafdd81dd95876
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Wed Apr 14 00:36:09 2010 -0400
+
+    Initialize last_with_datap correctly in evbuffer_overlapped
+    
+    Fixes bug 2985406
+
+commit 3cbca8661f2ad267ca890304a3dc5acefb8ba630
+Author: Giuseppe Scrivano <gscrivano at gnu.org>
+Date:   Mon Apr 12 12:52:31 2010 +0200
+
+    Create shared libraries under Windows
+
+commit 10c4c9045032c822463cd48caa46bd3254883057
+Author: Giuseppe Scrivano <gscrivano at gnu.org>
+Date:   Mon Apr 12 12:50:17 2010 +0200
+
+    Do not inhibit automake dependencies generation
+    
+    It fixes make parallel builds.
+
+commit d469c503c57df97f3744070ed96950b0990b6124
+Author: Giuseppe Scrivano <gscrivano at gnu.org>
+Date:   Mon Apr 12 12:18:57 2010 +0200
+
+    Fix compiler warnings under WIN32
+
+commit ab30e553c40b41e124474208a9315763c87c2e2e
+Merge: fd90274 eb86c8c
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Tue Apr 13 01:46:29 2010 -0400
+
+    Merge branch 'evbuffer_copyout'
+
+commit eb86c8c5ffc43a4e52881a20132eb03c3f9da283
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Mon Apr 12 22:24:54 2010 -0400
+
+    Add evbuffer_copyout to copy data from an evbuffer without draining
+    
+    The evbuffer_remove() function copies data from the front of an
+    evbuffer into an array of char, and removes the data from the buffer.
+    This function behaves the same, but does not remove the data.  This
+    behavior can be handy for lots of protocols, where you want the
+    evbuffer to accumulate data until a complete record has arrived.
+    
+    Lots of people have asked for a function more or less like this, and
+    though it isn't too hard to code one from evbuffer_peek(), it is
+    apparently annoying to do it in every app you write.  The
+    evbuffer_peek() function is significantly faster, but it requires that
+    the user be able to handle data in separate extents.
+    
+    This patch also reimplements evbufer_remove() as evbuffer_copyout()
+    followed by evbuffer_drain().  I am reasonably confident that this
+    won't be a performance hit: the memcpy() overhead should dominate the
+    cost of walking the list an extra time.
+
+commit fd902740568c93a2bcf3c27584af9f7d59ff88ce
+Merge: 819f949 8f9e60c
+Author: Christopher Davis <chrisd at mangrin.org>
+Date:   Sat Apr 10 11:26:53 2010 -0700
+
+    Merge branch 'safetimevalms'
+
+commit 8f9e60c825768c6dbc22fb6a2874b1f47cb34287
+Author: Christopher Davis <chrisd at mangrin.org>
+Date:   Fri Apr 9 19:16:09 2010 -0700
+
+    Always round up when there's a fractional number of msecs.
+
+commit 819f949f4ab61c4c5add40105d299e73c190e94f
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Fri Apr 9 19:16:49 2010 -0400
+
+    Limit the maximum number of events on each socket to 65535
+    
+    This lets us use less RAM for the evmap_io structure, which in turn
+    can let us have fewer cache misses for evmap operations.
+
+commit 99210dd9e0f6c2dfbd53c65854bd317cf13054be
+Merge: 1234b95 c247adc
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Fri Apr 9 19:14:25 2010 -0400
+
+    Merge branch 'comment'
+
+commit c247adc79c483638890f8150edf2c3213a32c20e
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Fri Apr 9 13:32:08 2010 -0400
+
+    Add a few more evmap/changelist comments
+
+commit 1234b95a7593750a248f63af969dcb32def40709
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Fri Apr 9 17:19:39 2010 -0400
+
+    Test another case of evbuffer_prepend
+
+commit 8c83e9957907be7f33529a9f0913690520436091
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Fri Apr 9 16:40:53 2010 -0400
+
+    Add more unit tests for evbuffer_expand
+
+commit 06a4443abed28d3e0e9e27bcb99cf3191c0d3674
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Fri Apr 9 15:28:26 2010 -0400
+
+    Unit-test every evbuffer_add_file() implementation.
+    
+    Previously, we'd only test the default one, even if the others were still
+    compiled in.
+
+commit 28bfed47e289b21e32390411a1a9ea8e057b0e10
+Author: Christopher Davis <chrisd at torproject.org>
+Date:   Fri Apr 2 19:08:32 2010 -0400
+
+    Clean up a mistake in pointer manipulation in evbuffer_remove
+
+commit 850c3ff232659125262bb5e30bef8451fac386bf
+Author: Christopher Davis <chrisd at mangrin.org>
+Date:   Wed Mar 31 20:30:55 2010 -0700
+
+    Add evutil_tv_to_msec for safe conversion of timevals to milliseconds.
+    
+    This is useful for backends that require their timeout values be in
+    milliseconds.
+
+commit d5ebcf370debb006964814e0529e73736dcad93b
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Tue Mar 30 16:47:37 2010 -0400
+
+    Rewrite evbuffer_expand and its users
+    
+    The previous evbuffer_expand was not only incorrect; it was
+    inefficient too.  On all questions of time vs memory tradeoffs, it
+    chose to burn time in order to avoid wasting memory.  The new code
+    tries to be a little more balanced: it only resizes an existing chain
+    when doing so doesn't require too much copying, and when failing to do
+    so would waste a lot of the chain's space.
+    
+    This patch also rewrites evbuffer_chain_insert to work properly with
+    last_with_datap, and adds a few convenience functions to buffer.c.
+
+commit 45068a312c0c2c6c4e9a144a837fd2f9d5310840
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Wed Mar 31 12:03:43 2010 -0400
+
+    Fix a memory leak when appending/prepending to a buffer with unused space.
+
+commit 8e227b04da54b7c4a029a2c9d335c582da4a5dcc
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Sat Mar 27 00:09:25 2010 -0400
+
+    Make the no_iovecs case of write_atmost compile
+    
+    Apparently nobody had tested it before on a system that had sendfile.
+    Why would you have sendfile and not writev?  Perhaps you're trying to
+    test the no-iovecs code to make sure it still works.
+
+commit 96865c47834f0397a46a38ad992f35167cf12796
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Tue Mar 30 12:48:56 2010 -0400
+
+    Turn the increasingly complex *_CHAIN() macros into functions
+
+commit b7442f8e8354b09f66d0110f2c5c970373a730cb
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Fri Mar 26 23:18:40 2010 -0400
+
+    Replace last_with_data with a slightly smarter version
+    
+    To implement evbuffer_expand() properly, you need to be able to
+    replace the last chunk that has data, which means that we need to keep
+    track of the the next pointer pointing to the last_with_data chunk,
+    not the last_with_data chunk itself.
+
+commit cda56abf194eb70f00c8e6ce95ec31f226048f9f
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Wed Mar 31 12:29:26 2010 -0400
+
+    Fix critical bug in evbuffer_write when writev is not available
+    
+    evbuffer_pullup() returns NULL if you try to pull up more bytes than
+    are there.  But evbuffer_write_atmost would sometimes ask for more
+    bytes to be pulled up than it had, get a NULL, and fail.
+
+commit c87272b7b91b4f443092eb2a81f03c83457ab03a
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Fri Mar 26 14:51:39 2010 -0400
+
+    Make evbuffer_prepend handle empty buffers better
+    
+    If the first chunk of a buffer is empty, and we're told to prepend to
+    the buffer, we should be willing to use the entire first chunk.
+    Instead, we were dependent on the value of chunk->misalign.
+
+commit 5c0ebb33f4a646919267fbca11c36eba24003561
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Fri Mar 26 14:50:45 2010 -0400
+
+    Do not use evbuffer_expand() to add the first chain to a buffer
+    
+    (It's a big function, and using it this way is overkill.)
+
+commit 2014ae4ac630d727f23ca91dad5d0ebf56b694de
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Fri Mar 26 14:30:14 2010 -0400
+
+    Increase MIN_BUFFER_SIZE to 512 (1024 on 64-bit)
+    
+    This constant decides the smallest (and typical) size of each evbuffer
+    chain.  Since this number includes sizeof(evbuffer_chain) overhead,
+    the old value (256) was just too low: on 64-bit platforms, it would
+    spend nearly 20% of the allocations on overhead.  The new values mean
+    that we'll be spending closer to 5% of evbuffer allocations on overhead.
+    
+    It would be nice to get this number even lower if we can.
+
+commit 6f20492fa27f08524af25914c02bc72d357b4197
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Fri Mar 26 14:20:10 2010 -0400
+
+    Fix a free(NULL) in minheap-internal.h
+
+commit a5276180b790fd3571a8e157c1fdd1a296421681
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Fri Mar 26 13:56:01 2010 -0400
+
+    Fix minheap code to use replacement malloc functions
+    
+    minheap-internal.h still had an extra realloc and an extra free that
+    needed to be replaced with mm_realloc and mm_free().
+
+commit 7204b916669f9b9ff0dae689088a5ab0344edebd
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Fri Mar 26 13:46:29 2010 -0400
+
+    Remove a needless min_heap_shift_up_() call
+    
+    Previously, every call to min_heap_shift_down_() would invoke
+    min_heap_shift_up_() at the end.  This used to be necessary in the
+    first version of the minheap code, since min_heap_erase() would call
+    min_heap_shift_down_() unconditionally.  But when patch 8b7a3b36763
+    from Marko Kreen fixed min_heap_erase() to be more sensible, we left
+    the weird behavior of min_heap_shift_down_() in place.
+    
+    Fortunately, "cui" noticed this and reported it on Niels's blog.
+
+commit e1e703d2f5d35118e80be6a0e780682284ce8bc3
+Author: Patrick Galbraith <patg at patg.net>
+Date:   Tue Mar 23 16:04:59 2010 -0400
+
+    Make evutil_signal_active() match declaration.
+
+commit 3eb044d0a9cdaa9bc6a8fc202f1725bd7eda5e0b
+Author: Trond Norbye <trond.norbye at gmail.com>
+Date:   Tue Mar 23 13:27:10 2010 -0400
+
+    Never test for select() on windows
+    
+    On 64-bit windows, configure actually _finds_ select when it tests for
+    it, and due to the ordering of the io implementations in event.c it is
+    chosen over the win32select implementation.
+    
+    This modification skips the test for select on win32 (we don't want
+    that anyway, because Windows has its own), causing my windows box to
+    get the win32select implementation.
+    
+    (edited by Nick)
+
+commit 7960af51133b76dc2bd48bcf69bc2213fd354206
+Merge: 8398641 9eb2fd7
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Mon Mar 22 13:37:39 2010 -0400
+
+    Merge branch 'build'
+
+commit 9eb2fd75becc336b6b9c38071ad4d4495bc83b9a
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Mon Mar 22 13:27:47 2010 -0400
+
+    Use dist_bin_SCRIPTS, not EXTRA_DIST, to distribute scripts
+
+commit 83986414b0de36923f32c2c3330db6cbf4b0455f
+Author: Jardel Weyrich <jweyrich at gmail.com>
+Date:   Fri Mar 12 06:04:56 2010 -0300
+
+    Fix infrequent memory leak in bufferevent_init_common().
+
+commit b557b175c00dc462c1fce25f6e7dd67121d2c001
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Sun Mar 21 13:28:48 2010 -0400
+
+    Detect and refuse reentrant event_base_loop() calls
+    
+    Calling event_base_loop on a base from inside a callback invoked by
+    that same base, or from two threads at once, has long been a way to
+    get exceedingly hard-to-diagnose errors.  This patch adds code to
+    detect such reentrant invocatinos, and exit quickly with a warning
+    that should explain what went wrong.
+
+commit fb366c1d880e49a19c40c9d62cbd7cbef297c6e7
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Sun Mar 21 13:16:31 2010 -0400
+
+    Functions to track the total bytes sent over a rate limit group.
+
+commit 33874b05286834b6ec690ee2ae22912691ec6d85
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Tue Mar 16 13:37:15 2010 -0400
+
+    Make 'main/many_events' test 70 fds, not 64.
+    
+    This is mainly intended to ensure that we don't get hung up on
+    the 64-handle limit that lots of O(n) Windows functions (but FWICT
+    not select) like to enforce.
+
+commit 657d1b6d3f0f27484d368bca39f99c2c5da107b6
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Sat Mar 13 01:06:57 2010 -0500
+
+    Set mem_offset for every bufferevent type
+
+commit 0cf1431e5d85411ac8174ffe3b802c6a37f6e3a8
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Sat Mar 13 01:04:30 2010 -0500
+
+    Avoid an (untriggerable so far) crash bug in bufferevent_free()
+    
+    We were saying
+         mm_free(bufev - bufev->be_ops->mem_offset);
+    when we should have said
+         mm_free(((char*)bufev) - bufev->be_ops->mem_offset);
+    
+    In other words, if mem_offset had ever been nonzero, then instead of
+    backing up mem_offset bytes to find the thing we were supposed to free, we
+    would have backed up mem_offset*sizeof(struct bufferevent) bytes, and freed
+    something completely crazy.
+    
+    Spotted thanks to a conversation with Jardel Weyrich
+
+commit 274a7bd9a11fd25339c4b978a25367f6d5ff0238
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Sat Mar 13 00:55:39 2010 -0500
+
+    Fix some memory leaks in the unit tests
+    
+    These don't matter except inasmuch as they give real memory leaks
+    a place to hide.
+    
+    Found with valgrind
+
+commit 859af6772c8ff929ec73b862bb3b64dc0e57bada
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Sat Mar 13 00:53:54 2010 -0500
+
+    Free evdns_base->req_heads on evdns_base_free
+    
+    It looks like when we moved from one big inflight-requests list to an
+    n-heads structure, we didn't make evdns_base_free() free the array of
+    heads.  This patch should fix that.
+    
+    Found with valgrind
+
+commit 68dc742bf1adc6fb7033788a41520625c516bf48
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Fri Mar 12 20:38:25 2010 -0500
+
+    Fix a write of uninitialized RAM in regression tests
+    
+    Not actually harmful, but not something we should be doing.
+    
+    Found by valgrind.
+
+commit b34abf3069bada10c15f09a0073052e32b686708
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Fri Mar 12 18:36:18 2010 -0500
+
+    Do not close(-1) when freeing an uninitialized socket bufferevent
+
+commit 70a44b61bb574d4e550ef7a4f933b95efc1a5316
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Fri Mar 12 18:35:15 2010 -0500
+
+    Avoid a spurious close(-1) on Linux
+    
+    On Linux, we use only one fd to do main-thread signaling (since we have
+    eventfd()), so we don't need to close th_notify_fd[1] as we would if we were
+    using a socketpair.
+
+commit 75018951ece71668b56ce688740a62f9d4db9277
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Sat Mar 13 00:23:06 2010 -0500
+
+    Fix a possible double-free bug in SSL bufferevents with CLOSE_ON_FREE
+    
+    With CLOSE_ON_FREE set, we were telling the BIO to free the bufferevent when
+    it was closed, and also freeing it ourselves.
+
+commit 0d047c3f11b4639236816c8f7a166e233d88d10c
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Sat Mar 13 00:29:15 2010 -0500
+
+    Fix an obnoxious typo in the bufferevent_timeout_filter test
+    
+    We were using the same bufferevent as the child of two filtering parents,
+    orphaning another.  This made one get freed twice, and the other not at all.
+    
+    Possible fix for bug 2963306 spotted by Doug Cuthbertson.
+
+commit f1bc125eb453af61cbb750652103532b77c271b0
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Fri Mar 12 23:00:49 2010 -0500
+
+    Improve robustness for refcounting
+    
+    Document that we do intend to double-decref underlying bufferevents under
+    some circumstances.  Check to make sure that we don't decref past 0.
+
+commit 77c917ded058a18480685a026622eef94ebb450e
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Fri Mar 12 14:37:54 2010 -0500
+
+    Give a better warning for bad automake versions.
+    
+    If you tried to build with automake-1.6 or earlier, we would
+    previously spit out pages and pages of garbage output.  Now, automake
+    should just say "Hey, I'm not new enough for this."
+
+commit 0794b0d29c7485d10f8e752339b2ed58ffbb5be3
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Fri Mar 12 14:21:52 2010 -0500
+
+    Remove an orphaned RELEASE flag in Makefile.am
+
+commit 2e898f542bb6dd5dcf13a0612ecd1e5855a014ef
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Fri Mar 12 14:16:30 2010 -0500
+
+    Switch to using AM conditionals in place of AC_LIBOBJ
+    
+    AC_LIBOBJ is really only meant for defining missing library functions,
+    not conditional code compilation.  Sticking our conditionally compiled
+    modules in SYS_SRC should make stuff easier to maintain.
+
+commit b660edf9db50bff0e437a262506a72f125763756
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Fri Mar 12 13:22:47 2010 -0500
+
+    Remove redundant stuff from EXTRA_DIST
+    
+    To a first approximation, sources that are mentioned anywhere in an
+    automake file don't need to get mentioned in EXTRA_DIST.
+
+commit 426c8fbe9345ee1d3ee0b05c8e35391ef380ad2c
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Fri Mar 12 13:09:28 2010 -0500
+
+    Support the standard 'make check' target in place of 'make verify'
+    
+    Based on patch 2816088 from Zack Weinberg
+
+commit 6c83e6c9725ad61f8d28955ee7a5d1f3162d74d0
+Merge: ee41aca 17da042
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Fri Mar 12 12:26:06 2010 -0500
+
+    Merge branch 'evbuffer_insert_point'
+
+commit ee41aca63e27f6c5a91a01978b409f5994d03817
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Fri Mar 12 00:46:39 2010 -0500
+
+    Functions to manipulate existing rate limiting groups.
+    
+    This patch adds a function to change the current rate limit of a rate
+    limiting group, and another to free an empty rate limiting group.
+
+commit cdd4c4905be7e56675c1fcccf9d04c1777ae0da1
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Thu Mar 11 00:38:46 2010 -0500
+
+    Try to comment some of the event code more
+
+commit 17da042db6b8f7fec9064747dc53fa2855e96ab7
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Thu Mar 11 15:39:44 2010 -0500
+
+    Add some glass-box tests for the last_with_data code.
+
+commit 1e7b986827f2654de500678ef56dcbaecd5a08d4
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Thu Mar 11 14:23:02 2010 -0500
+
+    Fix last_with_data compilation on windows
+
+commit 78772c3503215eb0d55a370f5fc192eca713d0ad
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Thu Mar 11 00:18:02 2010 -0500
+
+    Clarify Christopher Clark's status as writer of original ht code.
+
+commit e470ad3c354c586a3a995ce3a1fe7d093ebf999c
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Wed Mar 10 23:39:30 2010 -0500
+
+    Allow evbuffer_read() to split across more than 2 iovecs
+    
+    Previously it would only accept 2 iovecs at most, because our
+    previous_to_last nonsense didn't let it take any more.  This forced us
+    to do more reallocations in some cases when an extra small malloc
+    would have sufficed.
+
+commit 6f47bd12ed27085f68573a02dfa2e2761eb1e6b0
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Wed Mar 10 23:28:51 2010 -0500
+
+    Remove previous_to_last from evbuffer
+
+commit c8ac57f1f58358dfdb1030143ab043b6addd0c3c
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Wed Mar 10 23:24:14 2010 -0500
+
+    Use last_with_data in place of previous_to_last
+    
+    This actually makes some of the code a lot simpler.  The only
+    ones that actually used previous_to_last for anything were reserving
+    and committing space.
+
+commit 2a6d2a1e4be261e071f5ddb95be183e172643916
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Wed Mar 10 22:16:14 2010 -0500
+
+    Revise evbuffer to add last_with_data
+    
+    This is the first patch in a series to replace previous_to_last with
+    last_with_data.  Currently, we can only use two partially empty chains
+    at the end of an evbuffer, so if we have one with 511 bytes free, and
+    another with 512 bytes free, and we try to do a 1024 byte read, we
+    can't just stick another chain on the end: we need to reallocate the
+    last one.  That's stupid and inefficient.
+    
+    Instead, this patch adds a last_with_data pointer to eventually
+    replace previous_to_last.  Instead of pointing to the penultimated
+    chain (if any) as previous_to_last does, last_with_data points to the
+    last chain that has any data in it, if any.  If all chains are empty,
+    last_with_data points to the first chain.  If there are no chains,
+    last_with_data is NULL.
+    
+    The next step is to start using last_with_data everywhere that we
+    currently use previous_to_last.  When that's done, we can remove
+    previous_to_last and the code that maintains it.
+
+commit c7f1b820fcf3181bccae4dc72dd2d16fbe712887
+Merge: b2f2be6 8111fac
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Wed Mar 10 21:21:33 2010 -0500
+
+    Merge branch 'evport'
+
+commit b2f2be6edca55ed6f51bb3dc77c43cd4e47aa4af
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Wed Mar 10 16:25:16 2010 -0500
+
+    Make evdns use the regular logging system by default
+    
+    Once, for reasons that made sense at the time, we had evdns.c use its
+    own logging subsystem with two levels, "warn" and "debug".  This leads
+    to problems, since setting a log handler for Libevent wouldn't actually
+    trap these messages, since they weren't on by default, and since some of
+    the warns should really be msgs.
+    
+    This patch changes the default behavior of evdns.c to log to
+    event_(debugx,warnx,msgx) by default, and adds a new (internal-use-only)
+    log level of EVDNS_LOG_MSG.  Programs that set a evdns logging
+    function will see no change.  Programs that don't will now see evdns
+    warnings reported like other warnings.
+
+commit 13e4f3bd89225b3a339ac06ac051090e7e4bcab7
+Author: Brodie Thiesfield <brofield2 at jellycan.com>
+Date:   Mon Mar 8 13:46:48 2010 -0500
+
+    Avoid errors in http.c when building with VC 2003 .NET
+
+commit b677032ba239157c0c98a7b74050e730d96f99ab
+Author: Brodie Thiesfield <brofield2 at jellycan.com>
+Date:   Mon Mar 8 13:46:04 2010 -0500
+
+    Avoid errors in evutil.c when building with _UNICODE defined
+
+commit 2c2618d85861c1508f12787f2757459e02f9a002
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Fri Mar 5 13:00:15 2010 -0500
+
+    more whitespace normalization
+
+commit c7cf6f004951615cf775431d4f47663a20f2db6e
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Fri Mar 5 12:47:46 2010 -0500
+
+    Replace users of "int fd" with "evutil_socket_t fd" in portable code
+    
+    Remeber, win32 has a socket type that's actually a handle, so if
+    there's a chance that code is run on win32, we can't use "int" as the
+    socket type.
+    
+    This isn't a blind search-and-replace: sometimes an fd is really in
+    fact for a file, and not a socket at all.
+
+commit 38b7b571c81d1545bb4b6a1c5e4fd9e1bf0f542d
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Thu Mar 4 01:40:32 2010 -0500
+
+    Add Christopher Clark and Maxim Yegorushkin to the LICENSE file
+
+commit 17efc1cdfa5dbd275cbe7ab11e1382170df8a18b
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Thu Mar 4 01:25:51 2010 -0500
+
+    Update all our copyright notices to say "2010"
+
+commit cc1600afefc0c30586b12d916bb2a98ecf2d727b
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Tue Mar 2 17:00:06 2010 -0500
+
+    Improve the speed of evbuffer_readln()
+    
+    This makes some cases of bench_http about 5% faster.
+    
+    Our internal evbuffer_strpbrk() function was overly general (it tried
+    to handle all character sets when we only used it for "\r\n"), and
+    not very efficient (it called memchr once for each character in the
+    buffer until it found a \r or a \n).  It actually showed up in some
+    profiles for HTTP testing, since evbuffer_readln() calls it when doing
+    loose CRLF detection.  This patch replaces it with a faster
+    implementation.
+
+commit 2fac0f70a388d3a35a2d7883eeb673c6fbbe16e1
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Wed Mar 3 12:15:15 2010 -0500
+
+    Remove signal_assign() and signal_new() macros.
+    
+    These were introduced and deprecated in the same version (2.0.1-alpha),
+    presumably in two-stage process.  Everybody sane should be using
+    evsignal_assign() and evsignal_new() instead.
+
+commit 1273d2f519a386c30149143a85e5175e100cb980
+Author: Christopher Davis <chrisd at torproject.org>
+Date:   Tue Mar 2 15:16:28 2010 -0800
+
+    VC has no getopt(), so do without in bench_http.
+
+commit 4ac38a5c38f915298a65b10d34bf45c8e9654860
+Author: Christopher Davis <chrisd at torproject.org>
+Date:   Tue Mar 2 14:34:30 2010 -0800
+
+    Get bench_http to work on Windows; add a switch to enable IOCP.
+
+commit bf3bfd0c044a3110b49ca06621f1b2ca0621dd84
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Mon Mar 1 22:12:04 2010 -0500
+
+    Revert the broken part of 2cffd6c937
+    
+    It looks like I accidentally removed most of WIN32-Code/event-config.h
+    when I was bumping the version.  Fortunately, this happened when I
+    bumped to 2.0.4-alpha-dev rather than when I bumped to 2.0.4-alpha. :)
+    
+    This patch restores the deleted parts of WIN32-Code/event-config.h
+
+commit 22aff0492dc51c8c9ce967871652e62e0144833d
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Mon Mar 1 22:06:12 2010 -0500
+
+    Distribute libevent.pc.in, not libevent.pc
+
+commit 2cffd6c937af5097db6a19cdebed3412c5454775
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Sun Feb 28 16:53:42 2010 -0500
+
+    Bump version to 2.0.4-alpha-dev
+
+commit 9669ade5250a159b1c9addd5b329b32176f38440
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Sun Feb 28 12:55:29 2010 -0500
+
+    Bump the version to 2.0.4-alpha
+
+commit 3a5cfb0d381a1b9e7d69903c3005abf1e447658b
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Sun Feb 28 12:49:03 2010 -0500
+
+    Add a changelog for 2.0.4-alpha from Git, sorted by hand
+
+commit ad85908a4f6bd8fc1cbfb869fa0b4774f4249e0f
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Sun Feb 28 12:52:39 2010 -0500
+
+    Fix compilation with --disable-debug-mode
+
+commit 57b72488233f749cd402d6133b5e4b1fb83878d3
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Sat Feb 27 22:27:13 2010 -0500
+
+    Small cleanups on freebsd-connect-refused patch.
+    
+    There should be no need to call be_socket_enable: that does an
+    event_add().  What we really want to do is event_active(), to make
+    sure that the writecb is executed.
+    
+    Also, there was one "} if () {" that was missing an else.
+    
+    I've noted that the return value for evutil_socket_connect() is
+    getting screwy, but since that isn't an exported function, we can fix
+    it whenever.
+
+commit 7bc48bfd3ac61aa4ff118cacb44145c6ecda366e
+Author: Niels Provos <provos at freebsd.localdomain>
+Date:   Sat Feb 27 18:59:06 2010 -0800
+
+    deal with connect() failing immediately
+
+commit 98edb891f89911ab5bdfa2a26ba2c549c66a3b1f
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Thu Feb 25 17:14:41 2010 -0500
+
+    Fix arc4random compilation on MSVC.
+
+commit 1e14f826695eeeb856c614e4da57a88a7c8202b4
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Thu Feb 25 17:11:28 2010 -0500
+
+    Try to define a sane _EVENT_SIZEOF_SIZE_T for msvc compilation
+
+commit 23170a69f8f3394574652377e446604210d0c464
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Thu Feb 25 16:57:57 2010 -0500
+
+    Fix mingw compilation
+
+commit 7ffd3875747f5a824d2f17872372278704b2ae27
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Wed Feb 24 13:40:06 2010 -0500
+
+    Delete stack-alloced event in new unit test before returning.
+
+commit f3dfe46206d28eb99cd82beec0033ea7fd795f95
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Tue Feb 23 23:59:26 2010 -0500
+
+    Use new timeval diff comparison function in bufferevent test
+
+commit 8fcb7a1b0419b275bd1570044f0e2024723fe4dd
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Tue Feb 23 23:55:32 2010 -0500
+
+    Add test for periodic timers that get activated for other reasons
+    
+    This was already independently verified by the new bufferevent
+    timeout tests, but it's good to explicitly check that our code
+    does what it should.
+
+commit c02bfe12f8cb695e67ec895443c592d1f3e9bc36
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Tue Feb 23 16:36:52 2010 -0500
+
+    Add a test for timeouts on filtering bufferevents.
+
+commit d3288293fdc6aef510cc217b171187aac19c444b
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Sat Feb 20 18:44:35 2010 -0500
+
+    Provide consistent, tested semantics for bufferevent timeouts
+    
+    The different bufferevent implementations had different behavior for
+    their timeouts.  Some of them kept re-triggering the timeouts
+    indefinitely; some disabled the event immediately the first time a
+    timeout triggered.  Some of them made the timeouts only count when
+    the bufferevent was actively trying to read or write; some did not.
+    
+    The new behavior is modeled after old socket bufferevents, since
+    they were here first and their behavior is relatively sane.
+    Basically, each timeout disables the bufferevent's corresponding
+    read or write operation when it fires.  Timeouts are stopped
+    whenever we suspend writing or reading, and reset whenever we
+    unsuspend writing or reading.  Calling bufferevent_enable resets a
+    timeout, as does changing the timeout value.
+
+commit 38ec0a773b73375410cbb5a4eaeece3d0ab1caa0
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Tue Feb 23 14:24:10 2010 -0500
+
+    Fix a bug in resetting timeouts on persistent events when IO triggers.
+    
+    When we fixed persistent timeouts to make them reset themselves
+    based on the previous scheduled time rather than the current
+    time... we made them do so regardless of whether the event was
+    triggering because of a timeout or not!
+    
+    This was of course bogus.  When a _timeout_ triggers, we should
+    schedule the event for N seconds based on the last
+    _schedule_ time... but when IO triggers, we should reset the
+    timeout for N seconds after now.
+
+commit e2642f0a880dcee81114c1c25766f0380672ee30
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Tue Feb 23 15:14:57 2010 -0500
+
+    Fix some race conditions in persistent events and event_reinit
+    
+    I found these by adding an EVENT_BASE_ASSERT_LOCKED() call to most
+    of the functions in event.c that can only be called while holding
+    the lock.
+    
+    event_reinit() never grabbed the lock, but it needed to.
+    
+    event_persist_closure accessed the base to call event_add_internal()
+    and gettime() when its caller had already dropped the lock.
+    
+    event_pending() called gettime() without grabbing the lock.
+
+commit 4b37e6a5eab3d85e01920a679201d1e3a7ed2aa4
+Merge: 162ce8a b2fbeb3
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Tue Feb 23 00:39:02 2010 -0500
+
+    Merge remote branch 'github/split_free_from_decref'
+
+commit 162ce8a856224bdb3119db41d93fb94194886ddd
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Tue Feb 23 00:38:30 2010 -0500
+
+    Expose view of current rate limit as constrained by group limit
+
+commit b2fbeb3f074258e4559aa879ef0cbe0ef415ed0f
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Mon Feb 22 15:38:23 2010 -0500
+
+    Make bufferevent_free() clear all callbacks immediately.
+    
+    This should end the family of bugs where we call bufferevent_free()
+    while a pending callback is holding a reference on the bufferevent,
+    and the callback tries to invoke the user callbacks before it releases
+    its own final reference.
+    
+    This means that bufferevent_decref() is now a separate function from
+    bufferevent_free().
+
+commit db08f640d543bd4ef32ffe1f83c8aeca77bb0ce0
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Sat Feb 20 12:55:59 2010 -0500
+
+    Suspend read/write on bufferevents during hostname lookup
+    
+    When we're doing a lookup in preparation for doing a connect, we
+    might have an unconnected socket on hand, and mustn't actually do
+    any reading or writing with it.
+
+commit 4faeaea90e5d7a5d76acd8891ba88d4ed099edbd
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Fri Feb 19 03:39:50 2010 -0500
+
+    Clean up formatting: function/keyword spacing consistency.
+    
+    - Keywords always have a space before a paren.  Functions never do.
+    
+    - No more than 3 blank lines in a row.
+
+commit e5cf98795e3526fadd9e779d4368ed6fbafd6e91
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Thu Feb 18 17:46:56 2010 -0500
+
+    Clean up formatting: remove trailing spaces
+
+commit e5bbd40ad7f66f80170454683342076ec1e92d31
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Thu Feb 18 17:41:15 2010 -0500
+
+    Clean up formatting: use tabs, not 8-spaces, to indent.
+
+commit 8fdf09c09d2f92d7bc1a333b24a6490f65d5369c
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Thu Feb 18 17:08:50 2010 -0500
+
+    Clean up formatting: Disallow space-before-tab.
+
+commit 7515de91fe6c721d304d06cedc8af8d334916eaf
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Thu Feb 18 14:50:44 2010 -0500
+
+    When connect() succeeds immediately, don't invoke the callback immediately.
+    
+    We need this to get unit tests to pass on freebsd.
+
+commit b72be50d7a3ff0f69f440edafd5ad5fd86e0c2d9
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Thu Feb 18 13:52:04 2010 -0500
+
+    Add some headers to fix freebsd compilation
+
+commit 1ba6bed89a342d7485aadeacd8f9ff6dd1c2eeac
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Thu Feb 18 13:50:15 2010 -0500
+
+    Add the "compile" script to gitignore.
+
+commit 48a29b681619bfd431e987c7cbd623121ef91b13
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Thu Feb 18 01:43:37 2010 -0500
+
+    Add a unit test for secure rng.
+    
+    Mostly, this is just to make sure our arc4random_buf() implementation isn't
+    dumb.
+
+commit ff2a134d6e2ab74f2aa3eb5832128478202dd137
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Thu Feb 18 00:54:44 2010 -0500
+
+    Fix getpid() usage on Windows
+    
+    On Windows, getpid() is _getpid(), and requires that we first include
+    <process.h>.  arc4random.c previously didn't know that.
+    
+    Actually, I question whether arc4random needs to do its getpid() tricks
+    on Windows.  They exist only so that we remember to re-seed the ARC4
+    cipher whenever we fork... but Windows has no fork(), so I think we're
+    in the clear.
+
+commit cb52838fc501b1c18eec6bad367d29e87654d45b
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Thu Feb 18 00:27:35 2010 -0500
+
+    When working without a current event base, don't try to use IOCP listeners
+    
+    This fixes a bug turned up with the http unit tests, where we create
+    the evhttp object using an implicit (NULL) event_base.  This failed
+    pretty badly when we tried to use IOCP-based listeners.  We could
+    hunt for the current base from inside listener.c in the future, or
+    get the iocp base some other way, but for now this is probably the safest
+    solution.
+
+commit 32c6f1bacdb40f0d1b57aa6e8b2ce4eaf3979d08
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Mon Feb 15 19:54:15 2010 -0500
+
+    Construct Windows locks using InitializeCriticalSectionAndSpinCount
+    
+    Previously we were using InitializeCriticalSection, which creates a
+    lock that blocks immediately on contention and waits to be
+    rescheduled.  This is inefficient; it's better to wait for a little
+    while before telling the US to reschedule us, in case the lock becomes
+    available again really soon (since most locks mostly do).
+    
+    Good pthreads implementations do this automatically.  On Windows,
+    though, we need to call this magic function, and we need to pick the
+    spin count ourselves.
+
+commit ca46d25b01aaf28b319965ee03b8df7816101767
+Merge: 7116bf2 e15e1e9
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Wed Feb 17 23:02:28 2010 -0500
+
+    Merge branch 'arc4random'
+
+commit e15e1e9486b12b6790ecb4d5d6a23d049a713826
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Wed Feb 17 22:54:43 2010 -0500
+
+    Add the arc4random.c license to the LICENSE file.
+
+commit 7116bf231433d565da33cee3b7292e212e026c7d
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Mon Feb 15 21:03:52 2010 -0500
+
+    Fix two unlocked reads in evbuffer.
+    
+    Some initializers (in evbuffer_read and evbuffer_commit) were reading
+    the last and/or previous_to_last fields without grabbing the evbuffer
+    lock.
+    
+    This may fix a hard-to-trigger race condition or two.
+
+commit aae7db5256e26ef70ba420a1d8f03eb1037221f8
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Mon Feb 15 17:53:24 2010 -0500
+
+    Update event-config.h version number to match configure.in
+
+commit 60753da0e941f400ef02c5ea93abad616c9fd302
+Merge: 63e868e 2f782af
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Mon Feb 15 17:07:26 2010 -0500
+
+    Merge commit 'niels/http_close_connection'
+
+commit 63e868e69f404112505e64067a870890c98e3d94
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Mon Feb 15 16:45:19 2010 -0500
+
+    Increment the submicro version number.
+    
+    We've changed a couple of APIs introduced in 2.0.1-alpha, so it
+    behooves us to give high-needs apps (like Tor) a way to tell we've
+    done this.
+    
+    Sensible apps will just say "is it 2.0.3-alpha or 2.0.4-alpha" and
+    ignore the existence of 2.0.3-alpha-dev, which is just as it should
+    be.
+
+commit 2f782af35b0f17615a43fff0ddc34cde5da39268
+Author: Niels Provos <provos at gmail.com>
+Date:   Sat Feb 13 17:04:17 2010 -0800
+
+    validate close cb on server when client connection closes
+
+commit e8a9782c1d8a87efb66878c59f4da401da585f43
+Author: Niels Provos <provos at gmail.com>
+Date:   Sat Feb 13 16:59:37 2010 -0800
+
+    clean up terminate_chunked test
+
+commit 4ec8fea68e59f5e847f3f31af28f7c1f9c9cdccb
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Sat Feb 13 00:11:44 2010 -0500
+
+    Make RNG work when we have arc4random() but not arc4random_buf()
+
+commit 3fe60fdf478101cec0f06a3fc4e1f69aa570ef6e
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Fri Feb 12 23:40:13 2010 -0500
+
+    Use off_t for the length parameter of evbuffer_add_file
+
+commit d4de062efcf3facf451c826deee9240fac478bfd
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Wed Feb 10 17:19:18 2010 -0500
+
+    Add an arc4random implementation for use by evdns
+    
+    Previously, evdns was at the mercy of the user for providing a good
+    entropy source; without one, it would be vulnerable to various
+    active attacks.
+    
+    This patch adds a port of OpenBSD's arc4random() calls to Libevent
+    [port by Chris Davis], and wraps it up a little bit so we can use it
+    more safely.
+
+commit 1dd7e6dc3aeff29f9de44678d2aeea3bb82e4f24
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Fri Feb 5 01:16:23 2010 -0500
+
+    Remove the 'flags' argument from evdns_base_set_option()
+    
+    The 'flags' argument made sense when passed to
+    evdns_(base_)?parse_resolv_conf when it said which parts of the
+    resolv.conf file to obey.  But for evdns_set_option(), it was really
+    silly, since you wouldn't be calling evdns_set_option() unless you
+    actually wanted to set the option.  Its meaning was basically, "set
+    this to DNS_OPTIONS_ALL unless you want a funny surprise."
+    
+    evdns_base_set_option was new in 2.0.1-alpha, so we aren't committed
+    to keeping it source-compatible.
+
+commit 6810bdb10156f5fda1c8172114ea22c61da6e4c5
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Fri Feb 5 13:50:51 2010 -0500
+
+    Always use our own gai_strerror() replacement.
+    
+    This is necessary if we have any errors that the platform gai_strerror()
+    doesn't know how to handle.
+
+commit c18490e6429cf5b2c476d3aee26fa046d2b6f8a7
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Fri Feb 5 01:09:01 2010 -0500
+
+    Add a check to make soure our EVUTIL_AI flags do not conflict with the native ones
+
+commit cfe7a9ff4cb1eb3bc321fda904e5d5dfe8e7c1db
+Merge: a7a9431 3978180
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Thu Feb 4 10:15:39 2010 -0500
+
+    Merge remote branch 'niels/http_chunk'
+
+commit a7a943106cc45cc8d9bbfe813cbcf463a9647e87
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Wed Feb 3 23:49:22 2010 -0500
+
+    Fix some additional -DUNICODE issues on win32.
+    
+    Brodie's patch didn't catch the ones that were new since 1.4.
+
+commit 000a33ec83daec1c37c84a4370f509b97585dc37
+Author: Brodie Thiesfield <brofield2 at jellycan.com>
+Date:   Wed Feb 3 23:27:40 2010 -0500
+
+    Make Libevent 1.4.12 build on win32 with Unicode enabled.
+    
+    This patch fixes calls to the win32 api to explicitly call the char* versions
+    of the functions. This fixes build failures when libevent is built with the
+    UNICODE define.
+
+commit 397818011b6a0a5f17cb1243e2e46ee3d3612382
+Author: Niels Provos <provos at gmail.com>
+Date:   Wed Feb 3 16:54:18 2010 -0800
+
+    make evhttp_send() safe against terminated connections, too
+
+commit e2d15d81c38925b30891751505ad20679d35d4fd
+Merge: 60742d5 93d7369
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Wed Feb 3 17:52:55 2010 -0500
+
+    Merge remote branch 'niels/http_chunk'
+
+commit 93d736910616ad32e6d8c2f7f377b12f5848f5d5
+Author: Niels Provos <provos at gmail.com>
+Date:   Wed Feb 3 14:34:56 2010 -0800
+
+    do not fail while sending on http connections the client closed.
+    
+    when sending chunked requests via multiple calls to evhttp_send_reply_chunk,
+    the client may close the connection before the server is done sending. this
+    used to cause a crash.
+    
+    we introduce a new function evhttp_request_get_connection() that allows the
+    server to determine if the request is still associated with a connection.
+    If it's not, evhttp_request_free() needs to be called explicitly or the user
+    can call evhttp_send_reply_end() which just frees the request, too.
+
+commit 60742d581bef0e8c234c2ce7343a59556a1af2c9
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Wed Feb 3 17:01:45 2010 -0500
+
+    Add the rest of the integer limits, and add a test for them.
+
+commit 8f654678484b7c4ad95626593c0ccdc696d841e8
+Merge: 85047a6 ec34533
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Wed Feb 3 16:25:34 2010 -0500
+
+    Merge remote branch 'github/http_listener'
+    
+    Conflicts:
+    	http.c
+
+commit 85047a69836391bf095b98c36ec2b17876b2e325
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Wed Feb 3 15:12:04 2010 -0500
+
+    Functions to view and manipulate rate-limiting buckets.
+    
+    We need these for Tor, and other projects probably need them too.  Uses
+    include:
+        - Checking whether bandwidth is mostly-used, and only taking some
+          actions when there's plenty of bandwidth.
+        - Deducting some non-bufferevent activities from a rate-limit group.
+
+commit aba1fff33a9c1060a6a721f01f4d09c884a4ed5d
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Wed Feb 3 14:37:42 2010 -0500
+
+    Add EV_*_MAX macros to event2/util.h to expose limits for ev_* types.
+
+commit da6135e356b4ff8489b7810682a70d5a70ac7197
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Wed Feb 3 02:09:19 2010 -0500
+
+    Reduce windows header includes in our own headers.
+    
+    It turns out that absolutely everything that was including
+    windows.h was doing so needlessly; our headers don't need it,
+    so we should just include winsock2.h (since that's where
+    struct timeval is defined).
+    
+    Pre-2.0 code will use the old headers, which include windows.h
+    for them, so we aren't breaking source compatibility with 1.4.
+    
+    This solves the bug where we were leaving WIN32_LEAN_AND_MEAN
+    defined, in roughly the same way that buying an automobile
+    solves the question of what to give your coachman for boxing
+    day.
+
+commit 27c9a40f15701244bca209f05abc07792499dbb4
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Wed Feb 3 02:08:08 2010 -0500
+
+    Fix a dumb typo in ev_intptr_t definitions.
+    
+    We said "#define ev_uintptr_t" twice instead of ever saying
+    "#define ev_intptr_t".
+
+commit e244a2ea7478c67352f32f89c6af32484e2c69c4
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Wed Feb 3 01:26:07 2010 -0500
+
+    Add the msvc-generated .lib files to .gitignore.
+
+commit 6c21c895d9943f2be9662f71ea425cde8cf24658
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Wed Feb 3 01:22:44 2010 -0500
+
+    Remove EVUTIL_CHECK_FMT.
+    
+    This was never supposed to be an exposed API, so its name should have been
+    more like _EVUTIL_CHECK_FMT.  But it was only used in one place, so let's
+    just eliminate it.
+
+commit f6b269498af6538d3c2a0c3bf0dae4630584c66a
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Wed Feb 3 01:16:47 2010 -0500
+
+    Deprecate EVENT_FD and EVENT_SIGNAL.
+    
+    These are old aliases for event_get_fd and event_get_signal, and they
+    haven't been the preferred way of doing things since 2.0.1-alpha.
+    
+    For a while, we made them use struct event if it was included, but call
+    event_get_(fd|signal) if it wasn't.  This was entirely too cute.
+
+commit d38a7a19316002da9e9184402f9252e11766712b
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Tue Feb 2 15:44:10 2010 -0500
+
+    const-ify a few more functions in event.h
+
+commit f4190bfb8553387038ce773947caee047450e9f4
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Wed Jan 27 01:47:36 2010 -0500
+
+    Update time-test.c to use event2
+    
+    time-test.c wasn't crazy, but it used some old interfaces.
+    
+    There are probably more cleanups and explanations to do beyond the
+    ones here.
+
+commit d60a1bd50c8388f6f74522bf0eadb3fe37d6e95a
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Wed Jan 27 01:46:41 2010 -0500
+
+    Clarify status of example programs
+    
+    (That is, add comments to say that dns-example and le-proxy are recent and
+    ugly; event-test is old and ugly.)
+
+commit becb9f9cd320d9b3ac571ffc788a01423568e9d0
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Wed Jan 27 01:46:23 2010 -0500
+
+    Add a new "hello world" sample program
+
+commit 137f2c602f440327b10e68f5af4e575e23d82362
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Tue Jan 26 12:08:34 2010 -0500
+
+    Try to fix a warning in hash_debug_entry
+    
+    Apparently some 64-bit platforms don't like it when you say
+    
+       unsigned hash(void *p)
+       {
+          return (unsigned)p;
+       }
+    
+    even if you really honestly don't want the high bits of p.  Perhaps
+    they will tolerate it if I say the equivalent of
+    
+       unsigned hash(void *p)
+       {
+          return (unsigned) (uintptr_t) p;
+       }
+
+commit cef61a2f1b6562b0576c56d5fe6e1717962e8755
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Tue Jan 26 12:08:17 2010 -0500
+
+    Use ev_[u]intptr_t types in place of [u]intptr_t
+
+commit 1fa4c81c71517c0b530b71cc6dd4d1812cab5996
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Tue Jan 26 12:06:41 2010 -0500
+
+    Add ev_[u]intptr_t to include/event2/util.h
+    
+    We already emulate most of the other useful bits of stdint.h, and
+    we seem to have started to use uintptr_t in a few places throughout
+    the code.  Let's make sure we can continue to do so even on backwards
+    platforms that don't do C99.
+
+commit 439aea0d072b98daf13ebe3d6eff8ab8ee5bd875
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Mon Jan 25 14:07:01 2010 -0500
+
+    Try to untangle the logic in server_port_flush().
+    
+    The logic that prevented the first loop in this function from being
+    infinite was rather confusing and hard to follow.  It seems to confuse
+    some automatic analysis tools as well as me.  Let's try to replace it
+    with something more comprehensible.
+
+commit 361da8f2022fb6c9ca937297f1769eb75a5e56e8
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Mon Jan 25 13:54:14 2010 -0500
+
+    Note a missing ratelim function
+
+commit a66e947b8b7ea6da7e246a02a6abf759c63dbe38
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Mon Jan 25 13:44:56 2010 -0500
+
+    Use less memory for each entry in a hashtable
+    
+    Our hash-table implementation stored a copy of the hash code in each
+    element.  But as we were using it, all of our hash codes were
+    ridiculously easy to calculate: most of them were just a matter of a
+    load and a shift.
+    
+    This patch lets ht-internal be built in either of two ways: one caches
+    the hash-code for each element, and one recalculates it each time it's
+    needed.
+    
+    This patch also chooses a slightly better hash code for
+    event_debug_entry.
+
+commit a19b4a05e690601dde105d0a301c75118f013a46
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Mon Jan 25 13:38:07 2010 -0500
+
+    Call event_debug_unassign on internal events
+    
+    I don't expect that many users will be so religious about calling
+    unassign, but we need to be so that it's at least possible to use
+    debug mode without eating memory.
+
+commit cd17c3acd57b6b5bdedb31fc4152584fb6e089f7
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Fri Jan 22 00:34:37 2010 -0500
+
+    Add support for a "debug mode" to try to catch common errors.
+    
+    Right now it only catches cases where we aren't initializing events,
+    or where we are re-initializing events without deleting them first.
+    These are however shockingly common.
+
+commit 70a4a3ef141e8e5f21549669fc4f67ae75d150f1
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Sat Jan 23 16:47:54 2010 -0500
+
+    Remove a needless include of rpc_compat.h
+    
+    Nothing in evrpc.c was using rpc_compat.h, so it's best to take it
+    out, especially since it polluted our build process with GCC variadic
+    macros.
+    
+    While we're at it, this patch puts an extra restriction on when the
+    variadic macros in rpc_compat.h are defined.  Not only must GCC be the
+    compiler, but GCC must not be running in -ansi mode.
+
+commit 5c7a7bca4c7c3d0bbda4bb8e4ff9f1b335f55499
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Sat Jan 23 20:07:05 2010 -0500
+
+    Fix windows and msvc build
+
+commit c8c6a8978e57fcf17135782933b5174b950231bf
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Sat Jan 16 15:24:58 2010 -0500
+
+    Minimize epoll_ctl calls by using changelist
+    
+    The logic here is a little complex, since epoll_add must used called exactly
+    when no events were previously set, epoll_mod must be used when any events
+    were previously set, and epoll_del only called when the removing all events.
+
+commit 918e9c5e722f53e14396df7596d326ecdb89093e
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Sat Jan 23 16:38:36 2010 -0500
+
+    Fix a number of warnings from gcc -pedantic
+
+commit e2ca403faed26e0e709728ddc2efce1da8bd99d7
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Sat Jan 23 16:23:45 2010 -0500
+
+    Make it compile under gcc --std=c89.
+
+commit ff3f6cd42b8d58d6db9c2ceb2cf9868d1a8f7ec0
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Fri Jan 22 16:14:49 2010 -0500
+
+    Check more internal event_add() calls for failure
+    
+    Most of these should be unable to fail, since adding a timeout
+    generally always works.  Still, it's better not to try to be "too
+    smart for our own good here."
+    
+    There are some remaining event_add() calls that I didn't add checks
+    for; I've marked those with "XXXX" comments.
+
+commit 7296971b105ffc2bc9d20b0a24a3055c2ecf5e69
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Tue Dec 29 16:38:03 2009 -0500
+
+    Detect setenv/unsetenv; skip main/base_environ test if we can't fake them.
+    
+    Previously, we assumed that we would have setenv/unsetenv everywhere
+    but WIN32, where we could fake them with putenv.  This isn't so: some
+    other non-windows systems lack setenv/unsetenv, and some of them lack
+    putenv too.
+    
+    The first part of the solution, then, is to detect setenv/unsetenv/
+    putenv from configure.in, and to fake setenv/unsetenv with putenv
+    whenever we have the latter but not one of the former.
+    
+    But what should we do when we don't even have putenv?  We could do
+    elaborate tricks to manipulate the environ pointer, but since we're
+    only doing this for the unit tests, let's just skip the one test in
+    question that uses setenv/unsetenv.
+
+commit 97a8c79006d41b8196e37e0c64db45e70578e70e
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Fri Jan 22 00:34:21 2010 -0500
+
+    Fix compilation of rate-limit code when threading support is disabled
+
+commit 26e1b6f298f4bb66d6d684ed23a468bb8d3f4a37
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Thu Jan 21 01:51:40 2010 -0500
+
+    Remove some commented-out code in evutil
+
+commit 8d4aaf9086b721c0379891ca4a1fea8736f19d8f
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Wed Jan 20 12:56:54 2010 -0500
+
+    Don't use a bind address for nameservers on loopback
+    
+    If the user sets a bind address to use for nameservers, and a
+    nameserver happens to be on 127.0.0.1, the nameserver will generally
+    fail.  This patch alters this behavior so that the bind address is
+    only applied when the nameserver is on a non-loopback address.
+
+commit 068395038423cc42e05f7cd745f00e58b16a5f35
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Tue Jan 19 14:01:36 2010 -0500
+
+    Functions to access more fields of struct event.
+    
+    Once event_assign() or event_new() had been called, there was no way
+    to get at a copy of the event's callback, callback argument, or
+    configured events.  This patch adds an accessor function for each, and
+    an all-fields accessor for code that wants to re-assign one field of
+    an event.
+    
+    This patch also adds a function to return sizeof(struct event), so
+    that code with intense RAM needs can still retain ABI compatibility
+    between versions of Libevent without having to heap-allocate every
+    struct event individually.
+    
+    The code here was first proposed by Pavel Pisa.
+
+commit 706700674c303ce32e23ead78a4b8ce2bc6d2d55
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Tue Jan 19 13:55:53 2010 -0500
+
+    Add a LICENSE file so people can find our license easily
+    
+    For what it's worth, we are aware that "Copyright $YEAR $NAME" is
+    sufficient notice of copyright on software under US law and
+    Internationally, and saying Copyright (c) $YEAR $NAME is a bit nutty.
+    The character sequence (c) has never been ruled to have the same force
+    in US law as the actual copyright symbol, and that neither of these
+    US-specific symbols adds anything of value beyond saying "Copyright"
+    since the Berne convention took effect in the US back in 1989.
+    
+    Similarly, saying "all rights reserved" doesn't do anything magical
+    unless your software goes in a time-warp back to when the Buenos Aires
+    Convention was the general rule.  (And what will they run it on back
+    then?)  And what would even lead you to say "All Rights Reserved" when
+    you're explicitly granting most of those rights to anybody receiving
+    the work in accordance with the 3-clause BSD license?
+    
+    But still the FOSS community retains these ritual notations out of a
+    kind of cargo-cult lawyering.  Who knows?  Perhaps one day, if we
+    write our copyright notices ineptly enough, John Frum will come and
+    give us a DFSG-compatible license that everybody can get behind.
+    
+    (Also, I am not a lawyer.  The above should not be taken as legal
+    advice.  -- Nick)
+
+commit 4b9f307d8d584c91ea606af687528199ea072aad
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Fri Jan 15 10:26:25 2010 -0500
+
+    Add a forgotten header (changelist-internal.h)
+
+commit 854645797b1dcef69ce551ac52599c2708da2901
+Merge: 3225dfb 78a50fe
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Thu Jan 14 23:28:16 2010 -0500
+
+    Merge commit 'niels/http_dns'
+
+commit 78a50fe04cdbe3c69abdef7d1f15c6d09cd21f15
+Author: Niels Provos <provos at gmail.com>
+Date:   Thu Jan 14 17:39:54 2010 -0800
+
+    forgot to add void to test function
+
+commit 26714ca19f7754c6ddfda7ebdde4d76fc21d2c1f
+Author: Niels Provos <provos at gmail.com>
+Date:   Thu Jan 14 17:05:00 2010 -0800
+
+    add a test for evhttp_connection_base_new with a dns_base
+
+commit b8226390bcc865ad182449f9dc4ce9d332f83545
+Author: Niels Provos <provos at gmail.com>
+Date:   Thu Jan 14 16:53:25 2010 -0800
+
+    move dns utility functions into a separate file so that we can use them for http testing
+
+commit 5032e52680f751ce64b3bda4fa4439bebfd13bb0
+Author: Niels Provos <provos at gmail.com>
+Date:   Thu Jan 14 15:42:07 2010 -0800
+
+    do not use a function to assign the evdns base; instead assign it via evhttp_connection_base_new() which is a new function introduced in 2.0
+
+commit 3225dfb91d73a82939d6e4f848cc7bffb6a3ba5c
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Thu Jan 14 17:04:08 2010 -0500
+
+    Remove kqueue->pend_changes.
+    
+    Since we're no longer writing directly to it from add/del, we don't
+    need to worry about it changing as kq_dispatch releases the lock.  We
+    would make it a local variable, except that we wouldn't want to malloc
+    and free it all the time.
+
+commit 45e5ae3717aa238050a1eb0148beb83f2711c743
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Thu Jan 14 16:31:05 2010 -0500
+
+    Make kqueue use changelists.
+    
+    This fixes a bug in kqueue identified by Charles Kerr and various
+    Transmission users, where adding and deleting an event in succession
+    would make the event get reported, even if we didn't actually want to
+    see it.
+    
+    Of course, this also makes the array of changes passed to kevent
+    smaller, which could help performance.
+
+commit 27308aae4d921ecc286ab7a734693c2e27737a99
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Thu Jan 14 16:30:40 2010 -0500
+
+    Changelist code to defer event changes until just before dispatch
+    
+    This is necessary or useful for a few reasons:
+    
+        1) Sometimes applications will add and delete the same event more
+           than once between calls to dispatch.  Processing these changes
+           immediately is needless, and potentially expensive (especially
+           if we're on a system that makes one syscall per changed event).
+    
+           Yes, this actually happens in practice for nonpathological
+           code, such as in cases where the user's callback conditionally
+           re-adds a non-persistent event, or where draining a buffer
+           turns off writing and invokes a user callback which adds more
+           data which in turn re-enabled writing.
+    
+        2) Sometimes we can coalesce multiple changes on the same fd into
+           a single syscall if we know about them in advance.  For
+           example, epoll can do an add and a delete at the same time, but
+           only if we have found out about both of them before we tell
+           epoll.
+    
+        3) Sometimes adding an event that we immediately delete can cause
+           unintended consequences: in kqueue, this makes pending events
+           get reported spuriously.
+
+commit ec34533a9c5aafab741e29e1f8af73654f5e767a
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Wed Dec 30 00:41:03 2009 -0500
+
+    Make http use evconnlistener.
+    
+    Now that we have a generic listen-on-a-socket mechanism, there's no
+    longer any reason to have a separate listen-on-a-socket implementation
+    in http.c.
+    
+    This also lets us use IOCP and AcceptEx() when they're enabled.
+    
+    Possibly, we should have a new mechanism to add a socket given only a
+    listener.
+
+commit c698b77d197b809e606ee56881330af41c02fc04
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Wed Dec 30 00:11:27 2009 -0500
+
+    Allow http connections to use evdns for hostname looksups.
+    
+    This was as simple as using bufferevent_connect_hostname instead of
+    calling connect() ourself, which already knows how to use an
+    evdns_base if it gets one.
+    
+    Untangling the bind code might be a little trickier.
+
+commit a334b31c6f4fac24eb30048edb16b188a3ee2250
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Thu Jan 14 14:46:16 2010 -0500
+
+    More unit tests for getaddrinfo_async: v4timeout and cancel.
+    
+    One covers the case where the v4 request times out but the v6 request
+    doesn't.  The other makes sure that cancelling a request actually works.
+
+commit 94131e92b827ab2b46a4cb7ded52cdc143f807a8
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Tue Jan 12 15:58:36 2010 -0500
+
+    Fix test.sh on shells without echo -n
+    
+    Some systems have a version of /bin/sh whose builtin echo doesn't
+    support the -n option used in test/test.sh.  /bin/echo, however,
+    usually does.  This patch makes us use /bin/echo for echo -n whenever
+    it is present.
+    
+    Also, our use of echo -n really only made sense when suppressing all
+    test output.  Since test output isn't suppressed when logging to a
+    file, this pach makes us stop using echo -n when logging to a file.
+
+commit b9f43b231fe738789110f99d7045f2535986e997
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Mon Jan 11 20:47:36 2010 -0500
+
+    Add a comment on evthread_enable_lock_debuging.
+
+commit 6cc79c6b40501e32360386fcd7f9e013d0804bda
+Author: Pavel Plesov <mclap at users.sourceforge.net>
+Date:   Mon Jan 11 19:04:11 2010 -0500
+
+    Add unit-test for bad_request bug fixed in 1.4 recently.
+    
+    This is a partial forward-port from 4fd2dd9d83a000b6.  There's no need
+    to forward-port the bugfix, since the test passes with http.c as-is.
+    I believe we fixed this while we were porting evhttp to bufferevent.
+    --nickm
+
+commit 510ab6bce0783e49b6e52e8f00b456dd95e003e5
+Author: Jardel Weyrich <jweyrich at gmail.com>
+Date:   Wed Dec 30 19:24:39 2009 -0200
+
+    Comestic changes in evconnlistener_new(), new_accepting_socket(), accepted_socket_invoke_user_cb() and iocp_listener_enable().
+
+commit fec66f96850b77f77f720d3983ae98fc3594f282
+Author: Jardel Weyrich <jweyrich at gmail.com>
+Date:   Wed Dec 30 19:22:23 2009 -0200
+
+    Improved error handling in evconnlistener_new_async(). Also keeping the fd open because it is not opened by this function, so the caller is responsible for closing it. Additionally, since evconnlistener_new_bind() creates a socket and passes it to the function above, it required error checking to close the same socket.
+
+commit 4367a33a205c64df92e604aa3c4b01ac40aa821d
+Author: Jardel Weyrich <jweyrich at gmail.com>
+Date:   Wed Dec 30 19:09:14 2009 -0200
+
+    Fixed a fd leak in start_accepting(), plus cosmetic changes
+
+commit 2f33e00af3e617d4a1fbb22de37f7c382de6961b
+Author: Jardel Weyrich <jweyrich at gmail.com>
+Date:   Fri Jan 1 04:13:05 2010 -0200
+
+    Fixed a memory leak on windows threads implementation. The CRITICAL_SECTION was not being free'd in evthread_win32_lock_free().
+
+commit 66c02c7826ed7b65ddbd071c6ac0a86b1407ebc4
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Fri Jan 8 04:02:19 2010 -0500
+
+    Look at the proper /etc/hosts file on windows.
+    
+    This is harder than it might initially seem, since the proper filename
+    depends on what the admin has decided to call the windows system directory,
+    which for all we know might be Q:\tralfamidore\slartibartfast.  And of course,
+    this being windows, there are twelve ways to do it, where you can pick a
+    nice one or a portable one, but not a really nice portable one.
+
+commit 72dd666777d4e341fc5c066cd7dc1975d0dd0090
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Mon Dec 7 17:21:41 2009 -0500
+
+    evdns_getaddrinfo() now supports the /etc/hosts file.
+    
+    The regular blocking evutil_getaddrinfo() already supported /etc/hosts
+    by falling back to getaddrinfo() or gethostbyname().  But
+    evdns_getaddrinfo() had no such facility.  Now it does.
+    
+    The data structure here isn't very clever.  I guess people with huge
+    /etc/hosts files will either need to get out of the 1980s, or submit a
+    patch to this code so that it uses a hashtable instead of a linked
+    list.
+    
+    Includes basic unit tests.
+
+commit 0f7144fd8b05e95788ac2877caaf2b7c4688bf82
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Mon Dec 7 17:21:13 2009 -0500
+
+    Refactor code from evdns into a new internal "read a file" function.
+
+commit eaaf27f1f7b834bf60a1003c4d9c32a9a346b1dc
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Wed Jan 6 18:41:46 2010 -0500
+
+    Enable branch-prediction hints with EVUTIL_UNLIKELY.
+    
+    This had been accidentally disabled.  Since it seems to work with GCC, I'm
+    turning it back on when GCC is present.
+
+commit 29151e65b754eb254e6cc3596f006a2de85fd2fb
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Wed Jan 6 18:42:59 2010 -0500
+
+    Fix byte counts when mixing deferred and non-deferred evbuffer callbacks.
+    
+    This patch finishes 390e0561, which was somehow committed in a half-finished
+    state.  It solves a failing unit test on windows.
+
+commit ba2945f9314fa2f81afe09284d21724d2b5dc31d
+Merge: 0546ce1 165d30e
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Wed Jan 6 17:59:44 2010 -0500
+
+    Merge branch 'ratelimit'
+    
+    Conflicts:
+    	bufferevent_async.c
+
+commit 0546ce11e88c6c8b20c3ac85cb05fb0155e73a59
+Author: Jardel Weyrich <jweyrich at gmail.com>
+Date:   Wed Dec 30 05:03:54 2009 -0200
+
+    Eradicated the last free() call. Let mm_free() take care of deallocation.
+
+commit 165d30e31a167215c03a9104423f2767c9ff9c9a
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Wed Dec 30 14:29:56 2009 -0500
+
+    Fix compilation of rate-limiting code on win32.
+
+commit 885b42734c2360e95b9acb7a5b202262f24b7626
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Wed Dec 30 13:50:52 2009 -0500
+
+    Fix test-ratelim compilation on Linux.
+    
+    I'd forgotten to include time.h, and to link against libm.
+
+commit 78ed097267f2db83c9b05915c76b5287cb2c89f7
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Wed Dec 30 11:58:36 2009 -0500
+
+    Never believe that we have pthreads on win32, even if gcc thinks we do.
+    
+    Apparently some newer versions of mingw provide a fake pthreads api to
+    let applications work even if they don't know about windows threading.
+    That's nice, but we aren't one of those.
+
+commit 2e8eeea3e86b1f577e34ef2bc4f7099d848ae787
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Tue Dec 29 19:50:03 2009 -0500
+
+    Fix crash bugs when a bufferevent's eventcb is not set.
+    
+    In many places throughout the code, we called _bufferevent_run_eventcb
+    without checking whether the eventcb was actually set.  This would
+    work fine when the bufferevent's callbacks were deferred, but
+    otherwise the code would segfault.  Strangely, we always remembered to
+    check before calling the _bufferevent_run_{read,write}cb functions.
+    
+    To prevent similar errors in the future, all of
+    _buferevent_run_{read,write,event}cb now check to make sure the
+    callback is actually set before invoking or deferring the callback.
+    This patch also removes the now-redundant checks for {read,write}cb.
+
+commit 0b151a9fa1365ad9f6f2e58fcfcfb36840707403
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Tue Dec 29 18:11:52 2009 -0500
+
+    Whitespace fixes in test.sh
+
+commit 7dfbe94aa3873c7e5426deb4a1684a0423c85d41
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Tue Dec 29 18:07:51 2009 -0500
+
+    Allow test.sh to be run as ./test/test.sh
+
+commit c382de6421e1f2330105f74e2a465cf7cd1bfe23
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Tue Dec 29 17:59:55 2009 -0500
+
+    Allow the user to redirect the verbose output of test/test.sh to a file
+    
+    By default, the test.sh script still suppresses the output of all the
+    tests it invokes.  Now, however, you can have that output written to
+    a file specified in the TEST_OUTPUT_FILE shell variable.
+
+commit 1e56a32d081a68d03c8ad2a923f702f2a034e76b
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Tue Dec 29 16:04:16 2009 -0500
+
+    Make the initial nameserver probe timeout configurable.
+    
+    When we decide that a nameserver is down, we stop sending queries to
+    it, except to periodically probe it to see if it has come back up.
+    Our previous probe sechedule was an ad-hoc and hard-wired "10 seconds,
+    one minute, 5 minues, 15 minutes, 1 hour, 1 hour, 1 hour...".  There
+    was nothing wrong with having it be ad-hoc, but making it hard-wired
+    served no good purpose.
+    
+    Now the user can set the initial timeout via a new
+    "initial-probe-timeout:" option; future timeouts back off by a factor
+    of 3 on every failure to a maximum of 1 hour.
+    
+    As a side-benefit, this lets us cut the runtime of the dns/retry test
+    from about 40 seconds to about 3 seconds.  Faster unit tests are
+    always a good thing.
+
+commit ee4953f89e8b6505bdd7899795b2b7d2395ad4d5
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Tue Dec 29 16:03:30 2009 -0500
+
+    Fix the code that allowed DNS options to not end with :
+    
+    We tried to fix this in 0.2.0.3-alpha, but our fix was buggy.
+
+commit d0939d2b971417cd5714b535dabfdbd4213b26cb
+Author: Jardel Weyrich <jweyrich at gmail.com>
+Date:   Tue Dec 29 16:21:26 2009 -0200
+
+    Introduced evutil_make_socket_closeonexec() to preserve fd flags for F_SETFD.
+    
+    Use this to eliminate the various macros that called F_SETFD throughout
+    the code.
+
+commit 4df7dbcbdfc9bf169f70b3e74e0a3ec824065bf3
+Author: Jardel Weyrich <jweyrich at gmail.com>
+Date:   Tue Dec 29 16:19:24 2009 -0200
+
+    Adjusted fcntl() retval comparison on evutil_make_socket_nonblocking().
+    
+    Apparently, a successful return value on F_SETFL is "anything but
+    -1".
+
+commit 8111fac0650c6e4dbb296dfc8f63453e4532f30b
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Tue Dec 29 14:38:35 2009 -0500
+
+    Add missing thread imports so that evport.c will build
+    
+    When I made the changes to release the base lock around the call to
+    port_getn(), I didn't add evthread-internal.h to the includes in
+    evport.c would build, and I didn't catch it since I haven't got a
+    Solaris host to build on.  Tao Feng just reported this on
+    Libevent-users.
+
+commit 82743794d37b0ddece31c0d4f637d2f7d0896f2d
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Thu Dec 24 17:47:14 2009 -0500
+
+    Do not make bufferevent_setfd implicitly disable EV_READ and EV_WRITE.
+    
+    This obviates the need for BEV_SUSPEND_CONNECTING, and good riddance.
+
+commit f0c0124e603945f4693ae1457c7b9ef2b08689bf
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Wed Dec 23 07:54:13 2009 -0500
+
+    Testing code for bufferevent rate-limiting.
+    
+    This is not part of the regression tests, since running it necessarily
+    takes a while.  There is a new test-ratelim test; run it with '-h'
+    for an argument to see its options.
+
+commit 737c9cd87b453d7371ea0b9774aa2bc51124c4eb
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Fri Nov 27 13:16:54 2009 -0500
+
+    Rate-limiting for bufferevents; group and individual limits are supported.
+    
+    The fairness algorithms are not the best, not every bufferevent type
+    is supported, and some of the locking tricks here are simply absurd.
+    Still, this code should be a good first step.
+
+commit 47854a802a575b44291d27e4b57199942106cf62
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Mon Dec 28 01:40:37 2009 -0500
+
+    Expose our cached gettimeofday value with a new interface
+    
+    I've got a two use case that wants this for a fairly sensible purpose:
+    one external and on internal.
+
+commit 5a43df82b89f5f396d845ced49b9f3f65dee52ab
+Author: Jardel Weyrich <jweyrich at users.sourceforge.net>
+Date:   Mon Dec 28 16:03:47 2009 -0500
+
+    Improve readability of evutil_unparse_protoname()
+
+commit 0d64051f5b25ed9987c675e3270e7a452b18adf2
+Author: Jardel Weyrich <jweyrich at users.sourceforge.net>
+Date:   Mon Dec 28 16:01:59 2009 -0500
+
+    Fix a bogus free in evutil_new_addrinfo()
+
+commit 24fb502f7027e59b61934f6f0f586494bd22fdba
+Author: Jardel Weyrich <jweyrich at users.sourceforge.net>
+Date:   Mon Dec 28 16:01:12 2009 -0500
+
+    Fix an fd leak in evconnlistener_new_bind().
+
+commit 4c8b7cdc64d054e18be3bd6e3f85d277927c639c
+Author: Jardel Weyrich <jweyrich at users.sourceforge.net>
+Date:   Mon Dec 28 16:00:05 2009 -0500
+
+    Make evutil_make_socket_nonblocking() leave any other flags alone.
+    
+    Fixes bug 2922121
+
+commit fee2c77919196b59cc5a50bc532b048844972784
+Author: Dagobert Michelsen <dmichelsen at users.sourceforge.net>
+Date:   Mon Dec 28 15:53:01 2009 -0500
+
+    Fix compilation of devpoll.c by adding missing thread includes.
+    
+    (Bug 2922156)
+
+commit a47d88d7c2743d4924d395102d3b8e4585f61d6e
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Wed Dec 23 07:53:19 2009 -0500
+
+    Replace some cases of uint32_t with ev_uint32_t.
+    
+    Spotted by Roman Puls.
+
+commit 4a5b53432b1348740534e8a562a82f825d31e3ca
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Wed Dec 23 07:48:43 2009 -0500
+
+    Do not ignore bufferevent_enable(EV_READ) before bufferevent_connect().
+    
+    Previously, we weren't remembering that we wanted to re-add the read
+    event once the connect was finished.  Now we are.
+
+commit 390e056152ba4f92476aebae56ad3bba7bbfee0b
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Tue Dec 22 15:52:02 2009 -0500
+
+    Fix up behavior of never-defered callbacks a little
+
+commit 5846bf6cddbed402dbdf51e6268795cf41dbf9ba
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Tue Dec 22 15:51:39 2009 -0500
+
+    Simplify the read high-watermark checking.
+
+commit c69d5a5d3c5e8e3cf406e2919441f30c400cf9e1
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Tue Dec 22 12:03:46 2009 -0500
+
+    Remove the contents of WIN32-Prj as unmaintained.
+    
+    Makefile.nmake is now the preferred way	to build with MSVC; the
+    project files haven't worked properly in ages.
+
+commit 292467c02e9a9c679d5760c171c74aaa090e0308
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Tue Dec 22 00:58:52 2009 -0500
+
+    Use evutil_socket_t, not int, when logging socket errors.
+
+commit c51bb3c342a02536a74ed8c4e739dc76dd145c70
+Author: unknown <Nick Mathewson at .(none)>
+Date:   Mon Dec 21 16:36:40 2009 -0500
+
+    Fix a few locking issues on windows.
+
+commit 5a112d3c0748d8e65c0fd36c2717dd3fe7c0639b
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Fri Dec 18 23:37:50 2009 -0500
+
+    Set all instances of the version number correctly.
+    
+    Note that we've made two subtle mistakes: we are supposed to suffix
+    any non-released version with "-dev", and we're supposed to use the
+    last byte of the numeric version to indicate whether we have done this.
+    
+    For example, when 2.0.4-alpha is released, its numeric versin will be
+    0x 02 00 04 00.  As soon as we tag it, we will change the version in
+    the git repository to 2.0.4-alpha-dev, whose numeric version will be
+    0x 02 00 04 01 or something.
+
+commit 67995270ff75fb971f7043afa3c8072a8ea8fe3d
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Fri Dec 18 17:04:37 2009 -0500
+
+    Drop install-sh from our git repo: a mismatched version could break "make dist"
+
+commit a773df54cef1707984fe2c8b4b5866b35ae0c66d
+Author: Joachim Bauch <jojo at struktur.de>
+Date:   Fri Dec 18 16:24:41 2009 -0500
+
+    Fix a segfault when freeing SSL bufferevents in an unusual order
+    
+    Have container bufferevents hold a reference to their underlying bufferevents.
+    
+    (Commit message and minor revisions by nickm.)
+
+commit a6adeca72ccf1202c013001136d6e3ee3ddc0764
+Author: Joachim Bauch <jojo at struktur.de>
+Date:   Thu Dec 17 12:38:46 2009 -0500
+
+    Fix a segfault when writing a very fragmented evbuffer onto an SSL
+    
+    Fixes bug 2916328.
+
+commit f6430ac1e32e77870cd7a10c1e788c217afc621e
+Author: Evan Jones <evanj at mit.edu>
+Date:   Tue Dec 8 17:02:24 2009 -0500
+
+    Update sample/signal-test.c to use newer APIs and not leak.
+
+commit ea6b1df28806129316f4a6f1ed333b3dcb6052fb
+Author: Joachim Bauch <jojo at struktur.de>
+Date:   Tue Dec 8 15:38:34 2009 -0500
+
+    Only define _GNU_SOURCE if it is not already defined.
+
+commit 70cdfe49fae83a3662fa72ff803f2ff5b486af9b
+Author: Sebastian Hahn <sebastian at torproject.org>
+Date:   Sun Dec 6 02:59:19 2009 +0100
+
+    Fix compile on Snow Leopard with gcc warnings enabled
+
+commit 7ae94450fde617375a0a79387bed0090550debf7
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Fri Dec 4 16:37:43 2009 -0500
+
+    Fix a snow leopard compile warning in the unit tests.
+    
+    Reported by Sebastian Hahn.
+
+commit 0d744aa1738f6f16324a07f6185107d28c4f7fe4
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Mon Nov 23 18:34:32 2009 -0500
+
+    Refactor our 'suspend operation' logic on bufferevents.
+    
+    There are lots of things we do internally in bufferevents to indicate
+    "the user would like this operation to happen, but we aren't going to
+    try until some other condition goes away."  Our logic here has gotten
+    entirely too complicated.
+    
+    This patch tries to fix that by adding the idea of 'suspend flags' for
+    read and write.  To say "don't bother reading or writing until
+    condition X no longer holds," bufferevent_suspend_read/write(bev,
+    BEV_SUSPEND_X).  When X no longer holds, call
+    bufferevent_unsuspend_read/write(bev, BEV_SUSPEND_X).
+    
+    Right now, only the read-watermark logic uses this.
+
+commit 438f9ed26c63bd47c9e1a5cbe52731996f05c3ea
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Mon Nov 23 15:53:24 2009 -0500
+
+    Add the abilitity to mark some buffer callbacks as never-deferred.
+
+commit 689fc091a58dc90826ec90c1ca90a5d21b7184ad
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Sat Nov 28 11:31:39 2009 -0500
+
+    New EVTHREAD_TRY_LOCK function to try to grab a lock.
+
+commit 2b7abf038fc22c3f2b0ab05066733ca388b1a3d0
+Merge: b62d979 6c7c579
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Fri Dec 4 13:49:27 2009 -0500
+
+    Merge commit 'niels/dnscrash'
+
+commit 6c7c5799a4a3d590fac4c3b87c1c813d9e92f61c
+Author: Yasuoka Masahiko <yasuoka at iij.ad.jp>
+Date:   Fri Dec 4 10:44:46 2009 -0800
+
+    Fix a crash when reading badly formatted resolve.conf; from Yasuoka Masahiko
+
+commit b62d979b6804f8a7d89e863d1ae46424b4205aed
+Author: unknown <Nick Mathewson at .(none)>
+Date:   Wed Dec 2 01:24:37 2009 -0500
+
+    Update nmake makefile to build evthread.c
+
+commit 31687b4d8a8e870762d6aa4b115cc36cbeb47773
+Author: unknown <Nick Mathewson at .(none)>
+Date:   Wed Dec 2 01:22:07 2009 -0500
+
+    Fix regress_iocp.c usage of old lock allocation macros.
+
+commit bd6f1babf7c93c1a4b32ad9bbb0022d203398ac3
+Author: Roman Puls <puls at x-fabric.com>
+Date:   Wed Dec 2 01:15:15 2009 -0500
+
+    Fix up evthread compilation on windows
+
+commit 56771a3eedb8c5ef55d67a707be91b1906e5a45b
+Author: William Ahern <william at 25thandClement.com>
+Date:   Sun Nov 29 10:20:46 2009 -0500
+
+    Valgrind fix: Clear struct kevent before checking for OSX bug.
+    
+    William's original commit message:
+    
+       Valgrind complains on startup because kq_init passes to kevent only
+       a partially initialized structure. The code doesn't expect kevent
+       to look at .fflags, .udata, or .data, I suppose, because it merely
+       tickles the kernel looking for an error response. But perhaps
+       that's unwarranted chuminess (notwithstanding that it's checking
+       for an OS X bug), and needless noise nonetheless.
+
+commit 0cd3bb9f3a53cce9a64ce1536d6e171848e8da59
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Fri Nov 27 17:22:19 2009 -0500
+
+    Improved optional lock debugging.
+    
+    There were a couple of places in the code where we manually kept lock
+    counts to make sure we never accessed resources without holding a
+    lock, and that we never released a lock we didn't have.  The
+    lock-debugging code already puts counts on _every_ lock when lock
+    debugging is enabled, so there is no need to keep these counts around
+    otherwise.  This patch rewrites the ASSERT_FOO_LOCKED macros to all
+    use a common EVLOCK_ASSERT_LOCKED().
+    
+    We also teach the lock debugging code to keep track of who exactly
+    holds each lock, so that EVLOCK_ASSERT_LOCKED() means "locked by this
+    thread."
+
+commit 2df1f82bfa1b432a277b0e1f8fc65aed7898f5e5
+Author: Zhuang Yuyao <mlistz at gmail.com>
+Date:   Fri Nov 27 16:02:49 2009 -0500
+
+    Fix an evdns lock violation.
+    
+    Original message:
+    
+       evdns contains a bug related to thread lock.
+    
+       enable thread lock by evthread_use_pthreads() will cause successive
+       evdns_base_resolve_ipv4() (and other resolve functions i think) to
+       hang on EVDNS_LOCK(base) after one or several successful call to
+       evdns_base_resolve_ipv4().
+
+commit da1718b28992076e5cceb68e1715244a7dbd9669
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Fri Nov 27 16:00:59 2009 -0500
+
+    Fix a locking bug in event_base_loop()
+    
+    We previously were releasing the lock when we exited the main loop
+    in some ways, but not in others.
+
+commit d84d8385cda1bf795a927a019b26db8bb9d0a4c4
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Fri Nov 27 15:24:32 2009 -0500
+
+    Fix two use-after-free bugs in unit tests spoted by lock debugging
+
+commit 76cd2b70bb64962636cba0073571d0694b9c237a
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Fri Nov 27 16:44:47 2009 -0500
+
+    Stop passing EVTHREAD_READ and EVTHREAD_WRITE to non-rw locks.
+    
+    Previously, our default lock model kind of assumed that every lock was
+    potentially a read-write lock.  This was a poor choice, since
+    read-write locks are far more expensive than regular locks, and so the
+    lock API should only use them when we can actually take advantage of
+    them.  Neither our pthreads or win32 lock implementation provided rw
+    locks.
+    
+    Now that we have a way (not currently used!) to	indicate that we
+    really want a read-write lock, we shouldn't actually say "lock this
+    for reading" or "lock this for writing" unless we mean it.
+
+commit 347952ffe0039369ff4e7c94c4e27e7333ba8ecb
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Fri Nov 27 15:20:43 2009 -0500
+
+    Revise the locking API: deprecate the old locking callbacks and add trylock.
+    
+    Previously, there was no good way to request different kinds of lock
+    (say, read/write vs writeonly or recursive vs nonrecursive), or for a
+    lock function to signal failure (which would be important for a
+    trylock mode).
+    
+    This patch revises the lock API to be a bit more useful.  The older
+    lock calls are still supported for now.
+    
+    We also add a debugging mode to catch common errors in using the
+    locking APIs.
+
+commit e1ffbb82e34d786d07a5acdb16077f6526f610c3
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Sat Nov 21 01:11:49 2009 -0500
+
+    Fix memory-leak of signal handler array with kqueue.
+    
+    It turns out that kqueue_dealloc wasn't calling evsig_dealloc()
+    (because it doesn't use the main signal handler logic) so the sh_old
+    array was leaking.
+    
+    This patch also introduces a fix in evsig_dealloc() where we set
+    the sh_old array to NULL when we free it, so that main/fork can pass.
+
+commit 07e9e9b4b1d6c29fbca214f105567717e29ade2b
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Fri Nov 20 16:50:55 2009 -0500
+
+    Parenthesize macro arguments more aggressively
+
+commit f32b57505e7221db068979e22ade5518aa7b4559
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Fri Nov 20 16:38:01 2009 -0500
+
+    Add a warning about the use of event_initialized.
+
+commit 91fe23fc08b2b8e42140c54cbb4757ae1375b9a3
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Fri Nov 20 15:46:04 2009 -0500
+
+    Tolerate code that returns from a fatal_cb.
+    
+    Also, replace more abort() calls with EVUTIL_ASSERT() or event_errx.
+
+commit 94d00651f458fdff584037900ad976419583ee4a
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Fri Nov 20 12:56:29 2009 -0500
+
+    Add stub header for 2.0.4-alpha changelog.
+
+commit 0af10d5695ab987678b59e1dcdd22b5cb3695044
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Fri Nov 20 12:46:00 2009 -0500
+
+    Add more people who wrote patches to the acknowledgments
+    
+    The names came from grepping ChangeLog for 'patch/code from/by'.
+
+commit 0b4272681f35bb516594b88cf9437a24996d585b
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Fri Nov 20 12:37:47 2009 -0500
+
+    Improve the README with more information and links.
+    
+    (Also, try to test out the new commit script.)
+
+commit ba3407142b07f7d9ea7dd61ff9873d2a6f639f8d
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Fri Nov 20 12:17:14 2009 -0500
+
+    Add a .gitignore file.
+    
+    .gitignore plays the same role in Git as the svn:ignore property does in
+    subversion.
+
+commit 505040a2b5d41834d69d3412a03bd2e20f6d8598
+Author: Niels Provos <provos at gmail.com>
+Date:   Fri Nov 20 00:18:35 2009 +0000
+
+    call it 2.0.3-alpha
+    
+    svn:r1556
+
+commit f169153956d9aa578b96d50cd574c47ee8fd7511
+Author: Niels Provos <provos at gmail.com>
+Date:   Thu Nov 19 23:08:50 2009 +0000
+
+    Remove most calls to event_err() in http and deal with memory errors instead
+    
+    svn:r1555
+
+commit 986500de4db591134832923f5dd8d78477a62f2e
+Author: Niels Provos <provos at gmail.com>
+Date:   Thu Nov 19 22:02:33 2009 +0000
+
+    nick found a race condition in the pthreads test case
+    
+    svn:r1554
+
+commit b8f222e055bbba81790ebf13d294cc30a292c49b
+Author: Niels Provos <provos at gmail.com>
+Date:   Thu Nov 19 21:14:31 2009 +0000
+
+    On FreeBSD and other OSes, connect can return ECONREFUSED immediately; instead of failing the function call, pretend with faileld in the callback.
+    
+    svn:r1553
+
+commit bdfe72f3c5fe085806e53acc5d1bf8d39d16e252
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Thu Nov 19 00:21:48 2009 +0000
+
+    Documentation adjustments
+    
+    svn:r1552
+
+commit 7511b6a97c7eb055c3b886010423d85e0106f847
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Thu Nov 19 00:21:38 2009 +0000
+
+    Fix a spelling error and remove some dead code
+    
+    svn:r1551
+
+commit f070a4aed2129a722f10d23e6defc4f901143fea
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Wed Nov 18 23:18:55 2009 +0000
+
+    Do the proper hack for the (Open)BSD getaddrinfo quirk.
+    
+    From evutil.c:
+    
+       Some older BSDs (like OpenBSD up to 4.6) used to believe that
+       giving a numeric port without giving an ai_socktype was verboten.
+       We test for this so we can apply an appropriate workaround.  If it
+       turns out that the bug is present, then:
+    
+        - If nodename==NULL and servname is numeric, we build an answer
+          ourselves using evutil_getaddrinfo_common().
+    
+        - If nodename!=NULL and servname is numeric, then we set
+          servname=NULL when calling getaddrinfo, and post-process the
+          result to set the ports on it.
+    
+       We test for this bug at runtime, since otherwise we can't have the
+       same binary run on multiple BSD versions.
+    
+    svn:r1550
+
+commit 07ce7f9991551c571759deabebb7a72527b40840
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Wed Nov 18 21:17:00 2009 +0000
+
+    Make our failing-connection bufferevent test more tolerant.
+    
+    I thought we had a way to do connect() that would never fail
+    immediately, but always wait for a moment before failing.  It
+    turns out that on FreeBSD it can fail immediately.  This is not
+    FreeBSD's fault, or even a real bug anywhere but in the unit test.
+    
+    svn:r1549
+
+commit cf749e227c9a064894502d2a04901f0a18edd96a
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Wed Nov 18 21:16:53 2009 +0000
+
+    Add a temporary workaround for an ssl bug found on FreeBSD.
+    
+    Basically, we only want to report the 'connected' event because of
+    the socket connect() finishing when we have an actual socket
+    bufferevent; on an SSL bufferevent, 'connected' means 'SSL
+    connection finished.'
+    
+    This isn't FreeBSD's fault: it just has a connect() that tends to
+    succeed pretty early.
+    
+    svn:r1548
+
+commit 9bf124bff6d43fd9283c3ceb9629683ed790c136
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Wed Nov 18 21:16:47 2009 +0000
+
+    Build correctly with mm replacement turned off.
+    
+    svn:r1547
+
+commit 767eb70f5016cf65c3fad8e91ded8b4362bc79b0
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Wed Nov 18 21:16:33 2009 +0000
+
+    Fix compilation with threading disabled.
+    
+    svn:r1546
+
+commit d7d1f1da09f32a14ff4c08dc0f1f0e0673ed5afd
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Tue Nov 17 20:31:09 2009 +0000
+
+    Move responsibility for IOCP callback into bufferevent_async.
+    
+    This patch from Chris Davis saves some callback depth, and adds proper
+    ref-counting to bufferevents when there's a deferred evbuffer callback
+    inflight.  It could use a couple more comments to really nail down what
+    its invariants are.
+    
+    svn:r1543
+
+commit 201d8d0bafeb2ba1388746ed745cd5d8defb3689
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Tue Nov 17 18:29:44 2009 +0000
+
+    Clarify even more about various system-specific problems with getaddrinfo
+    
+    svn:r1542
+
+commit 9151d000e674560a2034313d696b39fbe2adc30b
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Tue Nov 17 03:36:43 2009 +0000
+
+    Use the common-case code from getaddrinfo_common *always*; OS differences are just too huge.
+    
+    svn:r1541
+
+commit 3451c870dad6dc3555cfb798149087adb9192b33
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Tue Nov 17 02:57:32 2009 +0000
+
+    Never pass our weird flags to the system getaddrinfo.  Make sure there is no overlap between flag values.
+    
+    svn:r1540
+
+commit 625a261a530cc273fba062ac59fd6b6ca9ddc8ad
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Tue Nov 17 02:40:14 2009 +0000
+
+    OpenBSD demands that sys/types.h be included before sys/socket.h
+    
+    svn:r1539
+
+commit 888007f9a4617db574b0455919b52867cc8ce64d
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Tue Nov 17 02:38:19 2009 +0000
+
+    Windows *does* have getservbyname, no matter what autoconf says.
+    
+    TODO: figure out why autoconf is confused about this.
+    
+    svn:r1538
+
+commit 86f5742015c6ac5e83ffcf5b747cb6ca1139d066
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Mon Nov 16 22:25:46 2009 +0000
+
+    Add two implementations of getaddrinfo: one blocking and one nonblocking.
+    
+    The entry points are evutil_getaddrinfo and evdns_getaddrinfo respectively.
+    There are fairly extensive unit tests.
+    
+    I believe this code conforms to RFC3493 pretty closely, but there are
+    probably more issues.  It should get tested on more platforms.
+    
+    This code means we can dump the well-intentioned but weirdly-implemented
+    bufferevent_evdns and evutil_resolve code.
+    
+    svn:r1537
+
+commit 72bafc175a75f8775eae9ab7b3c828395bb0eaa6
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Mon Nov 16 22:23:55 2009 +0000
+
+    Remove the stupid brokenness where DNS option names needed to end with a
+    colon.
+    
+    svn:r1536
+
+commit f9de8670fd1a88f0db898acd46de38a73d764c18
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Mon Nov 16 22:23:06 2009 +0000
+
+    Fix a declaration of __func__ in rpcgen.
+    
+    svn:r1535
+
+commit 18a8cfac390a67ac3279b0119aa55d3c2015a00b
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Sun Nov 15 19:00:12 2009 +0000
+
+    Prefer calloc(a,b) to malloc(a*b).  via openbsd.
+    
+    svn:r1531
+
+commit 629a61339823cd65351c7aeb294b3337db06dccb
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Sun Nov 15 18:59:59 2009 +0000
+
+    When running set[ug]id, don't check the environment.
+    
+    Idea from OpenBSD, but made a bit more generic to handle uncivilized lands
+    that do not define issetugid.
+    
+    svn:r1530
+
+commit e2b2de79bfb3e50bfcb943b145ac45e7f68c9616
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Sun Nov 15 18:59:48 2009 +0000
+
+    Use arc4random() for dns transaction ids where available.  Patch taken from OpenBSD
+    
+    svn:r1528
+
+commit c79a45e0097dd34c7f7024598a5b4c3b1b0fb422
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Sat Nov 14 21:54:30 2009 +0000
+
+    Fix a couple of event_debug calls.
+    
+    svn:r1527
+
+commit 74871cacb8318116e2cf24958e1456e9b429542b
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Mon Nov 9 19:37:27 2009 +0000
+
+    Change event_base.activequeues to "array of eventlist".
+    
+    Previously, event_base.activequeues was of type "array of pointers to
+    eventlist."  This was pointless: none of the eventlists were allowed
+    to be NULL.  Worse, it was inefficient:
+    
+      - It made looking up an active event queue take two pointer
+        deferences instead of one, thus risking extra cache misses.
+      - It used more RAM than it needed to, because of the extra pointer
+        and the malloc overhead.
+    
+    Also, this patch fixes a bug where we were saying
+    calloc(N,N*sizeof(X)) instead of calloc(N,sizeof(X)) when allocating
+    activequeues.  That part, I'll backport.
+    
+    Also, we warn and return -1 on failure to allocate activequeues,
+    rather than calling event_err.
+    
+    svn:r1525
+
+commit cdf58009fc7c81e9b353cf953c8eda94337644fb
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Mon Nov 9 19:37:21 2009 +0000
+
+    Change an OOM err to a warn in event_tagging.c
+    
+    svn:r1524
+
+commit 26573d3de3e35e956fc79eb8c8e3849ca714c109
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Mon Nov 9 19:37:15 2009 +0000
+
+    Change an err to a warn in bufferevent_openssl
+    
+    svn:r1523
+
+commit 37e23f806be8665f35b83ae61440faece86e7e61
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Mon Nov 9 18:50:20 2009 +0000
+
+    Patch from Ryan Phillips: accept ipv6 addresses returned by getaddrinfo in http.c
+    
+    svn:r1522
+
+commit b2fe4aedaae559761b5818a964b63deae02dbdf0
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Mon Nov 9 18:36:34 2009 +0000
+
+    Unit tests for got_break and got_exit.
+    
+    svn:r1521
+
+commit e88079a82c52c213b0e335c52a25a00cd9fd1605
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Mon Nov 9 18:30:57 2009 +0000
+
+    Make persistent timeouts more accurate.
+    
+    Previously, if the user scheduled a persistent timeout for {1,0}, we
+    would schedule the first one at "now+one second", and then when we
+    were about to run its callback, we would schedule it again for one
+    second after that.  This would introduce creeping delays to the event
+    that was supposed to run every second.
+    
+    Now, we schedule the event for one second after it was _last
+    scheduled_.  To do this, we introduce internal code to add an event at
+    an _absolute_ tv rather than at now+tv.
+    
+    svn:r1520
+
+commit 59be8942c9e9b30ebc67b83bdf27866d5efb4636
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Mon Nov 9 18:30:48 2009 +0000
+
+    Make sure that common timeouts are inserted in-order.
+    
+    This code should be a no-op, except under strange thread contention
+    situations.
+    
+    svn:r1519
+
+commit ab96b5f3f5247c7c7500a64536ceb345e0b8a65f
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Mon Nov 9 18:30:33 2009 +0000
+
+    Add an option to disable the timeval cache.
+    
+    svn:r1518
+
+commit 693c24ef9d01c55c81f50fc1d70950dcfa2a524e
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Mon Nov 9 17:16:30 2009 +0000
+
+    Implement queued timeouts for case where many timeouts are the same.
+    
+    Libevent's current timeout code is relatively optimized for the
+    randomly scattered timeout case, where events are added with their
+    timeouts in no particular order.  We add and remove timeouts with
+    O(lg n) behavior.
+    
+    Frequently, however, an application will want to have many timeouts
+    of the same value.  For example, we might have 1000 bufferevents,
+    each with a 2 second timeout on reading or writing.  If we knew this
+    were always the case, we could just put timeouts in a queue and get
+    O(1) add and remove behavior.  Of course, a queue would give O(n)
+    performance for a scattered timeout pattern, so we don't want to
+    just switch the implementation.
+    
+    This patch gives the user the ability to explicitly tag certain
+    timeout values as being "very common".  These timeout values have a
+    cookie encoded in the high bits of their tv_usec field to indicate
+    which queue they belong on.  The queues themselves are each
+    triggered by an entry in the minheap.
+    
+    See the regress_main.c code for an example use.
+    
+    svn:r1517
+
+commit 784b8773a452f36a68b71a42104e241074d208ee
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Fri Nov 6 21:46:57 2009 +0000
+
+    We do not work any more without an event-config.h; stop pretending that it is meaningful to check for HAVE_CONFIG_H
+    
+    svn:r1516
+
+commit 4d48cf61a2734aa37a7a5904f5c1454a62aa943a
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Fri Nov 6 21:13:25 2009 +0000
+
+    Fix kqueue.c build on GNU/kFreeBSD systems.
+    
+    Yes, some people like to have a BSD-family kernel (thus getting
+    kqueue) with a GNU-family libc (thus occasionally mandating
+    _GNU_SOURCE).
+    
+    Thanks to Debian for noticing this.
+    
+    svn:r1514
+
+commit 5ec43fe446d399464125d7cc0d5d1182756c953f
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Fri Nov 6 17:12:39 2009 +0000
+
+    Fix a miscalculated realloc() size in win32select.c.
+    
+    This bug was introduced by the code to make the backend able to safely release the base lock while calling select().
+    
+    Also, we change win32select.c to the same 32-fds-to-start default as the rest of the backends, so that the main/many_events test can test it.  It was at 64-to-start, so the test wasn't hitting it.
+    
+    svn:r1513
+
+commit ae5fbf492f2ba43f05063179a583f4711ddfec20
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Thu Nov 5 22:24:21 2009 +0000
+
+    Actually add the new dns-example.c code. :p
+    
+    svn:r1512
+
+commit d2e7e65d215a5de8a77ec5e4b7c0d79ddaba0107
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Thu Nov 5 22:19:09 2009 +0000
+
+    Move the evdns sample code into the sample directory and fix it not to use any deprecated APIs.
+    
+    svn:r1511
+
+commit ac633aebdfb094b19c8c322614e3fb4739dfb0d4
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Thu Nov 5 21:22:23 2009 +0000
+
+    Fix some build warnings on MSVC, mostly related to signed/unsigned comparisons.
+    
+    svn:r1510
+
+commit 43ba66936aa24bde5e2e77a62365e3711cc427c2
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Thu Nov 5 20:45:07 2009 +0000
+
+    Export nmakefiles in source distribution.
+    
+    svn:r1509
+
+commit 4ca9efeaef6a56ae4109053f20e21781bd2c5ea0
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Thu Nov 5 20:40:11 2009 +0000
+
+    Add nmake files to build with MSVC.
+    
+    Right now, they just make static libraries and unit tests.  They probably set lots of options wrong.
+    
+    svn:r1507
+
+commit 25a5e6819d9f49fd143308fad0d9189a8eef8a97
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Thu Nov 5 20:37:19 2009 +0000
+
+    Build fixes for MSVC
+    
+    svn:r1506
+
+commit d34019289ca58deb0c1c182f5fbd3cb6b93774ee
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Thu Nov 5 18:49:08 2009 +0000
+
+    Rename win32.c to win32select.c, and take it out of the WIN32-Code ghetto.
+    
+    svn:r1504
+
+commit d14c3b4570fd3e5e9db827d9b97e4eed69511c83
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Thu Nov 5 18:25:46 2009 +0000
+
+    Fix another ssize_t user
+    
+    svn:r1503
+
+commit a0b302631ff9ca2c440365a6ba70e78f0c3b11f2
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Thu Nov 5 18:07:27 2009 +0000
+
+    Remove win32-code/config.h.  It was apparently confusing.
+    
+    svn:r1502
+
+commit 34f28e08b3eda22033089c5ca72b5650fa38a21b
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Thu Nov 5 15:57:22 2009 +0000
+
+    Fix a few types to use compatible versions
+    
+    svn:r1501
+
+commit 47bad8abb70c49f1d2bc1ddbc13ec7ec96bc20f5
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Wed Nov 4 20:17:32 2009 +0000
+
+    Implement size limits on HTTP header length and body length.
+    
+    Patch from Constantine Verutin, simplified a little.
+    
+    svn:r1500
+
+commit 86db1c851be804b13aadebcc0b1a21a4493192dd
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Wed Nov 4 05:19:26 2009 +0000
+
+    Commit ConnectEx code to get connect working with async bufferevents.
+    
+    This is code by Chris Davis, with changes to get the unit tests failing less aggressively.
+    
+    The unit tests for this code do not completely pass yet; Chris is looking into that.  If they aren't passing by the next release, I'll turn off this code.
+    
+    svn:r1499
+
+commit 6ca32df11ac92a4c3ab417d656253353e28a7dc3
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Wed Nov 4 03:54:05 2009 +0000
+
+    Add a missing include for win32.
+    
+    svn:r1498
+
+commit f9c65580f0438dacb741cabe3ab96b89422aea33
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Tue Nov 3 20:42:32 2009 +0000
+
+    Oops; add missing bufferevent_evdns.c file
+    
+    svn:r1497
+
+commit 0b9eb1bffbd5af7d1dc6987f1a859e5f1e8c25e8
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Tue Nov 3 20:40:48 2009 +0000
+
+    Add a bufferevent function to resolve a name then connect to it.
+    
+    This function, bufferevent_socket_connect_hostname() can either use
+    evdns to do the resolve, or use a new function (evutil_resolve) that
+    uses getaddrinfo or gethostbyname, like http.c does now.
+    
+    This function is meant to eventually replace the hostname resolution mess in
+    http.c.
+    
+    svn:r1496
+
+commit fcc7668c008ce25d47834019c3d081819851c32d
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Tue Nov 3 20:05:06 2009 +0000
+
+    Fix one IOCP-callback signature I missed
+    
+    svn:r1495
+
+commit 0fd0255fa4b1e60cd49324f79472657c1f1ed24f
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Tue Nov 3 19:54:56 2009 +0000
+
+    Remove compat/sys/_time.h
+    
+    I've gone through everything that it declared to see where it was used,
+    and it seems that we probably don't need it anywhere.
+    
+    Here's what it declared, and why I think we're okay dropping it.
+    
+    o struct timeval {}
+      (Used all over, and we can't really get away with declaring it ourselves;
+      we need the same definition the system uses.  If we can't find struct
+      timeval, we're pretty much sunk.)
+    
+    o struct timespec {}
+      (Used in event.c, evdns.c, kqueue.c, evport.c.  Of these,
+       kqueue.c and event.c include sys/_time.h.  event.c conditions its use on
+       _EVENT_HAVE_CLOCK_GETTIME, and kqueue() only works if timespec is defined.)
+    
+    o TIMEVAL_TO_TIMESPEC
+      (Used in kqueue.c, but every place with kqueue has sys/time.h)
+    
+    o struct timezone {}
+      (event2/util.h has a forward declaration; only evutil.c references it and
+       doesn't look at its contents.)
+    
+    o timerclear, timerisset, timercmp, timeradd, timersub
+      (Everything now uses the evutil_timer* variants.)
+    
+    o ITIMER_REAL, ITIMER_VIRTUAL, ITIMER_PROF, struct itemerval
+      (These are only used in test/regress.c, which does not include _time.h)
+    
+    o CLOCK_REALTIME
+      (Only used in evdns.c, which does not include _time.h)
+    
+    o TIMESPEC_TO_TIMEVAL
+    o DST_*
+    o timespecclear, timespecisset, timespeccmp, timespecadd, timespecsub
+    o struct clockinfo {}
+    o CLOCK_VIRTUAL, CLOCK_PROF
+    o TIMER_RELTIME, TIMER_ABSTIME
+      (unused)
+    
+    svn:r1494
+
+commit 0aa6f5136a10d4d6426ab4abb10ed4cbbde208bd
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Mon Nov 2 20:59:13 2009 +0000
+
+    Fix remaining AcceptEx issues.
+    
+    svn:r1492
+
+commit e794d716a3ed525ca427d35cb1c80fc6bb9f8543
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Mon Nov 2 20:20:40 2009 +0000
+
+    Clean up acceptex code some more: add locking, single-threading, enable/disable.
+    
+    svn:r1491
+
+commit a84c87d76abcd023ddfb2c0985a65bafd522682b
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Mon Nov 2 19:51:26 2009 +0000
+
+    Refactor IOCP callback interface
+    
+    Chris Davis points out that GetQueuedCompletionStatus
+    sometimes returns false not to report "No events for
+    you!" but instead to report "An overlapped operation
+    failed."  Add a way to tell an event_overlapped that
+    its operation failed.
+    
+    svn:r1490
+
+commit 9a772148f2efcbaadbe8ccc50a2bd5d0004f971d
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Mon Nov 2 19:31:29 2009 +0000
+
+    Compilation and correctness fixes for IOCP listener code.
+    
+    svn:r1489
+
+commit 8283b2f0dcba87974db767e4838434896a92d402
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Mon Nov 2 19:30:25 2009 +0000
+
+    Fix a major parenthesis bug in EVUTIL_UPCAST.
+    
+    Fortunately, this didn't hurt anything previously, since we had no actual users of the macro where the offset of the base type wasn't 0.
+    
+    svn:r1488
+
+commit 5f1d6e640f965d468122598b92be609a483d1923
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Mon Nov 2 17:42:16 2009 +0000
+
+    Add more IOCP tests.  They might not pass yet.
+    
+    svn:r1487
+
+commit 5d2c1650f3c39e89c0c7d687a2fec3f6f66955e4
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Mon Nov 2 17:42:09 2009 +0000
+
+    More refactoring for IOCP listener code
+    
+    svn:r1486
+
+commit e90e14fb94f7bb54f822dd5d3bfbf476649451e5
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Mon Nov 2 16:31:13 2009 +0000
+
+    Call the bufferevent_flush_mode variable "mode" more consistently in the documentation. Spotted by Alex.
+    
+    svn:r1485
+
+commit 7f0ad2f63cd5c7e41a1916e4d8a3a5606880b429
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Mon Nov 2 16:17:06 2009 +0000
+
+    Fix an errant user of ssize_t to use ev_ssize_t.
+    
+    My usual strategy of grep '[^_]ssize_t' had apparently failed me,
+    since this ssize_t was in the first column.
+    
+    Resolves bug 2890434; spotted by Mihai Draghicioiu.
+    
+    svn:r1484
+
+commit 315fde1a70da1c1e4b9565f38f52680e23114a84
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Fri Oct 30 22:43:53 2009 +0000
+
+    Remove some duplicate code in kqueue.c and fix a small memory leak.
+    
+    svn:r1483
+
+commit 96c6956e0247f615d8afd25d79586dfa5b478ef0
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Fri Oct 30 22:43:30 2009 +0000
+
+    Add a "many events" regression test.
+    
+    This is a glass-box test to get more coverage on the event loop
+    backends.  We've run into bugs here before with fencepost errors, and
+    it turns out that none of our unit tests had enough events to
+    exercise the resize code.
+    
+    Most of the backends have some kind of logic that resizes an array
+    when:
+        - The highest fd is too high
+        - The number of events added since the last iteration of the loop
+          is too high
+        - The number of active events is too high.
+    
+    This test hits all 3 cases, and increases coverage in select.c by 7%,
+    in poll by 1%, and in kqueue by 9%.
+    
+    svn:r1482
+
+commit 516452b71a4450f7201bc1a6bd31878c68a81e57
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Fri Oct 30 21:08:29 2009 +0000
+
+    Keep openssl errors associated with the right bufferevent object.
+    
+    OpenSSL has a per-thread error stack, and really doesn't like you
+    leaving errors on the stack.  Rather than discard the errors or force
+    the user to handle them, this patch pulls them off the openssl stack
+    and puts them on a stack associated with the bufferevent_openssl.  If
+    the user leaves them on the stack then, it won't affect any other
+    connections.
+    
+    This bug was found by Roman Puls.  Thanks!
+    
+    svn:r1481
+
+commit 20f5bdfd6b9c0f51c56f55a9bd349c35576fafc8
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Thu Oct 29 19:25:33 2009 +0000
+
+    Refactor evconnlistener to allow multiple implementations; add an (incomplete, not-yet-integrated) IOCP implementation.
+    
+    svn:r1480
+
+commit fa313f28c57769a819c8d4194180571c6772acf8
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Thu Oct 29 18:30:43 2009 +0000
+
+    Extract XP-only functions when initializing the IOCP port
+    
+    svn:r1479
+
+commit 9976f1e74c1a285a591d8a80af61727af50b4961
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Thu Oct 29 17:11:12 2009 +0000
+
+    reformat weird indentation in dns tests
+    
+    svn:r1478
+
+commit 3c2198cb48724c1eac117db04dbebf32bb883077
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Thu Oct 29 17:10:36 2009 +0000
+
+    Unit test for reverse ipv6 lookup
+    
+    svn:r1477
+
+commit 5b3fb5bfa50a23d2a3d973a66b1a0d76195a3cca
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Thu Oct 29 16:35:20 2009 +0000
+
+    More documentation and unit tests for event_tagging.
+    
+    svn:r1476
+
+commit 1eadb3e3a299da5c384422792a672ff022870f4c
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Thu Oct 29 16:35:15 2009 +0000
+
+    Actually use the logic in select.c designed to make the out_sets threadsafe.
+    
+    svn:r1475
+
+commit c70c25937e6c6f2d20cdf3d19f95dd80790935e5
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Thu Oct 29 16:35:09 2009 +0000
+
+    Unit test for strlcpy
+    
+    svn:r1474
+
+commit e9098203f7df0a3c30db2c07cebfc3a9680f7c06
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Tue Oct 27 18:25:19 2009 +0000
+
+    Fix from Chris Davis: get error-logging to be happy on win32.
+    
+    svn:r1473
+
+commit 904b5721cb239fd6cc1dd52471f81b4c89f42cbb
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Tue Oct 27 06:47:25 2009 +0000
+
+    Avoid calling exit() during event_base_new*()
+    
+    Previously, each of the three make-an-event-base functions would exit
+    under different, weird circumstances, but return NULL on others.
+      - All three would exit on OOM sometimes.
+      - event_base_new() and event_init() would die	if all backends	were
+        disabled.
+      - None of them would die if the socketpair() call failed.
+    
+    Now, only event_init() exits on failure, and it exits on every kind of
+    failure.  event_base_new() and event_base_new_with_config() never do.
+    
+    svn:r1472
+
+commit a2a7d1d12316c7e317e5f4bd3f8a18aa91027c95
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Tue Oct 27 05:16:32 2009 +0000
+
+    Do not call the locking variant of event_add or event_active in some cases when we know we have the lock.
+    
+    svn:r1471
+
+commit d386dc89b52fbbe218f1ac192169fd07484c0d8d
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Tue Oct 27 05:16:23 2009 +0000
+
+    Refactor event_assing even more to avoid unnecessary calls
+    
+    svn:r1470
+
+commit e9ee1057e63b33d833b83b404232a0ccde34ae56
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Tue Oct 27 04:25:45 2009 +0000
+
+    Give event_assign a return value, and make it less inclined to exit().
+    
+    We also refactor event_assign so that it is the core function, and
+    event_set() is only the wrapper.
+    
+    svn:r1469
+
+commit 10cf631e841a9b4272ca62100257b51d6a519654
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Tue Oct 27 04:04:07 2009 +0000
+
+    Do not add a newline to the end of log statements.
+    
+    svn:r1468
+
+commit 369aafc4d785a7ac65aad138ded6c602bc9381fe
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Tue Oct 27 04:03:58 2009 +0000
+
+    Refactor kq_init error handling.
+    
+    svn:r1467
+
+commit ed0e91e02af2aa19ed0e7340c52f2f31686cc9b6
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Tue Oct 27 04:03:50 2009 +0000
+
+    New test flag to suppress logging for one test.
+    
+    svn:r1466
+
+commit 7f10fac34296eb856118fd882cc12a576ed39a04
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Mon Oct 26 20:07:06 2009 +0000
+
+    Note assert-related change in changelog
+    
+    svn:r1465
+
+commit 2e36dbe1a6b1056917c85350e2743a6babe96aa2
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Mon Oct 26 20:00:43 2009 +0000
+
+    Use EVUTIL_ASSERT() consistently instead of assert.
+    
+    svn:r1464
+
+commit 37c3456d70b343588acf09b38b6dde6e9745b2f8
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Mon Oct 26 20:00:08 2009 +0000
+
+    Add an EVUTIL_ASSERT() to replace our calls to assert().
+    
+    The big difference here is that EVUTIL_ASSERT() passes its message on
+    via event_errx() before aborting, so that the application has a prayer
+    of noticing and recording it.
+    
+    svn:r1463
+
+commit a8267663de2feb27051682cb51f9596f59613e5f
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Mon Oct 26 19:59:51 2009 +0000
+
+    API to replace all calls to exit() with a user-supplied fatal-error handler.
+    
+    Also, add unit tests for logging.
+    
+    svn:r1462
+
+commit 38aec9ec7cb7d4bd135b0a02ce9f186871d1f0b9
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Fri Oct 23 22:38:35 2009 +0000
+
+    Tweaks to IOCP interface.
+    
+    svn:r1461
+
+commit 7b10724901aa87d8f819e93796c020463a8ba9f1
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Fri Oct 23 22:07:05 2009 +0000
+
+    Fix my fix for the bufferevent_connect_fail() test.
+    
+    svn:r1460
+
+commit 879420a711453a67c0421968e9592b6cc9f0aae2
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Fri Oct 23 22:00:29 2009 +0000
+
+    Expose a narrow window to the IOCP code.
+    
+    svn:r1459
+
+commit c119e4a13ff171aafff9e0f27f11f8cae389880e
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Fri Oct 23 17:40:00 2009 +0000
+
+    Improve the behavior of le-proxy in a few cases.
+    
+    svn:r1458
+
+commit fdd11c00bb7a90d2f11a8933baa577ac199f74e3
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Wed Oct 21 19:21:05 2009 +0000
+
+    Make the bufferevent_connect_fail test faster on OSX.
+    
+    It seems that connecting to a listener that is bound but not accepting
+    or listening doesn't give a 'connection refused' error on OSX, but
+    rather makes the connect() time out after 75 seconds.  I couldn't find
+    any way to make the timout shorter.  Fortunately, closing the listener
+    after a second or so makes the desired error occur after another
+    second or so.
+    
+    svn:r1457
+
+commit b73ad7bc4504882f7b50ed72c2643653fdc43a61
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Wed Oct 21 18:48:22 2009 +0000
+
+    Treat the bitwise OR of	two enum values	as an int.
+    
+    This makes our interfaces usable from C++, which doesn't believe
+    you can say    "bufferevent_socket_nase(base, -1,
+    BEV_OPT_CLOSE_ON_FREE|BEV_OPT_DEFER_CALLBACKS)" but which instead
+    would demand "static_cast<bufferevent_options>(BEV_OPT_CLOSE_ON_FREE|
+    BEV_OPT_DEFER_CALLBACKS))" for the last	argument.
+    
+    Diagnosis and patch from Chris Davis.
+    
+    svn:r1456
+
+commit 4fbac2a5aef7bc3dee065241f20f3140c4f57b7e
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Wed Oct 21 07:00:19 2009 +0000
+
+    Test failing case of bufferevent_connect().
+    
+    Code by Chris Davis.
+    
+    svn:r1455
+
+commit d8164d0cfc5eda8101ad08008e3f3de2032b26a9
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Wed Oct 21 07:00:14 2009 +0000
+
+    Fix win32 connect() event handling.
+    
+    Christopher Davis reported:
+    
+        Connection failures aren't reported on Windows when
+        using bufferevent_socket_connect, because Windows uses
+        select's exceptfds to notify of failure, and libevent
+        treats them like read events. Only the write event
+        handler is currently used to handle connection events.
+    
+    We should think hard about this one, since it changes
+    behavior from 1.4.x.  Anything that worked on Mac/Unix before
+    will work more consistently on Windows now... but this might
+    break stuff that worked only on Windows, but nowhere else.
+    
+    Patch from Chris Davis.
+    
+    svn:r1454
+
+commit b89b58b5f4ea91792883c84e2f7b98befbc1a3a0
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Wed Oct 21 06:03:00 2009 +0000
+
+    OSX compilation issues
+    
+    svn:r1453
+
+commit c9c4ec26eeca16400b9bffab26a8dc655b7354d5
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Wed Oct 21 05:36:27 2009 +0000
+
+    Remove an EVBASE_RELEASE_LOCK that I missed.
+    
+    svn:r1452
+
+commit ed748a48ba8ebd573a3e5d047c9de15958d8417a
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Wed Oct 21 04:45:59 2009 +0000
+
+    Fix win32 compilation.
+    
+    svn:r1451
+
+commit 6b22e74aa187f2bbabb58652070af27fff6f547e
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Wed Oct 21 03:54:00 2009 +0000
+
+    Add locking to event_base_loop.
+    
+    This is harder than it sounds, since we need to make sure to
+    release the lock around the key call to the kernel (e.g.,
+    select, epoll_wait, kevent), AND we need to make sure that
+    none of the fields that are used in that call are touched by
+    anything that might be running concurrently in another
+    thread.  I managed to do this pretty well for everything but
+    poll().  With poll, I needed to introduce a copy of the
+    event_set structure.
+    
+    This patch also fixes a bug in win32.c where we called
+    realloc() instead of mm_realloc().
+    
+    svn:r1450
+
+commit 50825466821c87f55a7549df47086f7412a5a726
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Wed Oct 21 02:14:16 2009 +0000
+
+    Fix windows compilation warnings.
+    
+    svn:r1449
+
+commit e1c9b84ae6ae5de9fa03a8028a7336f65c5a1d61
+Author: Niels Provos <provos at gmail.com>
+Date:   Mon Oct 19 16:20:12 2009 +0000
+
+    Fix compilation for listener.h for C++ - missing extern "C".  Patch from Ferenc Szalai.
+    
+    svn:r1448
+
+commit b812563a6e8f735403e1f1fbcee1d56bd5ff5b4f
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Fri Oct 16 13:20:16 2009 +0000
+
+    Add a note that we should change previous_to_last to last_with_space
+    
+    svn:r1447
+
+commit f3dee9e8be0240a344e75fb275bbc3fb7541274a
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Fri Oct 16 13:20:09 2009 +0000
+
+    Correct the signatures for the evmap_io_* functions to use evutil_socket_t.
+    
+    svn:r1446
+
+commit e3fd294a6d2f498aa72e92fe4b005a28a1b312f1
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Fri Oct 16 13:19:57 2009 +0000
+
+    Spelling fixes in comments and strings.
+    
+    svn:r1445
+
+commit 25af6954411e369c41d452af5e6d95b9d5c73558
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Wed Oct 14 00:46:47 2009 +0000
+
+    When a bufferevent_connect() call fails, give the client an error callback.
+    
+    Patch from Christopher Davis.
+    
+    svn:r1444
+
+commit fc83ca3c7086fe1e1988722b95295c96d89a4152
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Wed Oct 14 00:46:40 2009 +0000
+
+    Fix some crash bugs when initializing evdns
+    
+    svn:r1443
+
+commit e6b747c34a69fbd93e40cbf58530054522f7e5f9
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Mon Oct 12 21:06:30 2009 +0000
+
+    Declare struct timezone in util.h so that borken mingw versions do not complain
+    
+    svn:r1441
+
+commit 633f3fb7aa15b29063de0b26823d1660d2ce6dd2
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Fri Oct 2 03:07:29 2009 +0000
+
+    Add changelog for last commit
+    
+    svn:r1440
+
+commit ba8a17714ead9f36424c4ecc21c009735d1408e5
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Fri Oct 2 03:03:58 2009 +0000
+
+    Do not notify the main thread more than needed.
+    
+    Basically, we suppress the notification when an event is added or deleted
+    and:
+      - The event has no fd, or there is no change in whether we are
+        reading/writing on the event's fd.
+      - The event has no timeout, or adding the event did not make the earliest
+        timeout become earlier.
+    
+    This should be a big efficiency win in applications with multiple threads and
+    lots of timeouts.
+    
+    svn:r1439
+
+commit d5b640fc16e9d9e1e709ec73eb938de9eeff3f2c
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Thu Oct 1 15:29:08 2009 +0000
+
+    Apply Ka-Hing Cheung's event_base_got_[break|exit] patch, with locking and whitespace fixes.
+    
+    svn:r1438
+
+commit 8e8d94a3e08d4cfa9cb817ae36fd4181edea84d2
+Author: Niels Provos <provos at gmail.com>
+Date:   Thu Sep 24 22:18:19 2009 +0000
+
+    Do not drop data from evbuffer when out of memory; reported by Jacek Masiulaniec
+    
+    svn:r1436
+
+commit 18fe400805699b6d60bfc26896294a34c6990756
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Wed Sep 23 23:51:26 2009 +0000
+
+    Forward-port: fix android compilation
+    
+    svn:r1435
+
+commit 2622e5ace2863e8e869254d9dba86549bbd9159b
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Wed Sep 16 17:17:57 2009 +0000
+
+    Fix the assert I added to epoll.c: spotted by Dmitry Novikov
+    
+    svn:r1432
+
+commit c2ead9f173b7d3b40132920fbc62d2319e4b9176
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Fri Sep 11 21:02:19 2009 +0000
+
+    Treat events with fd == -1 as addable.
+    
+    This turns out to simplify a fair bit of logic, including the bufferevent
+    code, and should fix bug 2850656.
+    
+    svn:r1431
+
+commit 85255a63974bf41d153e06b34fa346bd2d2f08b2
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Fri Sep 11 18:47:35 2009 +0000
+
+    Make epoll use less RAM.
+    
+    We do this by not allocating the maximum epoll_event array for the epoll
+    backend at startup.  Instead, we start out accepting 32 events at a time, and
+    double the array's size when it seems that the OS is generating events faster
+    than we're requesting them.  This saves up to 374K per epoll-based
+    event_base.  Resolves bug 2839240.
+    
+    svn:r1428
+
+commit e3f89fa2753da08e4a7b55d5e9d288eea92cba40
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Fri Sep 11 18:21:57 2009 +0000
+
+    Add a trivial race-fix from Chromium: do not try to re-detect whether we have a monotonic clock every time we make a new event_base.
+    
+    svn:r1427
+
+commit 3b461a6d03927220eae00e232d26053c71afd60f
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Fri Sep 11 18:21:37 2009 +0000
+
+    Treat a negative number of bytes to read as the kernel saying "I don't know."
+    
+    svn:r1426
+
+commit f65b8b0964bfd2653b5c6c9fbf1196310b77e084
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Wed Aug 19 20:55:25 2009 +0000
+
+    On connect, call only one of BEV_EVENT_CONNECTED or writecb.
+    
+    Previously, if we had a socket bufferevent in connect state, we'd send
+    both of these to indicate that the connection was done.  That was broken
+    since the point of adding BEV_EVENT_CONNECTED was so that we could
+    distinguish "we're connected" and "we wrote something".
+    
+    Now, writecb is called only when
+       A) the connection finished but the user never put the socket into a
+          "connecting" state, or
+       B) data was actually written.
+    
+    svn:r1425
+
+commit 2c1b0e442826baec932e614e8c730fd13ab3cd07
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Sun Aug 16 19:22:15 2009 +0000
+
+    Fix build warnings and add changelog entry for evhttp patches.
+    
+    svn:r1424
+
+commit c8b0fe4ad76bab55fd089ee1a01720e4af31c7f5
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Sun Aug 16 19:22:10 2009 +0000
+
+    Define evhttp_del_accept_socket
+    
+    [Patch from David Reiss]
+    
+    svn:r1423
+
+commit 6c53334c65769acd79b423cb89bbd456c7c83977
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Sun Aug 16 19:22:04 2009 +0000
+
+    Define evhttp_{bind,accept}_socket_with_handle
+    
+    [Patch from David Reiss]
+    
+    svn:r1422
+
+commit 4bcd5646d8f754a38eec606e2dda37a9696160bb
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Sun Aug 16 19:21:57 2009 +0000
+
+    Make evhttp_bound_socket visible, and provide an accessor to its fd
+    
+    Declare the previously private struct evhttp_bound_socket in
+    event2/http.h as an opaque struct.
+    
+    Implement evhttp_bound_socket_get_fd, which returns the file descriptor
+    of an evhttp_bound_socket.
+    
+    [Patch from David Reiss]
+    
+    svn:r1421
+
+commit 0755833e8410bed8835f75344cc80a7fd6a703d4
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Sun Aug 16 19:21:50 2009 +0000
+
+    Minor documentation fixes
+    
+    [Patch from David Reiss]
+    
+    svn:r1420
+
+commit 22bd5b4287fdad8a627b286516392078aebcdcf6
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Sun Aug 16 16:40:42 2009 +0000
+
+    Support sendfile on solaris: patch from Caitlin Mercer.
+    
+    svn:r1419
+
+commit f22823982fe9e21bf49529c366b021183e52b826
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Fri Aug 14 20:07:35 2009 +0000
+
+    New function to put an SSL bufferevent into a renegotiating state.
+    
+    svn:r1418
+
+commit 46a61869ca066405c47ac5d8036e8c9c5a676f52
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Fri Aug 14 20:07:17 2009 +0000
+
+    Disable whichever struct event we don't want during ssl handshaking.
+    
+    svn:r1417
+
+commit 58b0708e1881e82a4abf660c7cd8693b17cb594a
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Fri Aug 14 20:07:09 2009 +0000
+
+    Only send a connected event _after_ we've adjusted the SSL state.
+    
+    This is important if the callback adjusts it to something else.
+    
+    svn:r1416
+
+commit d17c720c052ea639521da7b9d2bb50ec6c3f1bf8
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Fri Aug 14 20:07:01 2009 +0000
+
+    Remove an extraneous puts().
+    
+    svn:r1415
+
+commit eff09a299cb7759a63c988cf542b4eeff7ed0c8f
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Fri Aug 14 20:06:48 2009 +0000
+
+    tab/whitespace fixes in bufferevent_sock.c
+    
+    Also note that write() doesn't usually say 0.
+    
+    svn:r1414
+
+commit bd26bace0d2f97efe04c20f9cd949edeb541963c
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Tue Aug 11 19:47:46 2009 +0000
+
+    When running with deferred callbacks, always send the "connected" event
+    before any read/write events, and send timeout/error/eof events after.
+    
+    svn:r1413
+
+commit 7a55c48d775e94f158fb6db0470c9a68abbec068
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Sun Aug 9 20:18:00 2009 +0000
+
+    Add a few missing changelog entries
+    
+    svn:r1412
+
+commit 800f9aa607e4fd48d50615c10bb6f71d831c7071
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Sun Aug 9 20:17:29 2009 +0000
+
+    When bufferevent_socket_connect is called with no address, assume that our existing fd is connecting and put the connection into "connecting" mode.
+    
+    svn:r1411
+
+commit 8a99083f0123765b6b73d7b5efccae1e88fff608
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Fri Aug 7 17:16:52 2009 +0000
+
+    Add an	evbuffer_search_range() to search a bounded range of a	buffer
+    
+    This can be handy when you have	one search to find the end of a	header
+    section, and then you want to find a substring within the header
+    section without looking at the body.
+    
+    svn:r1410
+
+commit 0c09fe5adac221d2c74fa9891f39fef4600b7461
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Mon Aug 3 20:50:56 2009 +0000
+
+    Add a couple more evdns tests.  Libevent is now, for me, at 80.02% coverage.
+    
+    svn:r1409
+
+commit 94e8f9b9010e748cfccfaf3c6c46ff1f5009ed1f
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Mon Aug 3 20:15:45 2009 +0000
+
+    Another DNS unit tests, to handle reissues.
+    
+    The evdns module is now up to ~72% coverage; Libevent is up to nearly 80%.
+    
+    svn:r1408
+
+commit dc1f5b1ee0ae0ebca6f6f2f5228814f3e0dd9ac6
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Mon Aug 3 20:15:39 2009 +0000
+
+    why say fprintf(stdout, X) when you can say printf?
+    
+    svn:r1407
+
+commit 213dc2a2ef719a310de867cbae858e98360952d0
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Mon Aug 3 20:15:32 2009 +0000
+
+    Fix an annoying evdns crash bug, and add more unit tests for evdns.
+    
+    svn:r1406
+
+commit a5006d80cd5ef4d1b38155ee790255ac54ec7e09
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Mon Aug 3 16:15:57 2009 +0000
+
+    Unit tests for DNS search.
+    
+    svn:r1405
+
+commit d41347722a8599d6daf82a765efe53de573afd2b
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Fri Jul 31 17:35:42 2009 +0000
+
+    Refactor evbuffer_readln() into a search-for-eol function and an extract-line function.
+    
+    svn:r1404
+
+commit a26d2d1b87f373a4d4e48a91575fb6fd4163186a
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Fri Jul 31 17:34:47 2009 +0000
+
+    Refactor evbuffer_readln to use evbuffer_ptr; remove old evbuffer_iterator.
+    
+    svn:r1403
+
+commit 6dc488bd7ee616c84dd2867e34ec6ad26e5f49ac
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Fri Jul 31 17:34:18 2009 +0000
+
+    Improved coverage for evbuffer_readln()
+    
+    svn:r1402
+
+commit 7c688dd9a2380a8af3f1903d34510ef3feaaa275
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Fri Jul 31 14:41:45 2009 +0000
+
+    New function to expose bufferevent.enabled
+    
+    svn:r1401
+
+commit 621aafd27a3aafaab6c061f0522a27d62390b3bc
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Thu Jul 30 22:11:23 2009 +0000
+
+    Export sockaddr comparison functionality.
+    
+    svn:r1400
+
+commit cf54d74a651064f93d2fa4074b15abbb2da42b45
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Thu Jul 30 20:41:41 2009 +0000
+
+    More unit tests for Openssl, including initializing with no socket. Up to 75% coverage.
+    
+    svn:r1399
+
+commit d1a2254bf25e449cf7f0f989e0e9e05792fb585a
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Thu Jul 30 20:41:31 2009 +0000
+
+    Fix some bugs in bufferevent_socket_connect
+    
+    svn:r1398
+
+commit 7a2a51a3a1ea6ece8bab492f9f494dece207eaf7
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Thu Jul 30 20:41:21 2009 +0000
+
+    Add unit tests for SSL session renegotiation.
+    
+    This tickles the write-blocked-on-read code, and in this case turned
+    up a bug in it.
+    
+    svn:r1397
+
+commit 595f7e3877c7597ce2349e725b901f0d5c4e4479
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Thu Jul 30 20:41:12 2009 +0000
+
+    Always retry SSL_write() with the same number you told it last time.
+    
+    svn:r1396
+
+commit eecefc50e77041c588b2c281f57b5609ae80885c
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Thu Jul 30 20:41:00 2009 +0000
+
+    Add a function to extract the SSL object from a bufferevent_openssl.
+    
+    svn:r1395
+
+commit d5a3f1f11685af21bd38ffceddcb949b7997cd46
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Thu Jul 30 20:40:50 2009 +0000
+
+    Set the SSL_MODE_ACCEPT_MOVING_WRITE_BUFFER flag, and explain why.
+    
+    svn:r1394
+
+commit 44715517e869afed7fb32419aecd7410b4ab458c
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Thu Jul 30 20:40:40 2009 +0000
+
+    Use SSL_do_handshake in place of SSL_connect/SSL_accept
+    
+    svn:r1393
+
+commit 8a3007efb97f1b0dd1091a366cf341fad6417c7f
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Thu Jul 30 17:01:38 2009 +0000
+
+    More evconnlistener unit tests: bump its coverage from 71% to 83%.
+    
+    svn:r1392
+
+commit 7c20a6ae5231971a49596d12d64beeb98e1562f0
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Thu Jul 30 17:01:21 2009 +0000
+
+    Export an ev_socklen_t.
+    
+    svn:r1391
+
+commit 75fe762e03be63577ccbfa78baf9c78e8be40d7f
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Thu Jul 30 17:00:56 2009 +0000
+
+    Accessor function to get a listener's associated fd
+    
+    svn:r1390
+
+commit 625116295a25e438114f137323d0b5db1c748b4c
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Thu Jul 30 17:00:46 2009 +0000
+
+    Add unit test for parsing addresses with bad ports.
+    
+    svn:r1389
+
+commit 3c99c79df9509ce4da489e237ead4c8104af7b21
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Tue Jul 28 19:45:54 2009 +0000
+
+    Changelog entry for msvc fixes.
+    
+    svn:r1388
+
+commit 72ea534f8e0eb217695035b549f734eed1695d9e
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Tue Jul 28 19:41:57 2009 +0000
+
+    Export evutil_str[n]casecmp as evutil_ascii_str[n]casecmp.
+    
+    svn:r1387
+
+commit a826a75800ce614a06ae53ddb95c54ccaf2f51d2
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Tue Jul 28 19:41:48 2009 +0000
+
+    Some tweaks to Brodie Thesfield's MSVC patch.
+    
+    svn:r1386
+
+commit 5b5b880be7452eaf42d401f3ad54474ae60a9dbf
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Tue Jul 28 19:41:39 2009 +0000
+
+    Various MSVC cleanups from Brodie Thiesfield.
+    
+    svn:r1385
+
+commit 12199fa7a51ee93479fa0db30c2f7b9c8159bb94
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Tue Jul 28 17:11:03 2009 +0000
+
+    Fix segfault during failed allocatino of locked evdns base.
+    
+    We need to comb the rest of the code to make sure that we don't blindly wrap
+    functions in LOCK(x), UNLOCK(x) when those functions might contain a FREE(x)
+    in the middle.
+    
+    Rocco Carbone found and reported this bug.
+    
+    svn:r1384
+
+commit f8b527e6a1b3a1cc2b90397b827bf219d0ba3aa6
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Tue Jul 28 05:09:06 2009 +0000
+
+    Fix a dumb bug where we would allocate too little memory in event_get_supported_methods().
+    
+    svn:r1383
+
+commit 709c21c48ca541c75bf803e6801c335d8ae3d043
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Tue Jul 28 04:03:57 2009 +0000
+
+    Bufferevent support for openssl.
+    
+    This code adds a new Bufferevent type that is only compiled when the
+    openssl library is present.  It supports using an SSL object and an
+    event alert mechanism, which can either be an fd or an underlying
+    bufferevent.
+    
+    There is still more work to do: the unit tests are incomplete, and we
+    need to support flush and shutdown much better.  Sometimes events are
+    generated needlessly: this will hose performance.
+    
+    There's a new encrypting proxy in sample/le-proxy.c.
+    
+    This code has only been tested on OSX, and nowhere else.
+    
+    svn:r1382
+
+commit b06b2649b4c7f5feaedea97c31001c14708e4d1f
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Sun Jul 26 01:29:39 2009 +0000
+
+    Make "deferred callback queue" independent of event_base.
+    
+    This way, we can more easily have an IOCP bufferevent implementation
+    that does not need an event_base at all.  Woot.
+    
+    svn:r1381
+
+commit 8cc68835245dd3f542d28299ecfa5c2bc3d471eb
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Sat Jul 25 03:35:32 2009 +0000
+
+    Fix the main/methods unit test to pass from "make verify".
+    
+    The problem was introduced when we changed the semantics of
+    get_supported_methods() to reflect all the methods that exist.
+    Previously, it had not returned methods disabled from the environment,
+    but the test didn't know that.
+    
+    svn:r1379
+
+commit 6fbeb9237c68df4ae2ea6e5119ca6d9b8bc0ca1e
+Author: Niels Provos <provos at gmail.com>
+Date:   Sat Jul 25 03:23:46 2009 +0000
+
+    call it 2.0.2-alpha
+    
+    svn:r1378
+
+commit 8eb155a1c0812da33fceb47462c9380d71c320d3
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Thu Jul 23 14:48:24 2009 +0000
+
+    Fix build on platforms (like Solaris 10, reportedly) which lack a MAP_FILE.
+    
+    svn:r1375
+
+commit 49de08ef35c77d44cbf7fb4698d0d91612f616ad
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Tue Jul 21 19:20:44 2009 +0000
+
+    Push coverage of event.c a little higher
+    
+    svn:r1373
+
+commit 59e8e959dcaa9208bf0fa107a5709fa65a660f72
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Tue Jul 21 19:20:25 2009 +0000
+
+    Add clarifying "static" to definitions of fns in event.c
+    
+    svn:r1372
+
+commit 670658ebd7485e61e32932d35be0e26900a447b8
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Tue Jul 21 18:32:57 2009 +0000
+
+    Correct the signatures for evdns_configure_windows_nameservers(), now that it is exposed.
+    
+    svn:r1369
+
+commit f4775918cd4faeddc090e7755c259cfcf0e094c6
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Mon Jul 20 14:55:51 2009 +0000
+
+    Refactor evtag tests into their own suite.
+    
+    svn:r1366
+
+commit e8400a43ca3f67e44e7593907353c6e5335c304e
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Mon Jul 20 14:55:35 2009 +0000
+
+    Rename encode_int(64) to avoid polluting the global namespace.
+    
+    They're now called evtag_encode_int(64).  The old names are available
+    as macros in event2/tag_compat.h.
+    
+    Also, add unit tests for encode/decode_int64.
+    
+    svn:r1365
+
+commit dc031990e083bef785ec107271559ccc60705873
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Mon Jul 20 14:55:07 2009 +0000
+
+    Add strcasecmp tests to improve evutil coverage a bit
+    
+    svn:r1364
+
+commit 1fb2e818a6273571c01aed5ccce30a5d846a1663
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Fri Jul 17 21:47:45 2009 +0000
+
+    Use a uniform strategy when a function is not working: do not expose
+    it.
+    
+    Rather than failing at runtime, it is better to fail at compile or
+    link time.
+    
+    svn:r1363
+
+commit 9cf4ee7e17aa9bb9b53f9135ec2efa9e6563bf23
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Fri Jul 17 21:47:35 2009 +0000
+
+    Fix a simple warning
+    
+    svn:r1362
+
+commit d3bef1a1e3b93190ef8b1a4459f2c6fb9c205095
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Fri Jul 17 20:32:25 2009 +0000
+
+    Finish implementing new convention that whenever an optional function is declared, a corresponding macro is defined.
+    
+    svn:r1361
+
+commit a386fde321dd20874a31f8659fa7337b170415de
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Fri Jul 17 20:28:03 2009 +0000
+
+    Checking for MS_WINDOWS rather than WIN32 is a Tor-ism. Fix that!
+    
+    svn:r1360
+
+commit c02b305ae59a2ac8c01bce36c6c0dbc195503195
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Fri Jul 17 20:23:12 2009 +0000
+
+    Trivial tests to exercise deferred and locking bufferevent code.
+    
+    These are done as variations of test_bufferevent_connect, since that
+    one exercises event callbacks as well as read/write callbacks.
+    
+    The coverage for bufferevent.c is now up to about 87%, from about 70%.
+    
+    svn:r1358
+
+commit 61f2a45de165edbb149dd476ec03b9ff134afc63
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Fri Jul 17 20:23:05 2009 +0000
+
+    Add a tinytest flag to initialize threading.
+    
+    svn:r1357
+
+commit 4ba6eda48fb8cc451f649a19f5a3d2006995073d
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Fri Jul 17 20:22:56 2009 +0000
+
+    Make evthread_use_pthreads() actually return 0 on success.
+    
+    svn:r1356
+
+commit ed038295cdaf1095776f2849b05b9c685fdc78f2
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Fri Jul 17 20:22:48 2009 +0000
+
+    Define a macro to indicate that we have defined one of the optional evthread_use macros
+    
+    svn:r1355
+
+commit 69601fc2f63ff7ed144cd9b42c659d90a564b198
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Fri Jul 17 18:59:22 2009 +0000
+
+    Update event_tv when time jumps backwards, so that we only note each jump once. Fix for 1939984
+    
+    svn:r1353
+
+commit 9c2ecba7f819072cd562b8bf20060c78a4a63f97
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Fri Jul 17 18:42:12 2009 +0000
+
+    Oops. -1 is an integer, not a pointer.
+    
+    svn:r1352
+
+commit d6f2e199243ef6eb4b1b96dbff16793a5fe2c202
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Fri Jul 17 18:38:46 2009 +0000
+
+    Unit tests for bufferevent_get(fd|_underlying)
+    
+    svn:r1351
+
+commit 5d71b25b516332af4dec0fe29d44fea28c06ccd0
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Fri Jul 17 18:38:38 2009 +0000
+
+    Remove all trailing whitespace from end-of-line.
+    
+    svn:r1350
+
+commit d4e3671fb43b8ab2c743fec0f1deb6634e382d7d
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Fri Jul 17 18:38:21 2009 +0000
+
+    Add a test to free_active_base to free a base with an active event.
+    
+    svn:r1349
+
+commit 638116cacd7e6239760fc8ddd76f046a921549c2
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Fri Jul 17 18:38:14 2009 +0000
+
+    Add a check for event_add failure to evthread_make_base_notifiable()
+    
+    svn:r1348
+
+commit a62283a9c3a46c4ba0d72eb3bc18a3db7f9648e2
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Fri Jul 17 17:46:17 2009 +0000
+
+    Always hold a reference to a bufferevent when calling its callbacks.
+    
+    Rationale: we hold a lock on the bufferevent when its callbacks are
+    executing, so we need to release the lock afterwards.  But the
+    callback might free the bufferevent, so unless we're holding a
+    reference on the bufferevent, the lock might not be there for us to
+    release.
+    
+    svn:r1347
+
+commit e83a32dfe1c10c90c27ccf1f4f93a59820517108
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Tue Jul 14 19:31:20 2009 +0000
+
+    Do not define _FORTIFY_SOURCE if the platform GCC already defined it for us.
+    
+    svn:r1346
+
+commit 9fcd84d196205e3eb6dcd0477005cb04974e703f
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Tue Jul 14 19:19:45 2009 +0000
+
+    Include disabled methods in event_get_supported_methods() output.
+    
+    Previously, events that were disabled using EVENT_NO* were left out of
+    event_get_supported_methods().  This was wrong, broke unit tests
+    (under some circumstances) and left the user with no good way to tell
+    which methods were actually compiled in.
+    
+    Fixes bug 2821015.
+    
+    svn:r1344
+
+commit 043515bc52dcc11109c7460fcfd92b67105f3f2a
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Tue Jul 14 18:50:06 2009 +0000
+
+    Stop using C++ style comments.
+    
+    svn:r1343
+
+commit e224321c6413d8245d88655b7d88e5b3a2da0690
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Tue Jul 14 18:49:42 2009 +0000
+
+    Convert and expand free_active_base/event_base_new tests to avoid dbl-free. Patch from Zack Weinberg
+    
+    svn:r1342
+
+commit 6b4b77a26590f862dff5b490630d2a4b1ea994cd
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Tue Jul 14 16:54:48 2009 +0000
+
+    Make event_del(E) block while E is running in another thread.
+    
+    This gives you the property that once you have called event_del(E),
+    you know that E is no longer running or pending or active at all, and
+    so it is safe to delete the resource used by E's callback.
+    
+    svn:r1341
+
+commit d866f055857794b8bfad93d93b247b2936a4f7a0
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Mon Jul 13 20:03:00 2009 +0000
+
+    Patch from Zack Weinberg: normalize perror() tt functions and add tt_fail/tt_abort_printf
+    
+    svn:r1340
+
+commit 0cc10e419c6d1bca947a31315138d32d5addf480
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Mon Jul 13 20:02:49 2009 +0000
+
+    Use -version-info, not -release.
+    
+    Patch from Zack Weinberg.  His description:
+    
+    This one might be a little more controversial. Libtool's -release and
+    -version-info options are supposed to be mutually exclusive, but it doesn't
+    either enforce that or make it sufficiently clear in the manual. Using
+    both makes the -version-info switch ineffective; you will get sonames like
+    "libevent-2.0.so.1", "libevent-2.1.so.1", etc., even though version 2.1
+    will presumably be backward ABI compatible with 2.0.
+    
+    This patch just takes out the -release switches and bumps the -version-info
+    value to 2:0:0 so that people looking at the files in /usr/lib will not be
+    confused (it'll be "libevent.so.2"). This does change the soname, but the
+    current release is labeled an alpha, and it would be better to stop using
+    both switches as soon as possible, before someone over at libtool
+    headquarters decides to enforce the mutual exclusivity here...
+    
+    Note that libevent_pthreads is not being linked with any versioning
+    switches I didn't change that because I wasn't sure whether it was
+    intentional.
+    
+    svn:r1339
+
+commit d3a8ccb8073c3d76b8bfbb4205cfddfd5a351831
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Fri Jul 10 19:38:16 2009 +0000
+
+    Change use of AC_CHECK_LIB to AC_SEARCH_LIBS.
+    
+    Patch from Zack Weinberg.  His message:
+    
+      This one eliminates all use of AC_CHECK_LIB in the configure script.
+      AC_CHECK_LIB has a serious flaw: if the library you mention *exists*
+      but is not *necessary* for the function you want, it adds it to
+      $(LIBS) anyway.  This was fine in the days of static libraries,
+      because the linker would ignore an .a library that didn't contain
+      anything you needed. However, ELF shared libraries are different
+      (let's not get into why): the linker will by default record a
+      DT_NEEDED entry for every shared object mentioned on the link
+      command line. Thus, every use of AC_CHECK_LIB is a potential
+      unnecessary DT_NEEDED, making extra work for the dynamic loader. The
+      cure is simply to use AC_SEARCH_LIBS instead; it first tries to find
+      the function you ask for in libc, and only if that doesn't work does
+      it try to use the extra library you mention.
+    
+      For the same reasons, pkg-config .pc files should distinguish
+      between the libraries to use for shared linkage (Libs:) and the
+      additional libraries needed for static linkage (Libs.private:). I
+      have also made that correction in this patch. I also took the
+      opportunity to clean up the substitution variables a little and make
+      absolutely sure that the core library does not get linked against
+      zlib.
+    
+    svn:r1338
+
+commit a501d6833bae3415381e62acd6e45f4a22fea5b6
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Fri Jul 10 19:34:00 2009 +0000
+
+    Add a lock/unlock pair inside the event callbacks in bufferevents.
+    
+    This fixes part of bug 2800642, I believe, though there is still a
+    general race condition in multithreaded use of events that we need to
+    think about.
+    
+    svn:r1337
+
+commit 6469598e568a62072c35a3e9322ad09e102b81a7
+Author: Niels Provos <provos at gmail.com>
+Date:   Fri Jul 3 17:43:26 2009 +0000
+
+    Allow C identifiers as struct names; allow multiple comments in .rpc files; from Zack Weinberg; plus a tiny tweak
+    
+    svn:r1336
+
+commit fbb181d1aaa0cbc22ac8c1ce91a8f2216be95ed9
+Author: Niels Provos <provos at gmail.com>
+Date:   Fri Jul 3 17:31:17 2009 +0000
+
+    Allow specifying the output filename for rpcgen; based on work by jmansion; patch from Zack Weinberg.
+    
+    svn:r1335
+
+commit bbcc54ef9ce0dbbdf4a26b4bcc43cfb9c4e3bec4
+Author: Niels Provos <provos at gmail.com>
+Date:   Fri Jul 3 17:25:45 2009 +0000
+
+    fix preamble of rpcgen-generated files to rely on event2 includes; based on work by jmansion; patch from Zack Weinberg.
+    
+    svn:r1334
+
+commit 37d3e16ce9fe71a7112fd4e35c31629e470dff04
+Author: Niels Provos <provos at gmail.com>
+Date:   Fri Jul 3 17:20:56 2009 +0000
+
+    Raise RpcGenError in event_rpcgen.py; from jmanison and Zack Weinberg
+    
+    svn:r1333
+
+commit 342ad3550ba685c0b0e95a8aa98d86f1509f36ab
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Tue Jun 30 14:23:18 2009 +0000
+
+    The truncated bit is in the 3rd byte of a dns reply, not the 4th. [fwd-port]
+    
+    svn:r1332
+
+commit 5aefb8a6d62c5d9f346d0104fb831d33eb55b88d
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Thu Jun 25 15:22:36 2009 +0000
+
+    Fix type on freebsd sendfile. Patch from navin seshadri.  Fixes bug 2811991
+    
+    svn:r1330
+
+commit f901f9867c3c8a18334e108cb087fa6880864e4e
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Wed Jun 24 22:40:15 2009 +0000
+
+    When our IP address changes, do not break all existing dns server sockets.  Patch from Christopher Davis
+    
+    svn:r1329
+
+commit 01be8708e9cbccf4c7ca951853d072fdd2e48c9c
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Thu Jun 11 19:09:08 2009 +0000
+
+    Fix compile on cygwin.  This isnt the solution I would like: I would prefer to get pton and ntop to work even when AF_INET6 is not defined.
+    
+    svn:r1326
+
+commit bbd14de0537bec133dd6fa8e686b5390704bee38
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Thu Jun 11 17:55:08 2009 +0000
+
+    Add sometimes-needed header to regress_bufferevent.c
+    
+    svn:r1325
+
+commit d1ffba1d7ce3979e8aefbdd0a26036fe974e5242
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Fri Jun 5 19:52:13 2009 +0000
+
+    Replace some read/write instances with send/recv to work properly on win32.
+    
+    svn:r1324
+
+commit a43a1c2b237b2bcd0806635055a62f7406a16f2f
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Thu May 28 20:44:04 2009 +0000
+
+    Fix compilation problems in win32.c
+    
+    svn:r1322
+
+commit eb97bb76e1a99eed4850f78421392f4765c63a73
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Thu May 28 15:58:28 2009 +0000
+
+    Make the headers compile happily with pedantic C compilers.
+    
+    Original message from SF patch 2797966:
+    
+        While commas at the end of enumerator lists are valid in c99, they
+        are not valid +in c89 nor in c++. When using gcc/g++ with the
+        -pedantic flag, users will +receive a warning (gcc) or an
+        error(g++) when including the event2/event.h and
+        +event2/bufferevent.h. The errors look something like
+    
+        event2/event.h:159: error: comma at end of enumerator list
+    
+    Patch from Akita Noek on Sourceforge.
+    
+    svn:r1321
+
+commit 0b4ab122514f391a24711af0f92b04b8dd0c6055
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Thu May 28 15:47:15 2009 +0000
+
+    Spell-check the the headers
+    
+    svn:r1320
+
+commit 3f0e49283b88c577b9d23fadcc89959a5676778f
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Wed May 27 23:48:59 2009 +0000
+
+    small doc fix.
+    
+    svn:r1319
+
+commit cdaca02c2909452de23244738630f408b8eee8e1
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Wed May 27 15:35:00 2009 +0000
+
+    Activate fd events in a pseudorandom order on older backends.
+    
+    New backends like poll and kqueue and so on add fds to the queue in
+    the order that they are triggered.  But the select backend currently
+    activates low-numbered fds first, whereas the poll and win32 backends
+    currently favor whatever fds have been on for the longest.  This is no
+    good for fairness.
+    
+    svn:r1318
+
+commit 11a178f2bdd533d4f4cf7448653b0adc30c9779f
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Mon May 25 23:11:31 2009 +0000
+
+    Defer EOF on paired bufferevent correctly.
+    
+    svn:r1317
+
+commit 5232cfa357e2d1a7cf2c6936e565fd79dade7aae
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Mon May 25 23:11:20 2009 +0000
+
+    Consistently say "eventcb" instead of "errorcb"
+    
+    svn:r1316
+
+commit 2f655f008cf6d019114cbdd8cac30ffcd4c44140
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Mon May 25 23:10:47 2009 +0000
+
+    Add documentation for bufferevent-internal.h stuff
+    
+    svn:r1315
+
+commit 34574db0f8bad98f59e66e62b94a2abec6211d5f
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Mon May 25 23:10:23 2009 +0000
+
+    Add a generic mechanism to implement timeouts in bufferevents.
+    
+    Paired and asynchronous bufferevents didn't do timeouts, and filtering
+    bufferevents gave them funny semantics.  Now they all should all work
+    in a way consistent with what socket bufferevents do now: a [read/write]
+    timeout triggers if [reading/writing] is enabled, and if the timeout is
+    set, and the right amount of time passes without any data getting
+    [added to the input buffer/drained from the output buffer].
+    
+    svn:r1314
+
+commit 49f18a0aab4a6456f9da9d2367d9f680310039fc
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Mon May 25 20:02:51 2009 +0000
+
+    Add requirement in configure.in for autoconf 2.59c.  Needed for ssize_t test.  Spotted by Yang Hong.
+    
+    svn:r1313
+
+commit dfe321e1ee27cc5d128c932f584535b089cd80d8
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Fri May 22 20:11:29 2009 +0000
+
+    Add missing windows include in time-test.c
+    
+    svn:r1311
+
+commit e8343e9ff18b768fdc0944da18350349ef26cdf0
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Fri May 22 19:11:59 2009 +0000
+
+    work around missing __func__ in sample code
+    
+    svn:r1310
+
+commit 0b22ca192991aa5fa95e958cd6b010d89915bdb3
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Fri May 22 19:11:48 2009 +0000
+
+    Use ev_ssize_t in place of ssize_t *everywhere*.
+    
+    svn:r1309
+
+commit 7289d7f80071cffe1b0e4886c9efc6d688f6d3b1
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Fri May 22 18:20:59 2009 +0000
+
+    Fix a potentially very annoying evdns bug that we found in Tor.
+    
+    Generally speaking, it way better to event_assign() an event when you
+    allocate it than to assign it before every time you event_add it: if
+    it is already event_add()ed, the assign will mess it up so that it
+    doesn't _look_ added, and event_add() will insert a second copy.
+    Later, event_del() will only delete the second copy.  Eventually, the
+    event_base will have a dangling pointer to freed memory.  Ouch!
+    
+    svn:r1307
+
+commit 7a844735d531e9b5fc0de28a3eafb87e88199396
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Fri May 22 17:20:05 2009 +0000
+
+    Fix some small win32 build issues on trunk.
+    
+    svn:r1306
+
+commit 8c66eb2e9b13e409cda3b296d292c3def1c20cd1
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Fri May 22 14:48:40 2009 +0000
+
+    Try to contain the failure when we are running without socketpair().
+    
+    Some win32 systems (mostly those using Kaspersky, it would seem)
+    prevent us from faking socketpair().  This makes our signal
+    notification code just not work.  Our response since 1.4 has been to
+    assert.  For users who would rather work without signals than not work
+    at all, this has been a regression from 1.3e.
+    
+    This patch makes adding signal events fail in this case; there's no
+    reason to kill the whole process.
+    
+    svn:r1303
+
+commit 59cd49363c470195b892693e2c394f74ddc1f5ce
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Fri May 22 14:31:07 2009 +0000
+
+    Do not free the event base lock until we are done removing all the events.  Spotted by Joachim Bauch; fixes bug 2795402.
+    
+    svn:r1302
+
+commit 1ee65b7f94dd94ce0bc5159fd6117f916857dcd9
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Thu May 21 20:59:17 2009 +0000
+
+    Do not assume we know the value for FD_CLOEXEC.
+    
+    svn:r1301
+
+commit 7e3ea82ee6f89d9d7035aec388c766e235752f79
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Thu May 21 20:59:09 2009 +0000
+
+    Disallow backlog==0 in evconnlistener_new_bind().
+    
+    svn:r1300
+
+commit 8997f234f23ce0599250ce7b831d56a04f240f61
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Thu May 21 20:59:00 2009 +0000
+
+    Use the native "struct iovec" as our "struct evbuffer_iovec" when available, so we do not need to copy more pointers than necessary.
+    
+    svn:r1299
+
+commit 594842970ead07fd3e100234c908744563d0f734
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Wed May 20 12:24:13 2009 +0000
+
+    Fix a deadlock: there were some LOCKs that should have been UNLOCKs.  Resolves bug 2794244
+    
+    svn:r1298
+
+commit 66df9dafe1a8f25760f2a5eefb04aa3ad0a448d5
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Tue May 19 21:49:53 2009 +0000
+
+    Add changelog for last commit
+    
+    svn:r1297
+
+commit 23243b8a985e26e19deafd81e58159d545a31f34
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Tue May 19 21:39:35 2009 +0000
+
+    Replace reserve/commit with new iovec-based interface.  Add a new evbuffer_peek.
+    
+    svn:r1296
+
+commit ed1bbc7a9f41be00607b3f56933378a625838d6a
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Mon May 18 16:15:56 2009 +0000
+
+    Tweak the evconnlistener interface a little.
+    
+    svn:r1295
+
+commit dc4c7b95707864d09d710fbe4736f05a39e823a0
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Fri May 15 22:44:18 2009 +0000
+
+    Change the interface of evbuffer_add_reference: give the cleanup function more info.
+    
+    svn:r1294
+
+commit bba69e03f8101ec3efe7db69973fc93151e242ba
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Fri May 15 20:23:59 2009 +0000
+
+    New semantics for evbuffer_cb_set_flags().
+    
+    Previously, set_flags() would replace all previous user-visible flags.
+    Now it just sets the flags, and there is a clear_flags() function to
+    clear other flags.
+    
+    svn:r1293
+
+commit b4886ec80d11a20f0b247db2378a5eea9dee1e24
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Fri May 15 18:44:44 2009 +0000
+
+    Trim 22 bytes from struct event on 32 bit platforms, more on 64-bit platforms.
+    
+    svn:r1292
+
+commit 85b0a7a23f83370af1f029b744fa1387cab6fa06
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Fri May 15 01:38:23 2009 +0000
+
+    We were distributing the wrong event-config.h with our source distributions.  Fix that.
+    
+    svn:r1289
+
+commit 27fef1ef2699f71faaaab1d0d2051704da05474a
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Thu May 14 18:06:41 2009 +0000
+
+    Note problems with some newer evbuffer interfaces.
+    
+    svn:r1286
+
+commit 3e759a0172b935b900ac6058c62716cce7c9af52
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Thu May 14 18:06:29 2009 +0000
+
+    Actually, do not provide a compatibility name "EVBUFFER_CONNECTED": there is no old code that uses it.
+    
+    svn:r1285
+
+commit 31d89f274bc28655bca3e6aec19b90080cb09add
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Wed May 13 20:37:21 2009 +0000
+
+    Add a "ctrl" mechanism to bufferevents for property access.
+    
+    OpenSSL uses something like this to implement get/set access for
+    properties on its BIOs, so that it doesn't need to add a pair of
+    get/set functions to the vtable struct for every new abstract property
+    it provides an accessor for.
+    
+    Doing this lets us make bufferevent_setfd abstract, and implement an
+    abstract bufferevent_getfd.
+    
+    svn:r1284
+
+commit 83f46e51d77759cc1857519f4bc94e833404980d
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Wed May 13 20:36:56 2009 +0000
+
+    Do not use the "evbuffer_" prefix to denote parts of bufferevents.
+    
+    This is a bit of an interface doozy, but it's really needed in order
+    to be able to document this stuff without apologizing it.  This patch
+    does the following renamings:
+    
+       evbuffercb -> bufferevent_data_cb
+       everrorcb -> bufferevent_event_cb
+       EVBUFFER_(READ,WRITE,...) -> BEV_EVENT_(...)
+       EVBUFFER_(INPUT,OUTPUT) -> bufferevent_get_(input,output)
+    
+    All the old names are available in event2/bufferevent_compat.h
+    
+    svn:r1283
+
+commit f11dff2c7a40ee723c7ef6d32c3c333d2538c3c4
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Thu May 7 03:45:51 2009 +0000
+
+    Add and use locale-independent strcasecmp functions.
+    
+    svn:r1280
+
+commit 89109010200c3702b8f2c031aa7982ed80f86733
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Wed May 6 02:34:10 2009 +0000
+
+    Addition to bufferevent_async unit test
+    
+    svn:r1279
+
+commit a8bcbfd4160b7f55ace800f632108333b56dc327
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Wed May 6 02:33:37 2009 +0000
+
+    Fix bufferevent_async to use lock/unlock, not unlock/unlock.
+    
+    You do NOT want to know what windows does when you unlock a lock that is already unlocked.
+    
+    svn:r1278
+
+commit fe47003d06e4f036de6874c1d00098cd6a687de5
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Tue May 5 16:52:37 2009 +0000
+
+    Make unit tests for bufferevent_async compile and _almost_ work.
+    
+    Either I need to make the callbacks get deferred in a base with no events (doable), or I need to make it okay to call launch_read from inside the callback for read (tricky).
+    
+    svn:r1277
+
+commit 02801e5be5e14ef783d5a4095cca32d21fc7da8f
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Tue May 5 15:36:28 2009 +0000
+
+    Add a trival start of a be_async test.
+    
+    svn:r1276
+
+commit af8b82224bffd93c885dfcb84c64ca63a0e6cc7e
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Tue May 5 15:30:58 2009 +0000
+
+    Add missing include to buffer_iocp.c
+    
+    svn:r1275
+
+commit b69d03b5a8eaf906575d44615e5bf0cab6fbe66a
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Tue May 5 14:18:14 2009 +0000
+
+    Add a constructor for bufferevent_async.
+    
+    svn:r1274
+
+commit 6b21fe2be89c2be0974aa125fc2c3fe12e24522e
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Tue May 5 03:01:24 2009 +0000
+
+    oops; do not forget to distribute listener.h
+    
+    svn:r1273
+
+commit 659d54d5304c476f5cf0ec502235e376e1d2d8a1
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Tue May 5 02:59:26 2009 +0000
+
+    Add new code to make and accept connections.
+    
+    This is stuff that it's easy to get wrong (as I noticed when writing
+    bench_http), and that takes up a fair amount of space (see http.c).
+    Also, it's something that we'll eventually want to abstract to use
+    IOCP, where available.
+    
+    svn:r1272
+
+commit 0fd70978c8d83f0f677a0d119f2737d0b68ac511
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Tue May 5 01:09:03 2009 +0000
+
+    Add an event_get_base() function to remove one more reason to include event_struct.h
+    
+    svn:r1271
+
+commit 0e63e72a0515559b972b9c525593d6d94471c949
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Sun May 3 18:56:08 2009 +0000
+
+    Nothing ever sets event_sigcb or event_gotsig any more: remove them.
+    
+    svn:r1270
+
+commit bd73ed48e5cfe72dae168e9534398accb88b349a
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Sat May 2 16:24:23 2009 +0000
+
+    Revise regress_pthreads.c to not use event_set
+    
+    svn:r1269
+
+commit 5a3eddf03f9a2c2d9bf52326e504be1555e2882f
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Sat May 2 16:24:05 2009 +0000
+
+    Use fewer _compat.h headers in our own code.
+    
+    svn:r1268
+
+commit d5ca076379a82677d7148456e975bcb2f9f1b4b5
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Sat May 2 16:23:29 2009 +0000
+
+    Move event_set() and friends to event2/event_compat.h.
+    
+    These functions are deprecated in favor of event_assign().
+    
+    svn:r1267
+
+commit 00ecd1d8e4571e019406293b28042b0628a676fd
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Sat May 2 16:23:08 2009 +0000
+
+    Make evrpc use event2/rpc*.h, not evrpc.h
+    
+    svn:r1266
+
+commit 7b24d72ad616fe4927f452518bd058164db44854
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Sat May 2 16:22:55 2009 +0000
+
+    Remove some duplicated includes in evdns.c
+    
+    svn:r1265
+
+commit a109d95c72635e6c4ea046af31a6b0cb261600ca
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Sat May 2 16:11:06 2009 +0000
+
+    Add changelog entry for vc++ fixes
+    
+    svn:r1264
+
+commit 1aebcd50476c0341d04a351351be228ed2b41d56
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Fri May 1 01:42:33 2009 +0000
+
+    Initial core implementation of bufferevent_async.c
+    
+    svn:r1263
+
+commit e865eb938ca5614b1897f265f50587bc71f2c6b1
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Fri May 1 00:54:14 2009 +0000
+
+    More msvc build tweaks.
+    
+    svn:r1262
+
+commit b2e8fd0e41d3437d7214fb4604e22476ddc94e4d
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Thu Apr 30 23:56:53 2009 +0000
+
+    Apparently MSVC lacks a ssize_t.  Define an ev_ssize_t for headers, and make ssize_t work elsewhere.
+    
+    svn:r1261
+
+commit ebf294559e47717872fb7cc31764bcfba2d0e840
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Thu Apr 30 23:49:15 2009 +0000
+
+    Compilation fixes for vc++ 2008 express.  Not the end of them.
+    
+    svn:r1260
+
+commit 7f9678079fdef0a1373b91dc4c8a7df62763f673
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Thu Apr 30 20:48:40 2009 +0000
+
+    Initial unit test for overlapped evbuffer usage.  It's lame, but it doesn't crash any more.
+    
+    svn:r1259
+
+commit efc24f7cf108e87b9b5b001af87deb08755d2425
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Thu Apr 30 20:47:38 2009 +0000
+
+    Get launch_read and launch_write to (apparently) work.
+    
+    svn:r1258
+
+commit 23121bfb41c70351877cd7e4a2f6a0b80671fad0
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Thu Apr 30 19:56:23 2009 +0000
+
+    Fix a reversed check in upcast_evbuffer
+    
+    svn:r1257
+
+commit 16612eb936ef702c8bcdfc7330d159bb09a6bc28
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Thu Apr 30 19:20:42 2009 +0000
+
+    Beef up the events in the last test a little.
+    
+    svn:r1256
+
+commit ec1468832e182406049e975c7b546732329054a7
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Thu Apr 30 19:05:43 2009 +0000
+
+    Oops: actually commit changes to build and use regress_iocp
+    
+    svn:r1255
+
+commit f1090833b2557bc18353aee293a61ee556da80df
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Thu Apr 30 19:04:44 2009 +0000
+
+    First tests for IOCP loop, and related fixes.
+    
+    The fixes are: a shutdown mode that works, and a way to activate an
+    arbitrary event_overlapped.
+    
+    svn:r1254
+
+commit b45cead762ca0d9b59a71d9a97fe95ce9a4639c3
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Thu Apr 30 18:05:33 2009 +0000
+
+    Make environment-variable tests work on win32, which has only one method and lacks (un)setenv.
+    
+    svn:r1253
+
+commit 24607a397c5f63c73d82b1ac55ce9b9530187a5f
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Wed Apr 29 20:48:43 2009 +0000
+
+    Note a place we might do better about lock releasing.
+    
+    svn:r1252
+
+commit 50e20fe076ce1b4f6728a6fd715e14629b0b25ca
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Wed Apr 29 20:48:35 2009 +0000
+
+    fix a typo in a comment
+    
+    svn:r1251
+
+commit 37bc34662b22afd96e44e81c4da251383a1a8f15
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Wed Apr 29 20:48:28 2009 +0000
+
+    Catch attempts to event_base_once a persistent event.
+    
+    svn:r1250
+
+commit 1959414120308bd72d82a7a9736870fa7b32a927
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Wed Apr 29 20:48:21 2009 +0000
+
+    Clarify semantics on event_pending()
+    
+    svn:r1249
+
+commit 9ad45eef75a8dd6e6895707a7f1ace8c376732d2
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Tue Apr 28 19:08:36 2009 +0000
+
+    Patch from Eric Hopper: the test for EVENT_BASE_FLAG_IGNORE_ENV was inverted.
+    
+    svn:r1248
+
+commit 586aa46886ae0868e690b5ac698733896d992b86
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Tue Apr 28 19:08:27 2009 +0000
+
+    Unit test for disabling events with EVENT_NO*, and for EVENT_BASE_FLAG_IGNORE_ENV.
+    
+    svn:r1247
+
+commit 2ebfd3bafde18cadc4c337d507e7d2739112a652
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Tue Apr 28 19:08:17 2009 +0000
+
+    Oops. We never actually defined event_config_set_flag().
+    
+    svn:r1246
+
+commit 11cab334189a473b4f51368787251df4fa655641
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Tue Apr 28 19:08:07 2009 +0000
+
+    Fix compile: #elif FOO is not the same as #elif defined(FOO).
+    
+    svn:r1245
+
+commit a146af1db892bf2e85cd80599ab992b8a79420ea
+Author: Niels Provos <provos at gmail.com>
+Date:   Sat Apr 25 00:15:55 2009 +0000
+
+    move more code directly into evrpc.c; provide backwards compatible vararg macros
+    
+    svn:r1244
+
+commit b228ff91b857158933dd2162bdf872749a6b9cb8
+Author: Niels Provos <provos at gmail.com>
+Date:   Sat Apr 25 00:15:31 2009 +0000
+
+    remove vararg macros for accessing evrpc structs
+    
+    svn:r1243
+
+commit f69cd80d17b6118503dc39dc676471ab452a59d4
+Author: Niels Provos <provos at gmail.com>
+Date:   Sat Apr 25 00:15:09 2009 +0000
+
+    refactor evrpc.h header filer
+    
+    svn:r1242
+
+commit bbf79707f9b19c1b732baa75e9943ff106173a80
+Author: Niels Provos <provos at gmail.com>
+Date:   Sat Apr 25 00:14:58 2009 +0000
+
+    refactor evrpc.h header filer
+    
+    svn:r1241
+
+commit 5c4c13d8c24ae4451d753c5b5bfa9444d7bc08da
+Author: Niels Provos <provos at gmail.com>
+Date:   Fri Apr 24 03:24:22 2009 +0000
+
+    make sendfile work on freebsd
+    
+    svn:r1239
+
+commit a5897917da9549daf56173fc7a59c3ac97a92597
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Thu Apr 23 21:43:44 2009 +0000
+
+    Changelog entry for r1237
+    
+    svn:r1238
+
+commit ec6bfd033566562730d2f37333b3f26bf0ba1391
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Thu Apr 23 21:41:53 2009 +0000
+
+    Fix for evbuffer_read() when all data fits in penultimate chain.
+    
+    Previously we were reading into the next-to-last chain, but incrementing
+    the fullness of the last.  Bug found by Victor Goya.
+    
+    svn:r1237
+
+commit faa756c7c19190dd8d5c27fa519870bac0c78cee
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Thu Apr 23 21:34:37 2009 +0000
+
+    Oops. event_config.flags was never initialized.  Bugfix on 2.0.1-alpha.  Found by Victor Goya.
+    
+    svn:r1236
+
+commit d70b0804888beef9d562ab73e4fde8962e1b5635
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Thu Apr 23 18:08:42 2009 +0000
+
+    Make main/methods test pass on systems where only one backend exists.
+    
+    svn:r1235
+
+commit 1ad03264408238061cf894e7b4a0ffb4b8660315
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Thu Apr 23 18:04:50 2009 +0000
+
+    Fix win32 compilation issues.
+    
+    svn:r1234
+
+commit c5c9589fb0a37bdbe101a05256ec93eaa865ea6f
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Thu Apr 23 06:27:58 2009 +0000
+
+    Add missing case to make http.c compile with warnings enabled.
+    
+    svn:r1232
+
+commit 9516df0e2eeb28234f679a65062631d409781346
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Thu Apr 23 05:40:06 2009 +0000
+
+    Fix c89 bugs reported by Cory Stup.
+    
+    Others may remain.  I wasn't able to get gcc --std=c89 to build libevent
+    at all, so I don't know what compiler the original reporter is using here.
+    
+    Note that this change requires us to disable the part of our rpc code
+    that uses variadic macros when using a non-gcc compiler.  This is a
+    problem if we want our rpc api to be portable.
+    
+    svn:r1231
+
+commit 8ba25b9ec7b66facafdd2c59bf55aefaeeab9042
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Thu Apr 23 05:20:08 2009 +0000
+
+    Add missing regress_minheap.c file
+    
+    svn:r1230
+
+commit 5c104cef5198473441d40e760fb4ea6fea989231
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Thu Apr 23 00:33:37 2009 +0000
+
+    Add a randomized test for heap correctness.
+    
+    svn:r1229
+
+commit df0617f28978f809a93bbaf1efc24372a2d8d39f
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Thu Apr 23 00:21:23 2009 +0000
+
+    Use signal.h, not sys/signal.h.
+    
+    This is patch 2673214 from mmadia.  It is correct, since we unconditionally
+    include signal.h in many other places, and only sometimes include sys/signal.h.
+    It is necessary to compile on Haiku, I'm told.
+    
+    svn:r1228
+
+commit 8b7a3b3676375d145e0b89d3f3d9194c7031a760
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Thu Apr 23 00:01:24 2009 +0000
+
+    Fix min_heap_erase when we remove an element from the middle of the heap.
+    
+    Previously, we could lose the heap property when we removed an item
+    whose parent was greater than the last element in the heap.  We would
+    replace the removed item with the last element, and consider shifting
+    it down, but we wouldn't consider shifting it up.
+    
+    Patch from Marko Kreen.
+    
+    svn:r1226
+
+commit 0068c98ad2653c3ed3ac70250893531d072c2fbb
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Thu Apr 23 00:01:14 2009 +0000
+
+    Make version test ignore the bottom byte of the version number.
+    
+    svn:r1225
+
+commit e2b987ede1ee90a94977f5284e33e8e8ce153802
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Thu Apr 23 00:01:05 2009 +0000
+
+    bump the numeric version; this is not the same as the alpha.
+    
+    svn:r1224
+
+commit b21be2454553b245844c9bd91979257ee38d1140
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Thu Apr 23 00:00:55 2009 +0000
+
+    Somehow free_active_base was using the socketpair, but not saying it needed it.  How did this ever work?
+    
+    svn:r1223
+
+commit 253151c54cc224aefe0c7123d0fb44fa762b0f70
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Wed Apr 22 20:28:30 2009 +0000
+
+    Detect and reject n_priorities less than 1.
+    
+    svn:r1222
+
+commit 01bda2b8fa4c34a633efedacb95b64689d6b366a
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Wed Apr 22 20:27:21 2009 +0000
+
+    Add forgotten changelog.
+    
+    svn:r1221
+
+commit 11ff74cf648f2b934a5b75d23611abbd92a88e7c
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Wed Apr 22 19:41:23 2009 +0000
+
+    Add a flag to disable checking the EVENT_* environment variables.
+    
+    svn:r1220
+
+commit 1f9c9e5137128ba63831fe77f3dac1efebb350a2
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Wed Apr 22 15:38:50 2009 +0000
+
+    Add a missing "static".
+    
+    svn:r1219
+
+commit 133a015dba3d80c99de89ac427108a783179b871
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Tue Apr 21 18:48:05 2009 +0000
+
+    Make sure the test case for mem_functions hits strdup too.
+    
+    svn:r1218
+
+commit d3fbe7fa05680ecf4c8a01c0db5277ef5d3db5f8
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Tue Apr 21 18:47:53 2009 +0000
+
+    Do not free the signal index unless it was at some point allocated
+    
+    svn:r1217
+
+commit 7f1855d064a6676a82802b481b75e1eae4aec73f
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Tue Apr 21 18:47:35 2009 +0000
+
+    Add a basic test for set_mem_functions
+    
+    svn:r1216
+
+commit ea8cc76cf8553ceff764407d49360e0b36bcd835
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Tue Apr 21 18:47:23 2009 +0000
+
+    Fix the documentation of event_pending.
+    
+    svn:r1215
+
+commit 386279d051a644b9d895a55414af648ca8d4e24b
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Tue Apr 21 18:47:02 2009 +0000
+
+    Add a test for event_pending; especially the timeout part.
+    
+    svn:r1214
+
+commit ff1f429510b2fc946e65d46b57adb6f1c96e49f2
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Tue Apr 21 18:46:43 2009 +0000
+
+    Unit tests for event_base_once.
+    
+    svn:r1213
+
+commit ea664bf29a76966ffbc613e10689e17d18245472
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Tue Apr 21 18:46:30 2009 +0000
+
+    Refactor test wrappers to divide legacy items from useful stuff.
+    
+    svn:r1212
+
+commit 122e934e92fe27e76d469dab58e50f47f0a358a9
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Tue Apr 21 18:46:11 2009 +0000
+
+    Add unit tests for version methods and feature-based backend selection
+    
+    svn:r1211
+
+commit 7cf8a7b0e04e5c853734d1648d398ccc7e7aeb3d
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Tue Apr 21 18:45:59 2009 +0000
+
+    Call the main testcases "main", not "legacy".
+    
+    svn:r1210
+
+commit 1bb8e010f99fa0bfe64f4440caf6e9ef80013fb4
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Tue Apr 21 16:17:59 2009 +0000
+
+    Format microseconds correctly in bench_httpclient
+    
+    svn:r1209
+
+commit eda27f9557eaf25d10b02c0b498be1a292491874
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Sun Apr 19 20:54:12 2009 +0000
+
+    Update copyright notices, add some missing license statements
+    
+    svn:r1208
+
+commit 0c15d6ab7d50d7d17c5dce766ec46dc72d196825
+Author: Niels Provos <provos at gmail.com>
+Date:   Sun Apr 19 13:33:52 2009 +0000
+
+    defer-internal.h was missing from dist; so our first tar ball did not even compile. ouch.
+    
+    svn:r1207
+
+commit b7907a7bfb3b44548ef47df2d0b1eef02b632036
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Sun Apr 19 01:59:25 2009 +0000
+
+    Note dns work in changelog and whatsnew
+    
+    svn:r1206
+
+commit 2d9619d78f05b475148b0efce59b6fd59382c36c
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Sun Apr 19 01:59:09 2009 +0000
+
+    Make dns callbacks run deferred
+    
+    svn:r1205
+
+commit 327165b339bbe996cfee0eea12b06e43bdc5aa63
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Sun Apr 19 01:58:54 2009 +0000
+
+    Add locks to evdns.
+    
+    svn:r1204
+
+commit ac3fc9913a9336f0aed4a178a553200b9c01801e
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Sun Apr 19 01:58:41 2009 +0000
+
+    Use new-style headers in evdns.c
+    
+    svn:r1203
+
+commit 4d8919ec442ede9e479c861f5d31476c8be946ab
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Sun Apr 19 01:58:26 2009 +0000
+
+    Do not try to double-free the nameserver in regression test
+    
+    svn:r1202
+
+commit b182ed765e3484719eab1281e1b0b440745feae4
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Sat Apr 18 18:28:18 2009 +0000
+
+    More tweaks to http stress-tester
+    
+    svn:r1201
+
+commit a835c7cf1843a4232ba7f76b4a3c2bfedd39f833
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Sat Apr 18 18:27:56 2009 +0000
+
+    fix a misindent
+    
+    svn:r1200
+
+commit f00f0c253354b319b9ef23a7208daf20b14f78f2
+Author: Niels Provos <provos at gmail.com>
+Date:   Sat Apr 18 04:34:45 2009 +0000
+
+    make doxygen happier
+    
+    svn:r1199
+
+commit e4f24219ee93f3b9dc20991b18e71230468b7b94
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Sat Apr 18 00:12:52 2009 +0000
+
+    Add a new bench_httpclient for a trivial codecon demo.
+    
+    svn:r1198
+
+commit a98a512bc1dc85a87cd00fa7682aeccaeea2859c
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Fri Apr 17 23:12:34 2009 +0000
+
+    Add a generic way for any bufferevent to make its callback deferred
+    
+    svn:r1197
+
+commit 99de18670e59616e6794c2b371ffde17f002d339
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Fri Apr 17 23:07:48 2009 +0000
+
+    Bump version to 2.0.1-alpha-dev so that nobody mistakes a svn checkout for 2.0.1-alpha.
+    
+    svn:r1196
+
+commit d047b323bd030d81cb03e286dac3a935862427c7
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Fri Apr 17 17:22:32 2009 +0000
+
+    Increment version to 2.0.1-alpha, and add a numeric version facility
+    
+    svn:r1193
+
+commit b346038724c827ed487653d35a1ed1a05d10fc67
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Fri Apr 17 06:58:18 2009 +0000
+
+    Even _more_ recent tinytest, designed to give better help output.
+    
+    svn:r1192
+
+commit 2c4c294ed8168c3d9bea99d02896235cd8d7385f
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Fri Apr 17 06:58:04 2009 +0000
+
+    note new unit test framework.
+    
+    svn:r1191
+
+commit 812800629b15c20c7d5fc15c6999c0df47136005
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Fri Apr 17 06:57:52 2009 +0000
+
+    Add the latest tinytest.  This one supports a --terse flag and a --no-fork flag, and outputs nicer.
+    
+    svn:r1190
+
+commit 91039e4d48c6306c749e44853891416d131cee6d
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Fri Apr 17 06:57:38 2009 +0000
+
+    Add reference counts to bufferevents.
+    
+    svn:r1189
+
+commit 1351e61cf671c94f665b16c7fd97bae99266a350
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Fri Apr 17 06:57:25 2009 +0000
+
+    Write a huge pile of whatsnew-2.0.txt
+    
+    svn:r1188
+
+commit 49354138425021ecc2a576efc1d51a5bcad63ad5
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Fri Apr 17 06:57:13 2009 +0000
+
+    Oh hey.  There is no support for suspend/unsuspend.
+    
+    svn:r1187
+
+commit 7fa8451d7e9310d0aac2f619ffecb3bd93dca267
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Fri Apr 17 06:56:57 2009 +0000
+
+    Add a configure flag to hardcode all of our mm functions.
+    
+    svn:r1186
+
+commit 64a37e61a12330b2e3793c63eb11bfa7025ffaf6
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Fri Apr 17 06:56:36 2009 +0000
+
+    Fix evmap indentation to be less stupid.
+    
+    svn:r1185
+
+commit 9097c95b6ea003bcf5f7a9536adb7bc7d65a682d
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Fri Apr 17 06:56:23 2009 +0000
+
+    Rename whatsnew file to reflect actual version.
+    
+    svn:r1184
+
+commit a8f6d961eb3bec921473e91c72675c1dbe853f2e
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Fri Apr 17 06:56:09 2009 +0000
+
+    Actually stop using EVBUFFER_LENGTH/DATA, and move them to buffer_compat.h
+    
+    svn:r1183
+
+commit 796ba15fc6b6e2e0e17e78ac92e00ee79d4d69c0
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Fri Apr 17 06:55:25 2009 +0000
+
+    Stop claiming that APIs we have are missing.
+    
+    svn:r1182
+
+commit 838d0a81c3343432897739d14e2af1a4e5edb7db
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Fri Apr 17 06:55:08 2009 +0000
+
+    Document many internal functions and pieces of code.
+    
+    svn:r1181
+
+commit 433e2339ca1605326f35c2d873a42f6d2abe505d
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Fri Apr 17 06:54:28 2009 +0000
+
+    Remove long copy-and-paste section full of windows api notes.
+    
+    svn:r1180
+
+commit 30648529e888dd7438d13d7a0b86625a24c6abcf
+Author: Niels Provos <provos at gmail.com>
+Date:   Fri Apr 17 01:03:07 2009 +0000
+
+    have evhttp_set_cb return an int; -1 on failure, 0 on success; this is better than returning a pointer
+    
+    svn:r1179
+
+commit edfc28caef29a203deaef4c0b808ad8caa7fa012
+Author: Niels Provos <provos at gmail.com>
+Date:   Fri Apr 17 00:24:58 2009 +0000
+
+    pkgconfig support from Ted Bullock
+    
+    svn:r1177
+
+commit 0b987813537b74835a5c3990de756d35ea9b4fbc
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Thu Apr 16 00:32:52 2009 +0000
+
+    More hacking on event_iocp.c: make it compile, and give it more of an interface.  This code is now testable.
+    
+    svn:r1176
+
+commit 09c23b6a5679b1a4a871bdd3143e615209aac05d
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Thu Apr 16 00:27:32 2009 +0000
+
+    It seems support for GetCompletionEventEx is not in my mingw.  Use the simpler interface instead, for now.
+    
+    svn:r1175
+
+commit 93d4f884aa2f42d832b4fefa0fe4d39bb0098750
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Tue Apr 14 20:11:10 2009 +0000
+
+    Make buffer iocp stuff compile happily
+    
+    svn:r1174
+
+commit fe95df15d3c5ad424c76f75596452f0229e191b2
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Mon Apr 13 18:32:24 2009 +0000
+
+    Fix typo in mm_free
+    
+    svn:r1173
+
+commit ca737ff3b5e0b5e93e3b2bd49d5434ff20e95d1e
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Mon Apr 13 18:29:31 2009 +0000
+
+    Add draft (nonworking) versions of iocp code to hack on more.
+    
+    svn:r1172
+
+commit 4e8cdc6f086bcf0b31df203451aa38741e149ac3
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Mon Apr 13 18:23:02 2009 +0000
+
+    Fix two windows compilation bugs.
+    
+    svn:r1171
+
+commit 915193e7df010fb3f280208b1e7af8c74b462686
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Mon Apr 13 03:17:19 2009 +0000
+
+    Locking support for bufferevents.
+    
+    svn:r1170
+
+commit 1becc4c4e656213d0f71938029a08a2da04dc97f
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Mon Apr 13 03:08:11 2009 +0000
+
+    Refactor new elements of bufferevent into bufferevent_private structure
+    
+    This way we don't expose more of a bufferevent than we need to.  One
+    motivation is to make it easier to automatically get deferred callbacks
+    with a bufferevent without exposing the deferred_cb structure.
+    
+    svn:r1169
+
+commit 6567ecd4c587563be843ee8803417b53d3318cbd
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Mon Apr 13 03:07:37 2009 +0000
+
+    Remove if0 code in bufferevent_struct.h
+    
+    svn:r1168
+
+commit 8dec59bb35c16aa18f90135f23cb4307817f140d
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Mon Apr 13 03:07:17 2009 +0000
+
+    Use freeze operations to prevent shenanegans on bufferevent pair evbuffers.
+    
+    svn:r1167
+
+commit 0e32ba54dcccdd40e6cf02124827a9b57d9fd97d
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Mon Apr 13 03:06:59 2009 +0000
+
+    Do not remove an empty chain that we have pinned for reading when we drain the whole buffer.
+    
+    svn:r1166
+
+commit 9f1a94ecec836aae50ce761f1a269881a5f42167
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Mon Apr 13 03:06:47 2009 +0000
+
+    add pin/unpin functions, and a deref-and-free pair.
+    
+    svn:r1165
+
+commit dcda7915acb64e67b8cb6089e2ff265e83f7ee3e
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Mon Apr 13 03:06:27 2009 +0000
+
+    Add a reference count to evbuffers.
+    
+    svn:r1164
+
+commit b01891fe1d48fc2ee7a0f39e671447195ada8177
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Mon Apr 13 03:06:05 2009 +0000
+
+    Make evbuffer_commit_space trigger callbacks.
+    
+    svn:r1163
+
+commit 829b52b6c1af2c43aa240d3d4e832b5914c34124
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Mon Apr 13 03:05:46 2009 +0000
+
+    Refactor the code that sets up iovecs for reading into its own function.  iocp needs this.
+    
+    svn:r1162
+
+commit 0b47b125cfe584f6d6c12a748208ceec3430990e
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Sun Apr 12 22:02:54 2009 +0000
+
+    Add a new EVUTIL_UPCAST macro so that I do not need to keep figuring out the right offsetof magic over and over.
+    
+    svn:r1160
+
+commit bbd6a332e17fd934d7ec9cac6b9dd2f327c60bcb
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Sun Apr 12 22:02:12 2009 +0000
+
+    reindent macros in util-internal.h
+    
+    svn:r1159
+
+commit d475fb5861a6203fc4fa3bd9e6957e2a34159a91
+Author: Niels Provos <provos at gmail.com>
+Date:   Sun Apr 12 00:38:31 2009 +0000
+
+    http benchmark: add a way to change the size of the buffer; also use add_reference
+    
+    svn:r1158
+
+commit d2794e65e018166c2ecf598f8e77c4f4d5abd2f4
+Author: Niels Provos <provos at gmail.com>
+Date:   Sat Apr 11 15:26:29 2009 +0000
+
+    document evhttp_parse_query better
+    
+    svn:r1157
+
+commit 382a1587a040f2c771484d64c631832249fff14e
+Author: Niels Provos <provos at gmail.com>
+Date:   Sat Apr 11 04:18:49 2009 +0000
+
+    previous commit changed the semantics of evhttp_decode_uri; need a test for that
+    
+    svn:r1156
+
+commit b29b875d8476d2e1603e7703ef5309cbd7cae79f
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Fri Apr 10 20:43:08 2009 +0000
+
+    Facility to make evbuffers get their callbacks deferred.
+    
+    svn:r1154
+
+commit decdacfaf8265cf9520eabcf4215501566376d84
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Fri Apr 10 20:42:53 2009 +0000
+
+    Better explanation for bufferevent_pair
+    
+    svn:r1153
+
+commit 23085c92477035507c499530d4a200bceee5d8a1
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Fri Apr 10 15:01:31 2009 +0000
+
+    Add a linked-pair abstraction to bufferevents.
+    
+    The new bufferevent_pair abstraction works like a set of buferevent_sockets
+    connected by a socketpair, except that it doesn't require a socketpair,
+    and therefore doesn't need to get the kernel involved.
+    
+    It's also a good way to make sure that deferred callbacks work.  It's a good
+    use case for deferred callbacks: before I implemented them, the recursive
+    relationship between the evbuffer callback and the read callback would
+    make the unit tests overflow the stack.
+    
+    svn:r1152
+
+commit 8161662007e4ffe8c71e3f8267733b2131d8d619
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Fri Apr 10 14:58:15 2009 +0000
+
+    A couple of tweaks for deferred callbacks.
+    
+    svn:r1151
+
+commit 4868f4d217d19d4b0f4e45c4648460c21bc5f80f
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Fri Apr 10 14:22:33 2009 +0000
+
+    Initial support for a lightweight 'deferred callbacks'.
+    
+    A 'deferred callback' is just a function that we've queued in the
+    event base.  This ability is needed for some mt stuff, and for complex
+    callback chains.  For internal use only.
+    
+    svn:r1150
+
+commit e3d82497c99d9cb3b1b23cc746b448811910e260
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Fri Apr 10 14:21:53 2009 +0000
+
+    Don't allow internal events to starve lower-priority events.
+    
+    This is exceptionally important with multithreaded stuff, where we use
+    an event to notify the base that other events have been made active.
+    If the activated events have a prioirty number greater than that of the
+    notification event, it will starve them, and that's no good.
+    
+    svn:r1149
+
+commit ce146eb1cb02a6ed29beecc16da611030d471937
+Author: Niels Provos <provos at gmail.com>
+Date:   Fri Apr 10 05:43:45 2009 +0000
+
+    Fix parsing of queries where the encoded queries contained \r, \n or +
+    
+    svn:r1148
+
+commit 6dece3e980a5f4d3f8dd40436603772d59e821dd
+Author: Niels Provos <provos at gmail.com>
+Date:   Fri Apr 10 05:22:15 2009 +0000
+
+    revert last commit; git user error
+    
+    svn:r1147
+
+commit f43f1d14c50d54630b05b2da4ea792709b358d17
+Author: Niels Provos <provos at gmail.com>
+Date:   Fri Apr 10 05:18:18 2009 +0000
+
+    initial version of query decoding patch
+    
+    svn:r1146
+
+commit f98385a4074a0d90bbec89ea57652e3baf112568
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Wed Apr 8 16:57:38 2009 +0000
+
+    add a missing "static" to timeout_process.
+    
+    svn:r1145
+
+commit 72b6ffe869f63180a55f7c3d2582dc1c37314cc5
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Wed Apr 8 03:05:42 2009 +0000
+
+    Prevent unsupported modifications to bufferevent_sock buffers.
+    
+    In particular, we don't allow adding any data to end front of inbuf
+    (we do that when we read), or removing it from the front of outbuf (we
+    drain data only when we write).
+    
+    svn:r1144
+
+commit 747331d164ea4839a89e168f9f712159509984db
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Wed Apr 8 03:04:39 2009 +0000
+
+    Add freeze support to evbuffers.
+    
+    From the documentation:
+       Prevent calls that modify an evbuffer from succeeding. A buffer may
+       frozen at the front, at the back, or at both the front and the back.
+    
+       If the front of a buffer is frozen, operations that drain data from
+       the front of the buffer, or that prepend data to the buffer, will
+       fail until it is unfrozen.   If the back a buffer is frozen, operations
+       that append data from the buffer will fail until it is unfrozen.
+    
+    We'll use this to ensure correctness on an evbuffer when we're waiting
+    for an overlapped IO call to finish.
+    
+    svn:r1143
+
+commit d9086fc00777ff841209fdc8373a1b3ae784dec6
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Wed Apr 8 03:03:59 2009 +0000
+
+    Add a new facility to "pin" the memory in an evbuffer chain.
+    
+    For overlapped IO (and possibly other stuff) we need to be able to
+    label an evbuffer_chain as "pinned", meaning that every byte in it
+    must remain at the same address as it is now until it unpinned. This
+    differs from being "immutable": it is okay to add data to the end
+    of a pinned chain, so long as existing data is not moved.
+    
+    svn:r1142
+
+commit 68d0139f19c876fae18120689f384fc36779d676
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Tue Apr 7 04:49:25 2009 +0000
+
+    Refactor the zlib and pthreads tests to appear in the regular tinytest tree structure.
+    
+    svn:r1141
+
+commit 684c022a21d00214ebd598ad1ba8cf656f4432be
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Mon Apr 6 20:38:42 2009 +0000
+
+    Avoid a double event_del() in evdns.c.
+    
+    The bug could occur when a nameserver was marked as up, but then an
+    outstanding probe sent to the nameserver failed.  Now, evdns_up() cancels
+    any outstanding probe.
+    
+    svn:r1140
+
+commit d2e9caa6fcff77d5f69e10ef3b24d5e3e65d961e
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Mon Apr 6 20:38:19 2009 +0000
+
+    Fix evdns_cancel to alert callback and free associated RAM.
+    
+    Also, we add a test to make sure evdns_cancel is working properly.
+    
+    svn:r1139
+
+commit 0f3c0983c0e1779f9d690830b3b1c2a0e1c94883
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Sun Apr 5 17:50:18 2009 +0000
+
+    Fix a double-delete on the request timeout event.  Port from Tor.
+    
+    svn:r1138
+
+commit 28255a26357afde52f2e73cd163bdde929480477
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Sun Apr 5 04:26:46 2009 +0000
+
+    Finally, get unit tests to pass with threading turned off again.
+    
+    svn:r1137
+
+commit 6a18f4b0057587a46a21503e3cc23f7e87046d52
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Sun Apr 5 04:15:01 2009 +0000
+
+    Munge the read_suspended flag before re-enabling reads on the underlying bufferevent.  This makes it so the enabled thing has some idea whether reads are supposed to be suspended or not.
+    
+    svn:r1136
+
+commit 661b5eea092920dcb316f8e1b4b0843096c707c7
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Sun Apr 5 04:10:05 2009 +0000
+
+    Actually, move EVUTIL_NIL_STMT to util-internal.h
+    
+    svn:r1135
+
+commit 60e0d59b33277755c532dae8242d120e5877bef4
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Sun Apr 5 02:44:17 2009 +0000
+
+    Add locking to evbuffers.
+    
+    svn:r1134
+
+commit d13b59ce372f167135ea1eaec1c6d7e399e9777d
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Sun Apr 5 02:44:04 2009 +0000
+
+    Fix build with thread support disabled, and make no-op macros a little more no-oppy.
+    
+    svn:r1133
+
+commit 70ee390fc9696f555d383b64541c5fe205443d72
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Sun Apr 5 02:43:55 2009 +0000
+
+    Add some more utility macros to evthread-internal.h
+    
+    svn:r1132
+
+commit f1b1bad415332f6d49a59eb40004ca1d7946c4da
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Fri Apr 3 14:27:03 2009 +0000
+
+    Make the new evbuffer callbacks use a new struct-based interface.
+    
+    The old interface would fail pretty hard when we had to batch up
+    multiple adds and drains in a single call.
+    
+    svn:r1131
+
+commit f90500a5df9af60502215d640ccbf2ba031d30e0
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Fri Apr 3 01:21:36 2009 +0000
+
+    Add a new improved search function.
+    
+    The old evbuffer_find didn't allow iterative searching, and forced us
+    to repack the buffer completely every time we searched in it.  The
+    new evbuffer_search addresses both of these.  As a side-effect, the
+    evbuffer_find implementation is now a little more efficient.
+    
+    svn:r1130
+
+commit 0afb1f7ffbdb229c3adbaae18899c6b5c4774558
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Wed Apr 1 16:08:34 2009 +0000
+
+    Glibc mkstemp requires exactly 6 Xs.
+    
+    svn:r1129
+
+commit 994e85781c2b3ccd9736d7b751c4cc02b9f7c774
+Author: Niels Provos <provos at gmail.com>
+Date:   Mon Mar 30 17:36:22 2009 +0000
+
+    correct evbuffer_drain documentation from John Khvatov
+    
+    svn:r1127
+
+commit 23655dfb87e88482a9152140ad62b0667b5fa916
+Author: Niels Provos <provos at gmail.com>
+Date:   Thu Mar 12 17:43:43 2009 +0000
+
+    include Doxyfile in tar ball; from Jeff Garzik
+    
+    svn:r1125
+
+commit 73094d595208ff45ec44d8d399b1811472156b8f
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Fri Feb 13 13:43:35 2009 +0000
+
+    Make tmpfile code compile without warnings
+    
+    svn:r1123
+
+commit 79b7799bd1a2023864e1f2124444692a289ff72b
+Author: Niels Provos <provos at gmail.com>
+Date:   Fri Feb 13 01:42:59 2009 +0000
+
+    a simple test for evbuffer_add_file
+    
+    svn:r1122
+
+commit ec35eb5520514769818fa4440d4801f803e8fb4c
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Thu Feb 12 22:19:54 2009 +0000
+
+    Make threading functions global, like the mm_ functions.  Use the libevent_pthread.la library in regress_pthread.
+    
+    svn:r1121
+
+commit d0a9c90e9300f7dc5701e9682d80c85025504573
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Wed Feb 11 17:29:17 2009 +0000
+
+    Fix some of the crazier indentation and tabbing choices in evdns.c
+    
+    svn:r1120
+
+commit 77c80b8dcf26b2cef66bce03cb25835a9a939306
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Wed Feb 11 17:24:11 2009 +0000
+
+    New bind-to option to allow DNS clients to bind to arbitrary ports for their outgoing addresses.
+    
+    svn:r1119
+
+commit acaf65c359d7e0b0c2f7f4d44c97dd187ac2ed61
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Wed Feb 11 17:23:32 2009 +0000
+
+    Make evutil_parse_sockaddr_port give a useful socket-length output.
+    
+    svn:r1118
+
+commit f2a24d6e58df45229015f6d32fcf95f87faea701
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Wed Feb 11 17:22:40 2009 +0000
+
+    Better comments for some confusing-to-me code.
+    
+    svn:r1117
+
+commit c6f4dc987c153c9a347d6275d2e8d6bebbca9371
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Wed Feb 11 17:21:48 2009 +0000
+
+    Port some evdns changes over from Tor.
+    
+    svn:r1116
+
+commit ac36f4047e8c4b7cb9fb5908741e885f11cfdb35
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Wed Feb 11 05:17:27 2009 +0000
+
+    oops; coding too quickly on nil-filter patch.  Caught by niels.
+    
+    svn:r1115
+
+commit cd731b77d7e6d0398010ff45bb80e9a3534eaccc
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Tue Feb 10 21:40:12 2009 +0000
+
+    Do not use ctypes functions in cases when we need the "net" locale.
+    
+    This patch adds a new set of EVUTIL_IS* functions to replace use of
+    the ctypes is* functions in all cases where we care about characters'
+    interpretations in net ascii rather than in the locale.  For example,
+    when we're working with DNS hostnames, we don't want to do the 0x20
+    hack on non-ascii characters, even if the host thinks they should be
+    isalpha.
+    
+    svn:r1114
+
+commit 1ed27048e4807fe2bf182e9544dc9c7b4741cbc0
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Tue Feb 10 21:39:56 2009 +0000
+
+    Stop rolling our own offsetof twice.
+    
+    svn:r1113
+
+commit f04b90e5b3a6ebf0588c6e55ebe3b25364021a28
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Tue Feb 10 19:43:19 2009 +0000
+
+    Make a couple of newer evdns functions more bulletproof.
+    
+    svn:r1112
+
+commit da49d6a3b05cd7d3c9d417f4f08cb63431635617
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Tue Feb 10 19:43:11 2009 +0000
+
+    Stop using platform inet_aton/inet_addr; they can behave strangely on certain misformed addresses.
+    
+    svn:r1111
+
+commit 01456265c3113c401579895f60c410202d633788
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Tue Feb 10 19:39:22 2009 +0000
+
+    Explode less badly in the case where we're told to prepend/append/remove a buffer to itself. Note some API/implementation deficiencies.
+    
+    svn:r1110
+
+commit 20f809ce8c4001f279a208fe3118f51cd8a1abad
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Tue Feb 10 19:39:12 2009 +0000
+
+    Make default (nil) filter use evbuffer_remove_buffer to respect the high-water mark of the target buffer.
+    
+    svn:r1109
+
+commit e7fd1034cfc6cd8a28f03178b3d8fd2bd4729d27
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Tue Feb 10 19:39:03 2009 +0000
+
+    Test some formerly untested prepend cases of evbuffer. Now evbuffer coverage is over 80 percent.
+    
+    svn:r1108
+
+commit 9e3e7b360d1ccce5fbd94e32b3a0d10a3d15ebe2
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Tue Feb 10 19:38:54 2009 +0000
+
+    More unit tests for evbuffer_add_reference to make sure that certain interleaved data patterns work; that free invokes callback; that callbacks are not invoked too early or later; etc.
+    
+    svn:r1107
+
+commit 98b7046b9761896e05f84413a4e3589730ffd117
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Tue Feb 10 19:38:43 2009 +0000
+
+    A few more comments on evbuffer-internal structures.
+    
+    svn:r1106
+
+commit edfdb698e3b2e5132bb474478b0b9daa6676e8fa
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Tue Feb 10 19:38:34 2009 +0000
+
+    Add an assertion to evbuffer_chain_align so we can't reuse it in the future.
+    
+    svn:r1105
+
+commit 71604d85be2ee20d6d4408249217f34625b9bd20
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Tue Feb 10 19:38:25 2009 +0000
+
+    Remove some needless includes
+    
+    svn:r1104
+
+commit deb2a1210bffcf9a902ae449d7d79bb29c617f4a
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Tue Feb 10 19:38:14 2009 +0000
+
+    use new evutil_make_listen_socket_reuseable() in http.c
+    
+    svn:r1103
+
+commit c7b2f8fdc955fa06999c73dbab58c07492cfb6e9
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Tue Feb 10 19:38:05 2009 +0000
+
+    New function to abstract SO_REUSEADDR.
+    
+    svn:r1102
+
+commit f9e4e0f98e4ccce8a589948cfec3a4840b3aa2bf
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Tue Feb 3 18:28:53 2009 +0000
+
+    Move bufferevent tests to regress_bufferevent.c file.
+    
+    svn:r1101
+
+commit cc049bfc306436d0d2ff94a4d47fa1c003a3c6e9
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Tue Feb 3 05:22:57 2009 +0000
+
+    Enable (and debug) WSARecv for evbuffer iovec-like reads.
+    
+    The two things we were missing: the flags parameter is not optional, and an error can actually indicate a close.
+    
+    svn:r1100
+
+commit ea11f8195fae2e559b369ad868c334947d84e055
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Mon Feb 2 22:17:32 2009 +0000
+
+    Compile http_connection_retry_test, but mark it skipped on win32.
+    
+    svn:r1099
+
+commit 722885fba96b4195479d4c335946f714beb119eb
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Mon Feb 2 21:59:53 2009 +0000
+
+    Some mingws have AF_UNIX, which may have prevented our socketpair from working at all on them.  Fix that.
+    
+    svn:r1098
+
+commit 3502a472b564e289acf89c06d0e3d6e8eaa21d2f
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Mon Feb 2 21:24:04 2009 +0000
+
+    convert new bufferevent_*.c files to event-config.h only.
+    
+    svn:r1097
+
+commit 4d92e4261b5915658fbdc5dfb0f1c7a1dd86d9db
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Mon Feb 2 19:22:27 2009 +0000
+
+    forward-port: Make evdns_resolve_reverse args const.
+    
+    svn:r1096
+
+commit ea4b8724c088934412401bdf32f52f2e2f1840b1
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Mon Feb 2 19:22:13 2009 +0000
+
+    checkpoint work on big bufferevent refactoring
+    
+    svn:r1095
+
+commit e84c765615352d094ce331aefe60c25c8c6a7702
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Sun Feb 1 05:26:47 2009 +0000
+
+    Allocate callback entries with contents 0d out.
+    
+    svn:r1093
+
+commit 2e3f0f682a94f4651143e912780ca0114be71c09
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Sun Feb 1 02:20:16 2009 +0000
+
+    Enable the edge-triggered test again
+    
+    svn:r1092
+
+commit 8d3a10f8f1a820ec6ebe2780dc2b676926dcfeb2
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Sun Feb 1 01:43:58 2009 +0000
+
+    Support temporarily suspending an evbuffer callback.  This is different from disabling the callback, since we want to process changes, but not just yet.
+    
+    svn:r1091
+
+commit e3e1153109c250bdd308e3bb2370f0d93648d9d7
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Sun Feb 1 01:07:42 2009 +0000
+
+    Unit tests for evbuffer callback manipulation
+    
+    svn:r1090
+
+commit 2e50658d8d99ca071872eeca15b38ed5a0fa642e
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Sun Feb 1 01:07:33 2009 +0000
+
+    Fix a typo in buffer.h
+    
+    svn:r1089
+
+commit ca37fef95164de326df95a626a398f13b3ca41c7
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Sun Feb 1 01:07:22 2009 +0000
+
+    Change evbuffer callbacks to use tinytest natively and never assert.
+    
+    svn:r1088
+
+commit a30c9eb1ac05cbf71130e046959996025f18a939
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Sun Feb 1 01:07:12 2009 +0000
+
+    Move evbuffer tests into their own file.
+    
+    svn:r1087
+
+commit ff7a5e1272dcdca3af5f8b74121da01a07bad597
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Sat Jan 31 19:32:20 2009 +0000
+
+    slightly more coverage for evutil.
+    
+    svn:r1086
+
+commit 12e8db5b23160e2d77db585230113992ca2001c1
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Sat Jan 31 18:36:47 2009 +0000
+
+    Convert evtag test.
+    
+    svn:r1085
+
+commit 5831d11a4251eea6e63eb1bb5a63979c10600997
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Sat Jan 31 18:36:37 2009 +0000
+
+    Move rpc_test to regress_rpc.
+    
+    svn:r1084
+
+commit fa6ae16992c95632afea1b9c24669a48f2688f3b
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Sat Jan 31 18:36:24 2009 +0000
+
+    Convert RPC suite.  There are still some places it can exit(1), but those always run forked, so no big deal.
+    
+    svn:r1083
+
+commit d9628ef4ffcaa2adf0298547894707ba7616ac8a
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Sat Jan 31 18:36:08 2009 +0000
+
+    Add missing initializers
+    
+    svn:r1082
+
+commit eac75f91e4839ba289dd599ce36da5cf2a5303ef
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Sat Jan 31 07:32:14 2009 +0000
+
+    Port DNS tests.
+    
+    svn:r1081
+
+commit e6ba208ba30fd22f52508a865f448c24ffaaed96
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Sat Jan 31 07:32:00 2009 +0000
+
+    Tinytest update: mostly just to allow test skipping.
+    
+    svn:r1080
+
+commit 52eb4951302554dd696d6a0120ad5d3f6cffb7bb
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Sat Jan 31 07:31:47 2009 +0000
+
+    Build with the -fno-strict-aliasing flag on GCC.
+    
+    You do not want to know about the 2 hours I just spent tracking down
+    an evdns bug that only affected me on some platforms to the way we
+    were using sockaddr* and sockaddr_in*.  Suffice it to say that I do
+    not think this is the only C99-aliasing-dubiousness in our code, nor
+    that I am smart enough to keep my code correct with the GCC's strict
+    aliasing optimizations in place.
+    
+    svn:r1079
+
+commit 2546ea665e9ba4c4215f4b62a87c664d7bda6057
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Sat Jan 31 05:45:26 2009 +0000
+
+    Do not attempt to pass a va_args to regular snprintf.  Hilarity will ensue.  Fortunately, 1.4 does not have this bug.
+    
+    svn:r1078
+
+commit 4ec690d35ef82e98799497a89cb8b720153925e8
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Sat Jan 31 05:45:16 2009 +0000
+
+    Rename a couple of http tests so they all end with _test.  This lets us simplify the naming.
+    
+    svn:r1077
+
+commit 153093ecc346b51fd3df20d8480a17414aeda1a6
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Fri Jan 30 17:44:13 2009 +0000
+
+    Port the HTTP unit tests.  Most are still legacy (since they use test_ok so much), but at least they no longer exit(1) on failure
+    
+    svn:r1076
+
+commit 241690b230301fa9388cd84b33030938df7b1853
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Fri Jan 30 17:43:59 2009 +0000
+
+    Move util tests to regress_util.c
+    
+    svn:r1075
+
+commit 4e9470b481f2ad2e1ddb9967de8e5599d9b5fe6d
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Fri Jan 30 17:43:48 2009 +0000
+
+    Convert test_evutil_strtoll to new framework.
+    
+    svn:r1074
+
+commit a8203b3490b3ab6ee17460ddd32c0efb355fee02
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Thu Jan 29 23:19:57 2009 +0000
+
+    Refactor unit tests using my spiffy new "tinytest" framework.
+    
+    The big win here is that we can get process-level isolation.
+    
+    This has been tested to work okay on at least Linux and Win32.  Only
+    the tests in regress.c have been converted wrapped in the new wrapper
+    functions; the others are still on the old system.
+    
+    svn:r1073
+
+commit 39c8dbe073bf13c9c08d8901465a0d7641119126
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Thu Jan 29 20:07:59 2009 +0000
+
+    Make ht-internal.h get distributed.
+    
+    svn:r1072
+
+commit cc7a53c152b4ef2b32d44545e281be843baea5d1
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Thu Jan 29 18:15:36 2009 +0000
+
+    fix signed/unsigned warning in unit tests.  can we just use "char*" on all new APIs?  this void/unsigned char*/char* business is awful.
+    
+    svn:r1071
+
+commit 7dd362b15871096430e078a6b94406563634ebe7
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Thu Jan 29 15:09:24 2009 +0000
+
+    Have util-internal.h define socklen_t if we need it, and include it appropriately.  This fixes win32 compilation.
+    
+    svn:r1070
+
+commit a0cae310d05d99a1f235a1814ba5ef7893959ec8
+Author: Niels Provos <provos at gmail.com>
+Date:   Thu Jan 29 03:22:47 2009 +0000
+
+    make it so that evbuffer_add_file where we read the complete contents of the file can fail without side effects
+    
+    svn:r1069
+
+commit 66b2a7ffb72e68a059c7479362bfe4863e2331df
+Author: Niels Provos <provos at gmail.com>
+Date:   Thu Jan 29 03:20:40 2009 +0000
+
+    test evbuffer_add_reference
+    
+    svn:r1068
+
+commit f13bede758cd419c407a9124a13b7955f8ea0068
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Wed Jan 28 20:31:19 2009 +0000
+
+    Fix an unlikely degenerate case of evutil_vsnprintf
+    
+    svn:r1067
+
+commit e3e696c822917fcf909e71b7822130c73f442e56
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Wed Jan 28 20:24:12 2009 +0000
+
+    Use size_t for name length in DNS requests.  Not that it matters much.
+    
+    svn:r1066
+
+commit b85b710cf5e693294e0d68ce682ecb1c5e357383
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Tue Jan 27 22:34:36 2009 +0000
+
+    Update copyright statements to reflect the facts that:
+    a) this is 2009
+    b) niels and nick have been comaintainers for a while
+    c) saying "all rights reserved" when you then go on to explicitly
+       disclaim some rights is sheer cargo-cultism.
+    
+    svn:r1065
+
+commit 8889a7703999d3ce5902b5b8e239107579c75ca0
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Tue Jan 27 22:30:46 2009 +0000
+
+    Replace all use of config.h with event-config.h.
+    
+    svn:r1064
+
+commit 9993137cbbd9508dbf28e431e0f84d809c516128
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Tue Jan 27 21:10:31 2009 +0000
+
+    Remove all trailing whitespace in all the source files.
+    
+    svn:r1063
+
+commit 3065389973fcfb724981376c31a51b11b679abc0
+Author: Niels Provos <provos at gmail.com>
+Date:   Tue Jan 27 16:35:28 2009 +0000
+
+    make it so that test_persistent_timeout can call loopexit only once; reported by Alexander Drozdov
+    
+    svn:r1062
+
+commit 1c927b7d2fad4b2f1d96cd2d91e116acf53f5123
+Author: Niels Provos <provos at gmail.com>
+Date:   Tue Jan 27 16:29:48 2009 +0000
+
+    fix memory leak whens etting up priorities; reported by Alexander Drozdov
+    
+    svn:r1061
+
+commit 88f2b7a00fd60bbf353b4a33cb2374bc491e1ee7
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Tue Jan 27 13:37:09 2009 +0000
+
+    Fix some warnings on linux gcc with --enable-gcc-warnings
+    
+    svn:r1060
+
+commit 1757cf717f487c3c78b7104b52738ff804f69c42
+Author: Niels Provos <provos at gmail.com>
+Date:   Tue Jan 27 06:21:12 2009 +0000
+
+    use %zu for off_t
+    
+    svn:r1059
+
+commit 8b5bd77415fb6634fadf08357676926fecf5f032
+Author: Niels Provos <provos at gmail.com>
+Date:   Tue Jan 27 06:18:45 2009 +0000
+
+    make it compile on linux
+    
+    svn:r1058
+
+commit fdf694933ceafbf379e038597e56eb2498dea1e0
+Author: Niels Provos <provos at gmail.com>
+Date:   Tue Jan 27 06:05:38 2009 +0000
+
+    sendfile/mmap and memory reference implementation for evbuffers
+    
+    svn:r1057
+
+commit b93e50545231ffb85254fa2d6c0fe50d0de39d8e
+Author: Niels Provos <provos at gmail.com>
+Date:   Tue Jan 27 05:33:39 2009 +0000
+
+    second argument to evbuffer_pullup should be ssize_t
+    
+    svn:r1056
+
+commit 4f02a9630d7a982254d20696c306ac2e1017e3d1
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Mon Jan 26 18:04:18 2009 +0000
+
+    More docs and example code in whatsnew
+    
+    svn:r1055
+
+commit c0712b16085b7f4e3c8f9f2ae5b951ce976a3476
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Mon Jan 26 17:29:45 2009 +0000
+
+    Initial documentation for evdns server functions.  Also deprecate the one that didn't take an event_base.
+    
+    svn:r1054
+
+commit 2b1d535e0d41ea12a8f61f026e366dcfc0b4c53f
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Mon Jan 26 17:29:27 2009 +0000
+
+    Accept evutil_socket_t for evdns_server_ports.
+    
+    svn:r1053
+
+commit bdbd5e0e2fda62f2f0d277867319d470d096b096
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Mon Jan 26 17:09:37 2009 +0000
+
+    For every deprecated function, explain why it is deprecated and what you should call instead.
+    
+    svn:r1052
+
+commit 52a75f18e17cde5f7e4f705ae9ef32ee008b6c6f
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Mon Jan 26 17:09:22 2009 +0000
+
+    Documentation (or more accurate documentation) for a few more functions.
+    
+    svn:r1051
+
+commit dddd58ba1375a9e78c01771299c820c22f04795e
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Mon Jan 26 17:09:09 2009 +0000
+
+    Reformat util.h slightly so that it looks ok with 8-char tabs.
+    
+    svn:r1050
+
+commit 0e779906f9a14f7c9f3bd818be5b9ff082b32553
+Author: Niels Provos <provos at gmail.com>
+Date:   Mon Jan 26 06:13:24 2009 +0000
+
+    fix memleak in evmap_signal_clear; from Alexander Drozdov
+    
+    svn:r1049
+
+commit 765ff1b9def2ec0423bee8617763d7b182ca4fa2
+Author: Niels Provos <provos at gmail.com>
+Date:   Sat Jan 24 17:38:27 2009 +0000
+
+    really install the buffer_compat.h file
+    
+    svn:r1048
+
+commit 81dd04a726c8fa3a95a8780b06648187b15b1b2d
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Fri Jan 23 18:04:34 2009 +0000
+
+    Add a "flags" field to evbuffer callbacks.
+    
+    For now, there is just one: enabled.  This lets us avoid lots of
+    mallocs/frees/tailq-manipulations just to turn a callback on and off.
+    The revised bufferevent code wants this.
+    
+    svn:r1047
+
+commit de7f7a84a32045a706559ae37ccaa325fe9b2720
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Fri Jan 23 18:03:45 2009 +0000
+
+    Remove in_callbacks check: allow full recursion in evbuffer callbacks.  If you get yourself in an infinite loop, that's not our fault.  Note this in the docs.  Also reindent some docs now that my tabs match Niels's.
+    
+    svn:r1046
+
+commit b1495865aa2d876bf1545f5ae399775f70e7e155
+Author: Niels Provos <provos at gmail.com>
+Date:   Fri Jan 23 02:04:41 2009 +0000
+
+    also install the buffer_compat.h header file
+    
+    svn:r1044
+
+commit ec2f4cbc0961d562f39639a1ea3eb4044fc402c7
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Fri Jan 23 01:35:57 2009 +0000
+
+    Move obsolete evbuffer function into include/event2/buffer_compat.h
+    
+    svn:r1043
+
+commit c735f2b45aaca4d9c118245e407a00e6b8f4d234
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Fri Jan 23 01:11:13 2009 +0000
+
+    Code to allow multiple callbacks per evbuffer.
+    
+    svn:r1042
+
+commit 86d526a0648a884dd966b52142c620f2f5180c28
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Fri Jan 23 01:04:10 2009 +0000
+
+    Start writing more of whatsnew-xx.txt, which will become whatsnew-2.0.txt
+    
+    svn:r1041
+
+commit f20902a2902b85f5d63d785a32b00fdbbd64a52d
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Thu Jan 22 17:56:15 2009 +0000
+
+    Remove evperiodic_assign and its related parts: its functionality is subsumed by EV_PERSIST timeouts.
+    
+    svn:r1040
+
+commit 5e6f6dcd1b9d50b39d2878619c5b4c0d6d34591f
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Thu Jan 22 17:48:55 2009 +0000
+
+    Use EV_PERSIST on notify event for efficiency and simplicity.
+    
+    svn:r1039
+
+commit 20c20466fb55647823a4db865f8cb042e87788e0
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Thu Jan 22 17:48:27 2009 +0000
+
+    Use EV_PERSIST in bufferevents for efficiency and simplicity.
+    
+    svn:r1038
+
+commit dc1526e0da9c13eba2138c8a551d2535ede385d8
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Thu Jan 22 17:48:16 2009 +0000
+
+    Fix warnings on compile: make static functions static.
+    
+    svn:r1037
+
+commit fe72c885d938881a876affe1c930aedb64a11306
+Author: Niels Provos <provos at gmail.com>
+Date:   Thu Jan 22 06:23:14 2009 +0000
+
+    fix signal processing for non-kqueue backends; when a signal callback delivers a signal; from Alexander Drozdov
+    
+    svn:r1035
+
+commit a077fb8c099e90523d1365bbd9f2db8328a46ca1
+Author: Niels Provos <provos at gmail.com>
+Date:   Thu Jan 22 02:47:35 2009 +0000
+
+    rename sys/signal.h to signal.h; configure m4 macro dir; this assist with compilation on Haiku
+    
+    svn:r1033
+
+commit 56ea4687a5e6cf131c825c99a8f0ffe04afa4c2d
+Author: Niels Provos <provos at gmail.com>
+Date:   Thu Jan 22 02:33:38 2009 +0000
+
+    Change the semantics of timeouts in conjunction with EV_PERSIST; timeouts in that case will now repeat until deleted.
+    
+    svn:r1032
+
+commit 309fc7c4ad34f7e50245c305a776a5e04b4a0555
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Wed Jan 21 07:51:25 2009 +0000
+
+    New functions to provide sane threading callbacks with pthreads and win32 threading implementations.
+    
+    svn:r1031
+
+commit 70405e3c7a184a11be506e2e4fd4774e867f978b
+Author: Niels Provos <provos at gmail.com>
+Date:   Wed Jan 21 07:18:31 2009 +0000
+
+    fix freebsd compile; from Alexander Drozdov
+    
+    svn:r1030
+
+commit fa1c9a6d096b0be115db99095912750a4e12dca9
+Author: Niels Provos <provos at gmail.com>
+Date:   Mon Jan 19 23:52:21 2009 +0000
+
+    rename the backend from "event ports" to "evport" - this will allow environment based disabling to work
+    
+    svn:r1027
+
+commit ed7e0e77ed573d9f5b4123d7874de3efb02763d1
+Author: Niels Provos <provos at gmail.com>
+Date:   Mon Jan 19 23:40:11 2009 +0000
+
+    bug fix and potentital race condition from Alexander Drozdov
+    
+    svn:r1025
+
+commit f6eb1f816c77f2b3e209690551b9c2f7d7d2e454
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Mon Jan 19 21:53:03 2009 +0000
+
+    Change evbuffer_read implementation to split data across chunks, and use readv when available.  This should make us use less space.
+    
+    svn:r1024
+
+commit a5901991c74590d81e35b5b3f44877f00b6e3397
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Mon Jan 19 20:37:24 2009 +0000
+
+    Use eventfd for main-thread notification where available (i.e., linux).
+    
+    svn:r1023
+
+commit c3e9fcf672b87ba9314899cfcc9f60400cfb73fb
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Mon Jan 19 20:22:47 2009 +0000
+
+    Change the semantics of notify so we can implement it with eventfd or (given a different backend for win32) a windows Event.
+    
+    svn:r1022
+
+commit 34d2fd063472d088fea1d7730123cdbda93cc0db
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Mon Jan 19 19:46:03 2009 +0000
+
+    Debug and enable pipe notification
+    
+    svn:r1021
+
+commit ddf3ee976d60e5d17f73cdd441cbc260b3f72f6a
+Author: Niels Provos <provos at gmail.com>
+Date:   Mon Jan 19 07:00:51 2009 +0000
+
+    make event ports compile again
+    
+    svn:r1020
+
+commit ec4cfa33c91b9df4dc1621315999cba60cc839e2
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Mon Jan 19 01:34:14 2009 +0000
+
+    Make event_break threadsafe; make notify-thread mechanism a little more generic; let it use pipes where they work.
+    
+    svn:r1019
+
+commit 2b7febc80a447b4ee4a2a2dc7339b6226be9bb1a
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Sun Jan 18 01:33:18 2009 +0000
+
+    Fix osx compile
+    
+    svn:r1018
+
+commit fed2fd094402790a329ff769286bdf54fb470210
+Author: Niels Provos <provos at gmail.com>
+Date:   Sat Jan 17 07:50:34 2009 +0000
+
+    try to make devpoll work again; i dont have access to a machine
+    
+    svn:r1017
+
+commit 5e796901c11fc7b52b143aa3dd24d6260f64f553
+Author: Niels Provos <provos at gmail.com>
+Date:   Fri Jan 16 00:25:54 2009 +0000
+
+    clean up buffered data on reset; reported by Brian O'Kelley
+    
+    svn:r1015
+
+commit 83d2a34c99ba73a23a7031d525f6278d1859dc8a
+Author: Niels Provos <provos at gmail.com>
+Date:   Thu Jan 15 06:15:24 2009 +0000
+
+    rename time-test in comment to signal-test
+    
+    svn:r1013
+
+commit 8278c9be548f8357f124f4691f0b7cc12703ea3f
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Wed Jan 14 22:17:46 2009 +0000
+
+    Note the one restriction on what you can do with the evbuffers of a bufferevent.
+    
+    svn:r1011
+
+commit 840318196b3bdf500ac3d3002feb249f20f900ef
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Wed Jan 14 22:17:31 2009 +0000
+
+    Make some evbuffer functions const
+    
+    svn:r1010
+
+commit 89fe316779d0323a7ef5786f3aea81892ee82122
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Wed Jan 14 21:13:58 2009 +0000
+
+    Update win32 code to put indices in evmap.
+    
+    svn:r1009
+
+commit 554e14934e46f11fcec09d5c69bff5d231db2ea9
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Wed Jan 14 20:52:32 2009 +0000
+
+    Move per-fd info from eventops into evmap.  Not done for win32.c yet.
+    
+    svn:r1008
+
+commit 3552ac1eb3af86fcc0b6d8015b4ba9c72ed0f54a
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Wed Jan 14 19:39:17 2009 +0000
+
+    Do not allow chain length to expand indefinitely.
+    
+    svn:r1007
+
+commit ad7f1b4ae99d0d0652087ab23abd2717745f2d27
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Wed Jan 14 18:45:42 2009 +0000
+
+    The element size for our linear evmaps is a pointer, not the whole struct.
+    
+    svn:r1006
+
+commit 6bb2f84216ef82184b3502ee77b98aa8b608805a
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Wed Jan 14 18:38:03 2009 +0000
+
+    Add initializer functions for evmap types.
+    
+    svn:r1005
+
+commit 6d3ed0657d1be559cc3376ed3f8473ddfa2aadb6
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Wed Jan 14 14:58:48 2009 +0000
+
+    Simplify evbuffer_write logic: combine nearly all of WSASend and writev cases.
+    
+    svn:r1004
+
+commit bab8f2e1827d47f622806404bdc765515f81e8c2
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Tue Jan 13 22:02:32 2009 +0000
+
+    Fix compilation on win32 WSASend evbuffer_write() code.
+    Still not enabled until I make sure that the unit tests test this.  They _do_ pass.
+    
+    svn:r1003
+
+commit 9935d5b01e4345829a7ea5c06e86d45156ea8944
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Tue Jan 13 21:39:32 2009 +0000
+
+    Fix win32 compilation.  Surprisingly, unit tests pass too.
+    
+    svn:r1002
+
+commit 574d320217b07023ac2e50a16f7999f04aceffae
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Tue Jan 13 20:50:34 2009 +0000
+
+    There is no WSAEAGAIN.  There is only Zuul^WSAEWOULDBLOCK.
+    
+    svn:r1001
+
+commit 169321c9e6aebee26c1fe3e6deaf51ce00d7308e
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Tue Jan 13 20:26:37 2009 +0000
+
+    Rename four internal headers to follow the -internal.h convention.
+    
+    svn:r1000
+
+commit 822ca048add2b10f73054914fd0ff7c2bf241661
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Tue Jan 13 19:34:50 2009 +0000
+
+    Untested (and compiled-out) evbuffer_write backend to use WSASend on win32 where we use writev on unix.
+    
+    svn:r998
+
+commit fbd5e820d7c02f16d43568e281cd9ffde9f834a4
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Tue Jan 13 19:20:22 2009 +0000
+
+    Stop linking backends into libevent_extra.la
+    
+    svn:r997
+
+commit 554909420dc1db14c0b1764f1be5ca5dd5459840
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Tue Jan 13 19:20:14 2009 +0000
+
+    Move internal headers into noinst_HEADERS automake target where they belong.
+    
+    svn:r996
+
+commit 81ab45add511fd02ac08924841ec811186b3e4bb
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Tue Jan 13 19:20:04 2009 +0000
+
+    Use new EVUTIL_ERR_*_RETRIABLE macros when we're testing an errno for blocking.
+    Previously, we used inconsistent and incompletely ported ifdefs.
+    (We don't use these macros in platform-specific files like evpoll.c, since
+    they don't need to work on win32.)
+    
+    svn:r995
+
+commit 5ebd23ad7472ce00dc8e5e2467df7ec02ef8584c
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Tue Jan 13 19:19:50 2009 +0000
+
+    New EVUTIL_ERR_*_RETRIABLE macros to tell if an errno blocked or failed.
+    
+    svn:r994
+
+commit 99db0e7f72ecbc81de2d73da98e3f9be66db1e68
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Mon Jan 12 20:42:19 2009 +0000
+
+    Add a new evbuffer_write_atmost() functino to write no more than a given number of bytes to an fd.
+    
+    svn:r993
+
+commit f446f1493a81fbbc2c3c22d4acfd125e70093e78
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Mon Jan 12 20:42:06 2009 +0000
+
+    Small cleanups to buffer.h documentation.
+    
+    svn:r992
+
+commit 1df57d2b97311ecb59c86873e9cccf2b9e0be401
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Mon Jan 12 20:36:24 2009 +0000
+
+    Move strlcpy.c into libevent-core, so that code built against libevent-core on platforms without strlcpy can link.
+    
+    svn:r991
+
+commit 8a72441077548fc327163ed19ccb5658d4e7ca7e
+Author: Niels Provos <provos at gmail.com>
+Date:   Mon Jan 12 05:22:29 2009 +0000
+
+    make it compile with USE_DEBUG again; reported by Alexander Drozdov
+    
+    svn:r990
+
+commit 91e3ead85eb81c3f8aabb8a193e3cc952755d87a
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Sat Jan 10 14:37:45 2009 +0000
+
+    Improve the hashsocket function.
+    
+    svn:r989
+
+commit 55bcd7d2f0cae7f60dedf9b48265bb155bec157f
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Fri Jan 9 13:42:21 2009 +0000
+
+    On win32, use a hashtable to map sockets to events rather  than using an array.
+    
+    svn:r988
+
+commit 8f5777e692e7e85dc711174da6d129bc43a836d4
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Fri Jan 9 05:01:48 2009 +0000
+
+    Document internal evmap functions, add a couple of asserts, and fix up some things that did not need to be void* any more
+    
+    svn:r987
+
+commit 980bcd68f7e49f8c0a9042f64d62e624f8c5f76b
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Fri Jan 2 21:21:58 2009 +0000
+
+    Work better with platforms that do not have ipv6 structures, or that do not have sin_len fields, etc.
+    
+    svn:r986
+
+commit 135591aeab4ac58f91f2109aa4cafdeeb0ce040b
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Fri Jan 2 20:46:35 2009 +0000
+
+    Change the type of nameserver.address from u32 to sockaddr_storage, so that we can handle nameservers at IPv6 addresses.
+    
+    svn:r985
+
+commit cfbd1680080cc917f0d15d2a840dd05d9f462217
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Fri Jan 2 20:46:26 2009 +0000
+
+    Add another function to parse the common address:port combination formats into a sockaddr.
+    
+    svn:r984
+
+commit 0d9d5cfe22c89391a1ee25e2104cbf1fd6e1fcfb
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Fri Jan 2 20:46:12 2009 +0000
+
+    New functions in evutil to clone inet_pton and inet_ntop, with tests.
+    Adapted from Tor code.
+    
+    svn:r983
+
+commit 172b657567777078296442f5363b9a1e764886b9
+Author: Niels Provos <provos at gmail.com>
+Date:   Fri Jan 2 18:18:30 2009 +0000
+
+    malloc fd only if it is needed.
+    
+    svn:r982
+
+commit f37d1685df84cd7da52a21f4e4469faa641d1aaa
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Fri Jan 2 04:56:56 2009 +0000
+
+    Include http_compat.h in http.c so we do not get warnings about functions with no prototypes.
+    
+    svn:r981
+
+commit 87be18daa192bdb2e75e56f1ef5226a0df6b2f73
+Author: Niels Provos <provos at gmail.com>
+Date:   Thu Dec 25 16:25:37 2008 +0000
+
+    implement evdns_cancel_request; test one of the new evdns_base functions
+    
+    svn:r980
+
+commit 49f4c0ef883e822b98b03ca422fd69590697380b
+Author: Niels Provos <provos at gmail.com>
+Date:   Thu Dec 25 16:21:13 2008 +0000
+
+    generate documentation for move dns header files
+    
+    svn:r979
+
+commit eed234519c5abee420a255aa7fccfd779ee3a08f
+Author: Niels Provos <provos at gmail.com>
+Date:   Thu Dec 25 16:20:45 2008 +0000
+
+    forgot to re-enable dns tests
+    
+    svn:r978
+
+commit 30cba6d0b3a7d3de4bfdc3a939729b73d36a2a49
+Author: Niels Provos <provos at gmail.com>
+Date:   Thu Dec 25 09:22:13 2008 +0000
+
+    we cannot realloc memory used by TAILQ; instead malloc each slot individually
+    
+    svn:r977
+
+commit 17bfc07e940f981168b136ce08570dbd0a99bff1
+Author: Niels Provos <provos at gmail.com>
+Date:   Tue Dec 23 22:38:01 2008 +0000
+
+    remove http_compat include
+    
+    svn:r976
+
+commit b55ca7de1c58043fd04d1fcc934870aa1e7b5cf6
+Author: Niels Provos <provos at gmail.com>
+Date:   Tue Dec 23 22:31:27 2008 +0000
+
+    reduce void *age a little bit
+    
+    svn:r975
+
+commit b225e756ae6a50578cacfcf7bfd1a51c1362834b
+Author: Niels Provos <provos at gmail.com>
+Date:   Tue Dec 23 22:24:32 2008 +0000
+
+    remove unused variable
+    
+    svn:r974
+
+commit d776f8462be6c68ac4cd7bf3903710aad5dd842b
+Author: Niels Provos <provos at gmail.com>
+Date:   Tue Dec 23 22:23:37 2008 +0000
+
+    deprecate the usage of signal_{add,del,set} and name it evsignal_{add,del,set} instead; move the old definitions to compat
+    
+    svn:r973
+
+commit 02b2b4d1bee7dfd5d75d0a376ce64fc7298e350f
+Author: Niels Provos <provos at gmail.com>
+Date:   Tue Dec 23 16:37:01 2008 +0000
+
+    Restructure the event backends so that they do not need to keep track of events themselves, as a side effect multiple events can use the same fd or signal.
+    
+    svn:r972
+
+commit 97cebce8fdc400401093f669a56e46bef518386e
+Author: Niels Provos <provos at gmail.com>
+Date:   Tue Dec 23 14:53:55 2008 +0000
+
+    the switch of bufferevents for http connections did not handle the EVBUFFER_ERROR case correctly
+    
+    svn:r971
+
+commit ebcf5efcfe208ee4381ac6d5ed6783b77fbd6056
+Author: Niels Provos <provos at gmail.com>
+Date:   Fri Dec 19 22:42:51 2008 +0000
+
+    fix memory leaks in the regression tools; add another close detection test that validates that there are no dangling connections on the server
+    
+    svn:r969
+
+commit f1728d94eb0fe93fc503ef9cda42a8d78e223f96
+Author: Niels Provos <provos at gmail.com>
+Date:   Fri Dec 19 22:41:07 2008 +0000
+
+    fix the close detection problem correctly by not running close detection on the server
+    
+    svn:r968
+
+commit f700566cb947f7229be3909e3c926b096ca826a8
+Author: Niels Provos <provos at gmail.com>
+Date:   Fri Dec 19 21:31:43 2008 +0000
+
+    Make the http connection close detection work properly with bufferevents and fix a potential memory leak associated with it
+    
+    svn:r963
+
+commit 8c594168785feb1b899350b03538ed24756d3be6
+Author: Niels Provos <provos at gmail.com>
+Date:   Fri Dec 19 21:03:42 2008 +0000
+
+    memory leak: forgot to free paused rpcs in server
+    
+    svn:r962
+
+commit 77867244a9bb7af857a198cfc2ed08227895e88f
+Author: Niels Provos <provos at gmail.com>
+Date:   Fri Dec 19 21:02:36 2008 +0000
+
+    memory leak: forgot to free the configuration object
+    
+    svn:r961
+
+commit 808f00e1a1351b1b5a14276c928ecd778a9d3e2d
+Author: Niels Provos <provos at gmail.com>
+Date:   Sat Dec 13 06:11:12 2008 +0000
+
+    constify structs; from Andrei Nigmatulin
+    
+    svn:r959
+
+commit dd73168556961d690e355c9eb7c086f633543461
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Wed Dec 3 20:09:13 2008 +0000
+
+    Implement increased DSN-poisoning resistance via the 0x20 hack.
+    
+    svn:r958
+
+commit 1eeb96aa8863d6ed3e8eb9080a618df48b688baa
+Author: Niels Provos <provos at gmail.com>
+Date:   Sat Nov 29 01:12:41 2008 +0000
+
+    move cirular queue removal into its own function
+    
+    svn:r957
+
+commit cdf9453af44dceed3274d33a279d5181b3a81237
+Author: Niels Provos <provos at gmail.com>
+Date:   Fri Nov 28 20:55:11 2008 +0000
+
+    install the header files, too
+    
+    svn:r956
+
+commit 1c765b78fb0c633f377b2fee8fee6d4bb07965e4
+Author: Niels Provos <provos at gmail.com>
+Date:   Fri Nov 28 20:11:24 2008 +0000
+
+    move dns header files into the include directory; move old functions into compat and structs into a struct header file
+    
+    svn:r955
+
+commit 4fa4a56253fda85d5451eb66bcddc1bf960756cb
+Author: Niels Provos <provos at gmail.com>
+Date:   Thu Nov 27 19:57:48 2008 +0000
+
+    fix a typo in setting the global event base; reported by lance
+    
+    svn:r953
+
+commit ffb3966ec2a9975a103d78b0d30a318737b1e22a
+Author: Niels Provos <provos at gmail.com>
+Date:   Thu Nov 27 19:34:07 2008 +0000
+
+    minor compilation and regresson fixes; from Frank Denis
+    
+    svn:r952
+
+commit 4fe25cefb59bdda688acf0ba54aacf640374e4d2
+Author: Niels Provos <provos at gmail.com>
+Date:   Thu Nov 27 19:27:33 2008 +0000
+
+    Clear the timer cache when leaving the event loop; reported by Robin Haberkorn
+    
+    svn:r950
+
+commit 5792d42f0ff130380d036ff427d8408ecd61b6f2
+Author: Niels Provos <provos at gmail.com>
+Date:   Sun Nov 16 23:22:14 2008 +0000
+
+    Allow setting of local port for evhttp connections to support millions of connections from a single system; from Richard Jones
+    
+    svn:r948
+
+commit 50202d757d719316f5d6d92d1fb6941fcef66b72
+Author: Niels Provos <provos at gmail.com>
+Date:   Sat Nov 15 05:27:23 2008 +0000
+
+    only bind the socket on connect when a local address has been provided; reported by Ajejo Sanchez
+    
+    svn:r946
+
+commit 31cfe52662fe14c24f0b6794fe2e16cc3aac0696
+Author: Niels Provos <provos at gmail.com>
+Date:   Thu Oct 30 19:38:31 2008 +0000
+
+    clear the timer cache on entering event loop; reported by Victor Chang
+    
+    svn:r944
+
+commit c97ee898dca9b1d18cddb0dcc0cf2c9bb3346065
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Fri Sep 26 13:36:15 2008 +0000
+
+    Fix: do not crash when asked to configure an impossible event_base
+    
+    svn:r942
+
+commit b3d6a569e7a0bee12718b1ff0da6277d470cdf76
+Author: Niels Provos <provos at gmail.com>
+Date:   Sun Sep 7 23:24:54 2008 +0000
+
+    do not remove accept-encoding header in make request
+    
+    svn:r938
+
+commit fded0a8783f3a8d688f60f176b87598164aeb650
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Fri Sep 5 16:47:04 2008 +0000
+
+    Fix compilation of recent error code with win32.
+    
+    svn:r937
+
+commit de069b99774221193530f9eaa43ebfa417be941f
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Fri Sep 5 16:29:56 2008 +0000
+
+    On win32, errno is not the last socket error.  Worse, WSAGetLastError() is not the last socket error sometimes (i.e., EWOULDBLOCK).  Also, strerror() does not handle winsock errors. Therefore, event_err() and event_warn() are completely wrong for windows socket errors.  Fix that.
+    
+    svn:r936
+
+commit a710d817ad67dccbf75526738d658b881126d6d1
+Author: Niels Provos <provos at gmail.com>
+Date:   Sat Aug 30 23:19:49 2008 +0000
+
+    Match the query in DNS replies to the query in the request; from Vsevolod Stakhov
+    
+    svn:r930
+
+commit c968eb3e01ff80b9959952b858d152d62a3ac9b6
+Author: Niels Provos <provos at gmail.com>
+Date:   Tue Aug 19 11:26:47 2008 +0000
+
+    Fix a bug where headers arriving in multiple packets were not parsed; fix from Jiang Hong; test by me.
+    
+    svn:r928
+
+commit b89a3de044077b851c669b967d599bf24982e2cd
+Author: Niels Provos <provos at gmail.com>
+Date:   Fri Jul 25 05:22:28 2008 +0000
+
+    do not warn on accept when errno is egain|eintr
+    
+    svn:r925
+
+commit cca2f8fa0eee370e1b75de198dc755c9a4a23bf2
+Author: Niels Provos <provos at gmail.com>
+Date:   Fri Jul 25 01:29:54 2008 +0000
+
+    make event_add not change any state if it fails; repoted by Ian Bell
+    
+    svn:r923
+
+commit 1aa6826f62880be761834bc1317ac0cb8dc398f4
+Author: Niels Provos <provos at gmail.com>
+Date:   Fri Jul 25 01:18:40 2008 +0000
+
+    fix off by one errors in devpoll; from Ian Bell
+    
+    svn:r921
+
+commit 3b24f4eedc2a60247496de74c85bc0997461edba
+Author: Niels Provos <provos at gmail.com>
+Date:   Fri Jul 25 00:48:30 2008 +0000
+
+    another fix; we also need to remove the signal event from the queue
+    
+    svn:r918
+
+commit e67a5ea9bb546587f6143643f6201d4574f474b7
+Author: Niels Provos <provos at gmail.com>
+Date:   Fri Jul 25 00:19:15 2008 +0000
+
+    fix a problem with epoll and event_reinit; reported by Alexander Drozdov
+    
+    svn:r917
+
+commit a4e2f52a4467af1ce6724d04df14fc98a6f06359
+Author: Niels Provos <provos at gmail.com>
+Date:   Sun Jul 20 23:31:28 2008 +0000
+
+    add a signal and free the base for reinit test
+    
+    svn:r915
+
+commit 1c164cebb892bd355f9dfbbd4bbc147e7b15466b
+Author: Niels Provos <provos at gmail.com>
+Date:   Sat Jul 19 23:35:29 2008 +0000
+
+    restore signal handlers correctly when we deallocate the signal base
+    
+    svn:r913
+
+commit 5e905c9dd52a601d0af581c28ca3c96e7163b79b
+Author: Niels Provos <provos at gmail.com>
+Date:   Thu Jul 17 14:09:07 2008 +0000
+
+    if we change the timeouts on bufferevents, we might have to readd pending events
+    
+    svn:r911
+
+commit 12077b4e2ed997206c0e02291263c432ac51bca2
+Author: Niels Provos <provos at gmail.com>
+Date:   Wed Jul 16 03:47:47 2008 +0000
+
+    support setting of AA or RD in dns server response
+    
+    svn:r910
+
+commit 506f3d0c8df77b0b6d52fa491c451901228c65a6
+Author: Niels Provos <provos at gmail.com>
+Date:   Sun Jul 13 20:18:41 2008 +0000
+
+    fix cname replies
+    
+    svn:r907
+
+commit c4af6211bd692a3faa3f7b4390e7f2a493eeae0b
+Author: Niels Provos <provos at gmail.com>
+Date:   Fri Jul 11 16:11:16 2008 +0000
+
+    forgot to add Alexander Drozdov as bug reporter in ChangeLog
+    
+    svn:r905
+
+commit 4bf44654a6429eaff145434e4b60e4eeeee1227f
+Author: Niels Provos <provos at gmail.com>
+Date:   Fri Jul 11 16:04:07 2008 +0000
+
+    assert(a & b) -> assert(a && b)
+    
+    svn:r903
+
+commit f7e61870e95efded87d17f2cf29ec9af815b9d30
+Author: Niels Provos <provos at gmail.com>
+Date:   Fri Jul 11 15:49:04 2008 +0000
+
+    support multiple events listening on the same signal; make signals regular events that go on the same event queue
+    
+    svn:r901
+
+commit 5512be01765f3d0607bf6c48d7fe00b80f9d83fa
+Author: Niels Provos <provos at gmail.com>
+Date:   Fri Jul 11 15:15:04 2008 +0000
+
+    fix a bug where deleting signals with kqueue would delete subsequent adds
+    
+    svn:r899
+
+commit df97fca9ca112c4ed24a0b81b5115b53c3f2fc47
+Author: Niels Provos <provos at gmail.com>
+Date:   Wed Jul 2 06:08:16 2008 +0000
+
+    From Scott Lamb:
+    * Allow the user to set the Content-Length: then stream a reply.
+      This is useful for large requests of a known size. Added unit test.
+    
+    * Don't send a response body on HEAD requests, 1xx status codes, 204
+      status codes, or 304 status codes, as described in RFC 2616 section
+      4.3. (Doing otherwise causes problems - in particular, if a 304 has a
+      chunked body (even an empty one), Safari 3.1.1 issues and then fails
+      the next request on the connection with the non-sequitur error message
+      "Too many HTTP redirects"!)
+    
+    * Specify a default Content-Type: when a response body is required, not
+      when we have data in the response buffer by the time we make the
+      header. (I.e., do this on evhttp_send_reply_start() for consistency.)
+    
+    * Don't expect a body in response to HEAD requests.
+    
+    
+    
+    svn:r898
+
+commit 409236a77d40f234e93684e51eb5928c30854daa
+Author: Niels Provos <provos at gmail.com>
+Date:   Wed Jul 2 04:39:09 2008 +0000
+
+    detect CLOCK_MONOTONIC at runtime for evdns
+    
+    svn:r896
+
+commit 707f67849aeafc491b24019f972e78062290adcb
+Author: Niels Provos <provos at gmail.com>
+Date:   Wed Jul 2 04:22:48 2008 +0000
+
+    reject negative content-length headers
+    
+    svn:r894
+
+commit cb7c3bd671097bf247ed1a84f11a5c4e1612e910
+Author: Niels Provos <provos at gmail.com>
+Date:   Sun Jun 29 01:30:06 2008 +0000
+
+    support multi-line http headers; based on a patch from Moshe Litvin
+    
+    svn:r890
+
+commit 9998c0cbc814decba91f90f3cdcda8da5cc1f5e3
+Author: Niels Provos <provos at gmail.com>
+Date:   Thu Jun 26 00:40:57 2008 +0000
+
+    correct handling of trailing headers in chunked replies; from Scott Lamb.
+    
+    svn:r887
+
+commit 21f76156b115299ffd8438ed323b03cee050cb77
+Author: Niels Provos <provos at gmail.com>
+Date:   Wed Jun 25 16:32:47 2008 +0000
+
+    change min_heap_idx to signed
+    
+    svn:r883
+
+commit 52161b47b6df9e2abb5d1b5fa5039cd8c7936ecf
+Author: Niels Provos <provos at gmail.com>
+Date:   Wed Jun 25 14:56:35 2008 +0000
+
+    fix a bug in which nameservers would not be added to the correct base in windows.
+    
+    svn:r873
+
+commit 8aa94ced6d8a04511d4366bb9232e0718dbcf8d4
+Author: Niels Provos <provos at gmail.com>
+Date:   Wed Jun 25 01:01:11 2008 +0000
+
+    proper library dependencies for regress.
+    
+    svn:r872
+
+commit 637508144c723d17f85628f5e868cbb8b72a72fc
+Author: Niels Provos <provos at gmail.com>
+Date:   Wed Jun 25 01:00:29 2008 +0000
+
+    add a visual studio 2005 solution
+    
+    svn:r871
+
+commit 9816192ac434e585f78d4a69f8d1f3807b74a53a
+Author: Niels Provos <provos at gmail.com>
+Date:   Wed Jun 25 00:59:21 2008 +0000
+
+    add log.h header file
+    
+    svn:r870
+
+commit ac0c7e2c7db4328362b54cab8753ebe05d2769e8
+Author: Niels Provos <provos at gmail.com>
+Date:   Wed Jun 25 00:58:08 2008 +0000
+
+    skip connection-retry test on windows
+    
+    svn:r869
+
+commit 0bee2ff3830b041ed758225007adf4144a827aeb
+Author: Niels Provos <provos at gmail.com>
+Date:   Wed Jun 25 00:34:24 2008 +0000
+
+    void function should not return a value
+    
+    svn:r868
+
+commit c3dc717a38d07f89850b9ddfe5b46c3859392d40
+Author: Niels Provos <provos at gmail.com>
+Date:   Tue Jun 24 23:37:37 2008 +0000
+
+    close fd if evhttp_get_requestion_connection fails
+    
+    svn:r867
+
+commit 24580e2b586f48ade544be64c8d57ed2c21bbc84
+Author: Niels Provos <provos at gmail.com>
+Date:   Tue Jun 24 22:43:19 2008 +0000
+
+    fix build on unix side
+    
+    svn:r866
+
+commit 60e4c0674a5cf31fa256054e6d26e95730c2bc19
+Author: Niels Provos <provos at gmail.com>
+Date:   Tue Jun 24 22:41:43 2008 +0000
+
+    add an event_debug statement for executing active events.
+    
+    svn:r865
+
+commit 30abfd99a2e1b12d21f896c9546588e4d701ded9
+Author: Niels Provos <provos at gmail.com>
+Date:   Tue Jun 24 22:38:37 2008 +0000
+
+    provide fake_getnameinfo so that the http layer works under windows.
+    
+    svn:r864
+
+commit f80f90ed8bcd83e41a14cf120b69b7444ffa73fa
+Author: Niels Provos <provos at gmail.com>
+Date:   Tue Jun 24 21:01:44 2008 +0000
+
+    fix a bug in http_connect for windows; the address was not copied correctly.
+    
+    svn:r863
+
+commit 2f8708db3ff01c8402eb0f3fc5de651161c7258d
+Author: Niels Provos <provos at gmail.com>
+Date:   Tue Jun 24 18:04:41 2008 +0000
+
+    ifdef out a whole bunch of sections; gettimeofday to evutil_gettimeofday
+    
+    svn:r862
+
+commit 994a7c50e1935ab0ae9c08384b386657ddbeff7d
+Author: Niels Provos <provos at gmail.com>
+Date:   Tue Jun 24 16:39:45 2008 +0000
+
+    close -> EVUTIL_CLOSESOCKET()
+    gettimeofday -> evutil_gettimeofday()
+    
+    svn:r861
+
+commit 55f914941d134bf86a3da504fce7fe5c67d47bbd
+Author: Niels Provos <provos at gmail.com>
+Date:   Tue Jun 24 16:29:02 2008 +0000
+
+    fix evutil_snprintf on windows
+    
+    svn:r860
+
+commit 35b1236c84a7f06359f7d389bd7716550c4e5d00
+Author: Niels Provos <provos at gmail.com>
+Date:   Tue Jun 24 15:29:41 2008 +0000
+
+    change write to send for windows.
+    
+    svn:r859
+
+commit e736991aea9b8c8cf706b2f39e82ef4d14640460
+Author: Niels Provos <provos at gmail.com>
+Date:   Sun Jun 22 16:00:48 2008 +0000
+
+    make it work with older versions of automake; from Scott Lamb
+    
+    svn:r858
+
+commit e711ce454ae94cd76c5bcc54395d3a395c32f92f
+Author: Niels Provos <provos at gmail.com>
+Date:   Sat Jun 21 06:10:10 2008 +0000
+
+    reintroduce a memmove when there is enough misalignment to hold the new data; otherwise the size of the buffer may grow without bounds
+    
+    svn:r857
+
+commit 99a1063e735f70443268b50d14f042c87cb9b99a
+Author: Niels Provos <provos at gmail.com>
+Date:   Sat Jun 21 02:21:25 2008 +0000
+
+    support 64-bit integers in rpc structs
+    
+    svn:r856
+
+commit 4c56ba1cede32ba30624208e8e84672531e644e3
+Author: Niels Provos <provos at gmail.com>
+Date:   Fri Jun 20 06:52:13 2008 +0000
+
+    do not use SO_REUSEADDR when connecting
+    
+    svn:r854
+
+commit 774d056c46dbe7c3075b2628f7d57c514d404249
+Author: Niels Provos <provos at gmail.com>
+Date:   Tue Jun 17 01:14:58 2008 +0000
+
+    warn on connection failures
+    
+    svn:r853
+
+commit 2baaac7fdb330dc98ca5d117d8fcc7ab049396be
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Sat Jun 14 17:50:36 2008 +0000
+
+    Forward-port:  Rename INPUT and OUTPUT to EVRPC_INPUT and EVRPC_OUTPUT, but keep the INPUT/OUTPUT aliases on non-win32 platforms to maintain backwards compatibility.
+    
+    svn:r852
+
+commit a6ce520cfbcfa21406406b1649ee3ba99307a797
+Author: Niels Provos <provos at gmail.com>
+Date:   Thu Jun 12 14:43:35 2008 +0000
+
+    allow min_heap_erase to be called on removed members; from liusifan
+    
+    svn:r849
+
+commit c584741baf59d9bf69cb59ae05f943ab4cbcee45
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Mon Jun 2 18:35:02 2008 +0000
+
+    Fix line ending style on windows projects files.
+    
+    
+    
+    svn:r847
+
+commit 344c2b56f1b3eb7bcbb9a732c5b6221146f915ba
+Author: Niels Provos <provos at gmail.com>
+Date:   Mon Jun 2 05:45:26 2008 +0000
+
+    deliver partial data to request callbacks when chunked callback is set even if there is no chunking on the http level; allows cancelation of requests from within the chunked callback; from Scott Lamb.
+    
+    svn:r846
+
+commit 9586a1cbb00d84d2c913d6719aa0ba614dbc1d7a
+Author: Niels Provos <provos at gmail.com>
+Date:   Sun Jun 1 16:21:24 2008 +0000
+
+    fix an evbuffer corruption when adding an empty evbuffer; from Scott Lamb
+    
+    svn:r845
+
+commit 480d8142b8dc12a051ebd99d34a2a4aa44444181
+Author: Niels Provos <provos at gmail.com>
+Date:   Sun Jun 1 01:19:08 2008 +0000
+
+    do not define a variable in a header file; it will lead to duplicate symbols when linking
+    
+    svn:r844
+
+commit f9707a01e582818a71085f1c45bd8f8f1c923e3b
+Author: Niels Provos <provos at gmail.com>
+Date:   Sat May 31 18:57:21 2008 +0000
+
+    we need to declare the enum first before it can be used; c++ compilation errors
+    
+    svn:r843
+
+commit 05965921ab76880bf1faf3e405ca6c40c32fdf30
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Sat May 31 14:37:31 2008 +0000
+
+    Add new functions to access backends by their features and to query the features of a backend.
+    
+    svn:r842
+
+commit 9515c8076ee3e60580903338594c86a9b344619e
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Fri May 30 17:35:20 2008 +0000
+
+    Oops; add regress_et.c
+    
+    svn:r841
+
+commit 39400e68b6202dc40545b5ac26468fc3f7a11184
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Fri May 30 16:56:34 2008 +0000
+
+    Patch from Valery Kholodkov: support for edge-triggered events with epoll and kqueue.  Changed from original patch: made test into a regression test, with explicit success/failure for edge-triggered and non-edge-triggered cases. Closes SF request 1968284.
+    
+    svn:r840
+
+commit 9ca7a3a3d6be5741095b3ba2c7e1c979f66628cb
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Fri May 30 16:19:01 2008 +0000
+
+    Resolve two conflicts.
+    
+    svn:r839
+
+commit 2deb3ce061adffccbacff6b87401134c4047b8b3
+Author: Niels Provos <provos at gmail.com>
+Date:   Thu May 29 01:39:43 2008 +0000
+
+    simplify handling of environment variables for disabling backends;
+    make event_get_supported_methods obey environment variables; this
+    fixes make verify; problem reported by Scott Lamb.
+    
+    
+    svn:r838
+
+commit 8b66f1bd4dd7c4e5e2b913062ea6c9ee1836e7ec
+Author: Niels Provos <provos at gmail.com>
+Date:   Sat May 17 02:14:17 2008 +0000
+
+    constify struct timeval *
+    
+    svn:r836
+
+commit 134344b79ebbda2ff765f7381e49da686bed9f7c
+Author: Niels Provos <provos at gmail.com>
+Date:   Fri May 16 01:55:40 2008 +0000
+
+    Fix use of freed memory in event_reinit; pointed out by Peter Postma
+    
+    svn:r834
+
+commit bc5e27190f11e23d1737a0644fa221f1642f3f6a
+Author: Niels Provos <provos at gmail.com>
+Date:   Thu May 15 06:36:36 2008 +0000
+
+    Attempt to make a project for the regression test. There are several problems:
+       - no gettimeofday on windows
+       - no varargs macros on windows (all the rpc stuff does not build)
+       - no zlib on windows (zlib test does not build)
+       - some library dependencies seem to be missing
+    
+    svn:r833
+
+commit 89a1512a74a8ae8b920ce52c7b0f706bf59832b8
+Author: Niels Provos <provos at gmail.com>
+Date:   Thu May 15 06:33:23 2008 +0000
+
+    close -> EVUTIL_CLOSESOCKET
+    
+    svn:r832
+
+commit 9e8688a749297b88b1841f723b51f60dfa314a07
+Author: Niels Provos <provos at gmail.com>
+Date:   Thu May 15 06:10:40 2008 +0000
+
+    windows does not have varargs macros, so this is all useless
+    
+    svn:r831
+
+commit a35529c60faa45e551fef155bfa6f8646f3f3583
+Author: Niels Provos <provos at gmail.com>
+Date:   Thu May 15 06:03:23 2008 +0000
+
+    add the code here until we figure out how to generate it on windows
+    
+    svn:r830
+
+commit a68de2525d3e3bc39cfaa9e3eac055a284ad6c00
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Thu May 15 03:49:03 2008 +0000
+
+     r19749 at catbus:  nickm | 2008-05-14 23:48:44 -0400
+     New function to dump inserted and active events.  Also do not recv() on an int array.
+    
+    
+    svn:r829
+
+commit f9b4ee0aa4cc786cbc567de12edb914122614107
+Author: Niels Provos <provos at gmail.com>
+Date:   Thu May 15 03:19:05 2008 +0000
+
+    replace write/read/close with send/recv/EVUTIL_CLOSESOCKET
+    
+    svn:r828
+
+commit 35245a6037bd1a2e3d678014b05a22276e022c09
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Thu May 15 03:16:34 2008 +0000
+
+    Minor project content tweaks
+    
+    svn:r827
+
+commit 90ddd91ff046b01158a2f9c88e49960b294a8697
+Author: Niels Provos <provos at gmail.com>
+Date:   Thu May 15 03:14:48 2008 +0000
+
+    do not include sys/time.h on windows
+    
+    svn:r826
+
+commit 3ca22aa837262bdb9a5960de750217dc5e8fe5d3
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Thu May 15 03:05:10 2008 +0000
+
+     r19739 at catbus:  nickm | 2008-05-14 23:05:03 -0400
+     Use our offsetof; do not rely on platform offsetof
+    
+    
+    svn:r825
+
+commit c3c11f27b0915e5ba91ba00293381c962494ea0d
+Author: Niels Provos <provos at gmail.com>
+Date:   Thu May 15 01:54:20 2008 +0000
+
+    add a simple http server for potential benchmarking
+    
+    svn:r823
+
+commit ec3956ba48f2212cd23cfdb88d4e777b51441146
+Author: Niels Provos <provos at gmail.com>
+Date:   Thu May 15 01:53:48 2008 +0000
+
+    fix connection keep-alive behavior for HTTP/1.0
+    
+    svn:r822
+
+commit 7be8f13b95b85816329d725307e9f8fc8839e6e4
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Wed May 14 15:56:17 2008 +0000
+
+     r19736 at catbus:  nickm | 2008-05-14 11:50:49 -0400
+     Add casts to make some printf formats in regress.c happier.
+    
+    
+    svn:r821
+
+commit aa4b92574b4ca57f1172119d66b6559409410a68
+Author: Niels Provos <provos at gmail.com>
+Date:   Tue May 13 05:05:30 2008 +0000
+
+    move some structure definitions from evrpc.h to evrpc-internal.h
+    
+    svn:r817
+
+commit 1bce6f74349051fbda3e435f1e7dce7ae8c80644
+Author: Niels Provos <provos at gmail.com>
+Date:   Tue May 13 03:51:10 2008 +0000
+
+    use evhttp_connection_base_new()
+    
+    svn:r816
+
+commit ef0221cc3957fa3103e4f24db10eb090ae2db0f1
+Author: Niels Provos <provos at gmail.com>
+Date:   Tue May 13 03:42:47 2008 +0000
+
+    document chunked replies plus fix doxygen warnings
+    
+    svn:r815
+
+commit 0cafdeb6f53370877a74fa4687bcaf1b269396a5
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Mon May 12 17:16:47 2008 +0000
+
+    Tweaks to make unit tests fail less badly on mingw on trunk.
+    
+    svn:r814
+
+commit c6da86ffcb85636e56dd4ea14a6d65ba7970d921
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Mon May 12 16:44:24 2008 +0000
+
+     r19709 at catbus:  nickm | 2008-05-12 12:42:48 -0400
+     Possible fix for [1960723] snprintf and vsnprintf return values are wrong on win32
+    
+    
+    svn:r813
+
+commit 1080852e91291bcb1fb46dbc9e493d255aaa06fb
+Author: Niels Provos <provos at gmail.com>
+Date:   Mon May 12 03:12:09 2008 +0000
+
+    allow cancelation of user initiated http requests; this will allow cancelation of rpc requests eventually
+    
+    svn:r812
+
+commit 03fafae0068ed014dfe9ee97a3e150fbe6ff6ba0
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Mon May 12 01:03:36 2008 +0000
+
+    Make trunk event.c build happily on win32 under mingw.
+    
+    
+    svn:r811
+
+commit 054159f59c0de3fe3a73cad011883f6c02ce6f3f
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Mon May 12 00:56:19 2008 +0000
+
+     r19679 at catbus:  nickm | 2008-05-11 20:56:12 -0400
+     Windows does not have alloca().
+    
+    
+    svn:r810
+
+commit 04366d5acc691783083c5e746056694943924b3a
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Mon May 12 00:51:48 2008 +0000
+
+     r19677 at catbus:  nickm | 2008-05-11 20:51:41 -0400
+     Oops; we had not changed event_malloc() to mm_malloc() [etc] in win32.c
+    
+    
+    svn:r809
+
+commit 6bf1ca780c5f60618e59e02b61eae4bfee199f46
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Mon May 12 00:40:04 2008 +0000
+
+     r19675 at catbus:  nickm | 2008-05-11 20:39:39 -0400
+     Stop pretending that u_char and u_short are standard types that win32 is dumb not to have.  In fact, u_char can really just be spelled out, and u_short was usually just a bad way of saying ev_uint16_t.
+    
+    
+    svn:r808
+
+commit a57767faf8d140797b0adf3fe885b7eb8928057c
+Author: Niels Provos <provos at gmail.com>
+Date:   Sun May 11 16:22:35 2008 +0000
+
+    more accessors for evhttp_request
+    
+    svn:r807
+
+commit 687be1241bd1c931f724ceeb562d64037f4e13f1
+Author: Niels Provos <provos at gmail.com>
+Date:   Sat May 10 07:32:05 2008 +0000
+
+    dispatch the callbacks against the decoded uri to be more http compliant
+    
+    svn:r806
+
+commit 7bbe185b0e54f3d3228ed7e17c78ed3c5ec05836
+Author: Niels Provos <provos at gmail.com>
+Date:   Sat May 10 06:32:53 2008 +0000
+
+    evhttp_request_uri -> evhttp_request_get_uri
+    
+    svn:r805
+
+commit 950af186791c01636fe37ef8c3720154e48f975c
+Author: Niels Provos <provos at gmail.com>
+Date:   Sat May 10 05:58:17 2008 +0000
+
+    replace fnmatch with homegrown function
+    
+    svn:r804
+
+commit 7868ab5a435d6697cc0c70ab085d7970e5b97384
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Fri May 9 04:00:17 2008 +0000
+
+     r19667 at catbus:  nickm | 2008-05-08 23:49:26 -0400
+     fwd-port: Always include winsock2.h before windows.h.  Apparently some SDKs need this.
+    
+    
+    svn:r803
+
+commit 64ce7990831e76038285bb78b9c061b6fcba4370
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Thu May 8 23:57:31 2008 +0000
+
+     r15555 at tombo:  nickm | 2008-05-08 19:56:51 -0400
+     fwd-port The IRIX compiler thinks #error means warn.  Fix configure.in to tolerate this.
+    
+    
+    svn:r801
+
+commit 8acb80b4f9a19469dd0d93e5b7cd149e7f89da3b
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Thu May 8 22:51:39 2008 +0000
+
+     r15551 at tombo:  nickm | 2008-05-08 14:49:20 -0400
+     Use _get_ convention for new accessor functions.  (These are all new ones as of 2.0, I believe).
+    
+    
+    svn:r799
+
+commit 7defe4cbc16a53b10e8b03ed618140121cc91144
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Thu May 8 15:55:09 2008 +0000
+
+     r15549 at tombo:  nickm | 2008-05-08 11:53:11 -0400
+     Make new http headers include minimal parts of event2/ tree; make old evhttp.h incldue event.h, since the old one did too.
+    
+    
+    svn:r798
+
+commit a29f7eefac8f3c66434fb5d7461546d1c7234675
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Thu May 8 15:38:31 2008 +0000
+
+    svn:r797
+
+commit 3d60bccc8ef2ef9413d198bc670f00efb21149af
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Thu May 8 14:25:44 2008 +0000
+
+     r19656 at catbus:  nickm | 2008-05-08 10:25:08 -0400
+     forward-port: Remove #include "misc.h"s.
+    
+    
+    svn:r795
+
+commit a26442c5acba29b315793e67bc802c4fed13e31d
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Thu May 8 14:06:33 2008 +0000
+
+     r19649 at catbus:  nickm | 2008-05-08 10:00:14 -0400
+     Replace gettimeofday() usage with a new evutil_gettimeofday().  This removes all previous need for win32-code/misc.[ch]
+    
+    
+    svn:r792
+
+commit 85ed7133439658bf7b44a99100fcf82eed1d232e
+Author: Niels Provos <provos at gmail.com>
+Date:   Thu May 8 07:00:16 2008 +0000
+
+    deprecate timeout_* event functions by moving them to event_compat.h
+    
+    svn:r791
+
+commit de1c43926b032954a91f7edf50bbf4f233bd791e
+Author: Niels Provos <provos at gmail.com>
+Date:   Thu May 8 06:15:04 2008 +0000
+
+    migrate evhttp to event2; accessors are still missing
+    
+    svn:r790
+
+commit 3f56e364b76ccc3a688768e92952d08052556120
+Author: Niels Provos <provos at gmail.com>
+Date:   Thu May 8 05:56:20 2008 +0000
+
+    event_base_new_with_config() and related methods
+    
+    svn:r789
+
+commit 3b2022ef3a9eba280b256ac7bbe99f224a8584ad
+Author: Niels Provos <provos at gmail.com>
+Date:   Thu May 8 05:33:15 2008 +0000
+
+    provide an api for retrieving the supported event mechanisms
+    
+    svn:r788
+
+commit 0a804f3c837f7969d04f6604a40897a9b5aa8c57
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Wed May 7 21:51:49 2008 +0000
+
+     r19641 at catbus:  nickm | 2008-05-07 17:51:26 -0400
+     Forward-port: Fix win32 vc-2005 build.
+    
+    
+    svn:r786
+
+commit f2d65f8a9cdbfd5500d1b3a01b5c9de8e1f89f5c
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Wed May 7 20:29:33 2008 +0000
+
+     r19634 at catbus:  nickm | 2008-05-07 16:10:37 -0400
+     the C syntax is fn(void), not fn().
+    
+    
+    svn:r784
+
+commit 68fecb7ab6c24c13a2693464e62228601d0af10b
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Wed May 7 20:29:11 2008 +0000
+
+     r19633 at catbus:  nickm | 2008-05-07 16:10:00 -0400
+     Fix bug 1958901: stop overriding CPPFLAGS in test directory.
+    
+    
+    svn:r783
+
+commit 300a4efb2d3b28fd0dfbb7cfb004ddf7a19d5ef4
+Author: Niels Provos <provos at gmail.com>
+Date:   Wed May 7 01:52:24 2008 +0000
+
+    test virtual hosts
+    
+    svn:r780
+
+commit caa368e1cc901abf75c02ae19d70d148a95e79ba
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Mon May 5 19:19:47 2008 +0000
+
+     r19610 at catbus:  nickm | 2008-05-05 15:18:52 -0400
+     Switch strcmp() tests in test_evbuffer() to use memcmp instead.  Previously they broke on my Linux box.
+    
+    
+    svn:r779
+
+commit 803dc36ad8dde5964d87ee87bc1e4f64277f4903
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Mon May 5 19:19:08 2008 +0000
+
+     r19609 at catbus:  nickm | 2008-05-05 15:16:52 -0400
+     Reename evdns-internal struct request to evdns_request, and expose the name. switch new evdns resolve APIs to return evdns_request*.  This is a prereq to making evdns requests cancelable.
+    
+    
+    svn:r778
+
+commit 957e9fd829b64dc8f54824a34601eff95e71d669
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Mon May 5 17:49:52 2008 +0000
+
+     r19607 at catbus:  nickm | 2008-05-05 13:49:44 -0400
+     Hack to make sure that there is always a working fast EVENT_FD()
+    
+    
+    svn:r777
+
+commit 4e8a339ef7afaecaa230ef4acd68c87c78f51e96
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Mon May 5 15:46:00 2008 +0000
+
+     r19602 at catbus:  nickm | 2008-05-05 11:45:18 -0400
+     Make most of the tests use the new headers.
+    
+    
+    svn:r776
+
+commit bb37fbb22ef403b993c86ce8930a5061c3d49c93
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Mon May 5 15:45:47 2008 +0000
+
+     r19601 at catbus:  nickm | 2008-05-05 11:45:04 -0400
+     Make event_rpcgen.py use the new headers.
+    
+    
+    svn:r775
+
+commit bc6da5ea79be0083c6b276d9fd6a62cb8278f096
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Mon May 5 15:45:39 2008 +0000
+
+     r19600 at catbus:  nickm | 2008-05-05 11:34:06 -0400
+     Move EV_* flags into event.h; they are a necessary part of the public API.
+    
+    
+    svn:r774
+
+commit d0c3644e63667380ff08645621eefaea0231241a
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Mon May 5 15:45:30 2008 +0000
+
+     r19599 at catbus:  nickm | 2008-05-05 11:26:18 -0400
+     Turn event_initialized() and friends into a function; add function equivalents for EVENT_FD and EVENT_SIGNAL.
+    
+    
+    svn:r773
+
+commit 891dba4376535df407189de3a2af7c3951280752
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Mon May 5 15:00:53 2008 +0000
+
+     r19597 at catbus:  nickm | 2008-05-05 11:00:29 -0400
+     define _GNU_SOURCE before including fnmatch.h so that FNM_CASEFOLD gets defined and linux build gets fixed.  This whole fnmatch() business will be a bit hard to port, though: windows doesn't have one IIUC, so we'll have to reimplement our own to work there.
+    
+    
+    svn:r772
+
+commit f2a81fbc67b90551a50e07f4af5a266ac081ccd4
+Author: Niels Provos <provos at gmail.com>
+Date:   Mon May 5 07:17:05 2008 +0000
+
+    add support for virtual http hosts; no tests yet
+    
+    svn:r771
+
+commit f940eb4b8d26f677af4bcaa21ed98cfdb9db0acc
+Author: Niels Provos <provos at gmail.com>
+Date:   Sun May 4 22:21:29 2008 +0000
+
+    fix a bug where it was not possible to bind multiple sockets to the same http
+    server; test that binding multiple sockets works.
+    
+    
+    svn:r769
+
+commit 5786d5255a3a906b0768304d28171ef95c05bdbb
+Author: Niels Provos <provos at gmail.com>
+Date:   Sun May 4 20:05:39 2008 +0000
+
+    improve doxygen documentation for evhttp.h - still incomplete
+    
+    svn:r768
+
+commit 36d7ab508293985ac08f8df043d837b96028cd0f
+Author: Niels Provos <provos at gmail.com>
+Date:   Sun May 4 18:31:21 2008 +0000
+
+    trust in naming: rename evbuffer.c to bufferevent.c
+    
+    svn:r767
+
+commit 40a44b36bbc108a97e65517b98bc2bb65896ff07
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Sun May 4 17:23:20 2008 +0000
+
+     r19564 at catbus:  nickm | 2008-05-04 13:23:10 -0400
+     Fix compile with --enable-gcc-warnings and clock_gettime()
+    
+    
+    svn:r766
+
+commit a83caa6b29b1d86dd2e8121bc782a5ce92bbdbb9
+Author: Niels Provos <provos at gmail.com>
+Date:   Sun May 4 03:52:24 2008 +0000
+
+    remove too agressive assert
+    
+    svn:r765
+
+commit 181007b9cf52ae6aea8d97e64e114895c7f885f0
+Author: Niels Provos <provos at gmail.com>
+Date:   Sat May 3 22:14:44 2008 +0000
+
+    make event_assign void; it cannot return an error
+    
+    svn:r763
+
+commit 1d30750b1de39c25ff930d8a52e2f3228fac353b
+Author: Niels Provos <provos at gmail.com>
+Date:   Sat May 3 22:10:09 2008 +0000
+
+    support for periodic timeouts
+    
+    svn:r762
+
+commit 8c750eaff8412b8387eeca1e75d62540ad725f00
+Author: Niels Provos <provos at gmail.com>
+Date:   Sat May 3 21:37:33 2008 +0000
+
+    separate signal events from io events
+    
+    svn:r760
+
+commit 45e6fb0dd263f878135bd210d3d410906eb45c9f
+Author: Niels Provos <provos at gmail.com>
+Date:   Sat May 3 18:23:44 2008 +0000
+
+    cache clock_gettime/gettimeofday values in base
+    
+    svn:r758
+
+commit f04497e493c6b665d6cc889a57f2441d71d176d1
+Author: Niels Provos <provos at gmail.com>
+Date:   Sat May 3 03:05:28 2008 +0000
+
+    introduce evbuffer_reserve_space() and evbuffer_commit_space() to make processing in filters more efficient
+    
+    svn:r757
+
+commit becc89b7788984924b3041d5a187b1c978bac458
+Author: Niels Provos <provos at gmail.com>
+Date:   Sat May 3 02:37:18 2008 +0000
+
+    introduce evbuffer_contiguous_space() and use it in the zlib filter test
+    
+    svn:r756
+
+commit 5fbc7f0aeedcc5e57ac40aad01211bce7a7c7a0d
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Fri May 2 16:28:25 2008 +0000
+
+     r15439 at tombo:  nickm | 2008-05-02 12:28:08 -0400
+     use event_assign internall; switch uses of event_set to use event_assign instead.
+    
+    
+    svn:r755
+
+commit e8f450f232cdb01349e5639181dd115ed5a663f0
+Author: Niels Provos <provos at gmail.com>
+Date:   Thu May 1 02:08:26 2008 +0000
+
+    expose a way to create the rpc context manually
+    
+    svn:r754
+
+commit 85c4904bc526103e5702c716ee80d03937083168
+Author: Niels Provos <provos at gmail.com>
+Date:   Thu May 1 01:45:00 2008 +0000
+
+    allow connections to be removed from an rpc pool
+    
+    svn:r753
+
+commit d76cca72736a0918221506c64d76124e65a71f1a
+Author: Niels Provos <provos at gmail.com>
+Date:   Wed Apr 30 04:36:26 2008 +0000
+
+    fix missing printf format argument
+    
+    svn:r752
+
+commit ccb70f1bc747068e960dd721669f0298b4f7870c
+Author: Niels Provos <provos at gmail.com>
+Date:   Wed Apr 30 04:31:10 2008 +0000
+
+    provide example bufferevent filters doing compression and decompression as additional regression test
+    
+    svn:r751
+
+commit 522480f5cebeb8bb9ff9c09d14b8ae6280f15038
+Author: Niels Provos <provos at gmail.com>
+Date:   Wed Apr 30 01:01:57 2008 +0000
+
+    improve documentation for bufferevent.h
+    
+    svn:r750
+
+commit c58a01a23bc3fb649b3c45a625ebb643864166a9
+Author: Niels Provos <provos at gmail.com>
+Date:   Wed Apr 30 00:50:20 2008 +0000
+
+    fix regression test; oops
+    
+    svn:r749
+
+commit 682adc443b03a47c849f028474639c5d8254101c
+Author: Niels Provos <provos at gmail.com>
+Date:   Wed Apr 30 00:09:16 2008 +0000
+
+    support input/output filters for bufferevents
+    
+    svn:r748
+
+commit 28add6b9e2d03b96ff73d06f825c3186101ac445
+Author: Niels Provos <provos at gmail.com>
+Date:   Tue Apr 29 23:18:04 2008 +0000
+
+    add more header files to doxygen
+    
+    svn:r747
+
+commit 98dc98c59fb7833bb60319a988beea596698b98a
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Tue Apr 29 21:19:26 2008 +0000
+
+     r15346 at tombo:  nickm | 2008-04-29 17:19:18 -0400
+     Remove the never-exported, never-used, never-threadsafe evhttp_hostportfile()
+    
+    
+    svn:r746
+
+commit 9626a421de2e3b4e2eed34bfdffdd0d417655c78
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Tue Apr 29 18:11:23 2008 +0000
+
+     r15341 at tombo:  nickm | 2008-04-29 14:09:50 -0400
+     Use internal implementation for evutil_timercmp() everywhere, to avoid bugs when the platform timercmp() has never heard of <= or >=.  Also, replace timercmp() usage in min_heap.c with call to evutil_timercmp().
+    
+    
+    svn:r744
+
+commit 4cff82bb4f2519d139559c308b63be54cb86b002
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Tue Apr 29 18:11:10 2008 +0000
+
+     r15339 at tombo:  nickm | 2008-04-29 14:03:48 -0400
+     Note that evhttp_hostportfile is not threadsafe, and so its usage will change.  Mark its first argument const. Remove a now-redundant declaration for it in http-internal.h.
+    
+    
+    svn:r743
+
+commit e44ef375ee9a8b4c7e8d21a752e9e4864595758f
+Author: Niels Provos <provos at gmail.com>
+Date:   Tue Apr 29 04:52:50 2008 +0000
+
+    convert evhttp_connection to use bufferevents
+    
+    svn:r742
+
+commit 0ec09b550795d19a74425c1756fcc598b1f3f8b3
+Author: Niels Provos <provos at gmail.com>
+Date:   Tue Apr 29 04:35:26 2008 +0000
+
+    also try client connection for chunked requests
+    
+    svn:r741
+
+commit 9c480533bf1181d41eadf21fde0df6f4481d8e55
+Author: Niels Provos <provos at gmail.com>
+Date:   Tue Apr 29 02:33:27 2008 +0000
+
+    test the server side of sending chunked replies
+    
+    svn:r740
+
+commit 72a3902e5c25272c0c6f690971633c5be947a392
+Author: Niels Provos <provos at gmail.com>
+Date:   Tue Apr 29 00:24:00 2008 +0000
+
+    test some primitives from http.c
+    
+    svn:r739
+
+commit 9485ff9a6629e2b5f73a775a7fa799f56d589e30
+Author: Niels Provos <provos at gmail.com>
+Date:   Sun Apr 27 20:40:56 2008 +0000
+
+    introduce bufferevent_setcb and bufferevent_setfd to allow better manipulation of bufferevents
+    
+    svn:r737
+
+commit 22c8a404027c7efcd486d70568c5d6f723781635
+Author: Niels Provos <provos at gmail.com>
+Date:   Sun Apr 27 20:04:33 2008 +0000
+
+    test connection retry logic
+    
+    svn:r736
+
+commit 7b29ad57d95513ff806c4bbdace0861330dd8054
+Author: Niels Provos <provos at gmail.com>
+Date:   Sun Apr 27 19:41:26 2008 +0000
+
+    test server behavior when connection times out while reading the headers
+    
+    svn:r735
+
+commit dd183f7c97777e8937187c0041be383338d0c0ad
+Author: Niels Provos <provos at gmail.com>
+Date:   Sun Apr 27 00:32:10 2008 +0000
+
+    provide bufferevent_input and bufferevent_output without requiring knowledge of the structure
+    
+    svn:r734
+
+commit f6c40173819c911e99b61867c53daa766618c4c5
+Author: Niels Provos <provos at gmail.com>
+Date:   Sat Apr 26 05:13:56 2008 +0000
+
+    fix a bug in which bufferevent_write_buffer would not schedule a write event
+    
+    svn:r733
+
+commit 3a17aeed7a481e614c65925cbe07b286ae257e54
+Author: Niels Provos <provos at gmail.com>
+Date:   Sat Apr 26 01:00:44 2008 +0000
+
+    fix a bug in buffrevent read water marks and add a test for them
+    
+    svn:r731
+
+commit 3278012f33bc5bf3a965244d570803dd6b7e663f
+Author: Niels Provos <provos at gmail.com>
+Date:   Sat Apr 26 00:35:17 2008 +0000
+
+    expose bufferevent_setwatermark via header files and fix high watermark on read
+    
+    svn:r729
+
+commit 89f63b205d29b9ff9642713d22ca59427c1ffab5
+Author: Niels Provos <provos at gmail.com>
+Date:   Fri Apr 25 02:44:46 2008 +0000
+
+    add bufferevent_read_buffer function
+    
+    svn:r728
+
+commit fe2e7307f3a2d7915098a3fa671da3c3e89bdd64
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Fri Apr 25 01:29:15 2008 +0000
+
+     r15320 at tombo:  nickm | 2008-04-24 21:29:06 -0400
+     Yes, niels says this is safe.
+    
+    
+    svn:r727
+
+commit 94fb4d0a1e95f140dd840535bb066fb7dbb3013c
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Fri Apr 25 01:18:18 2008 +0000
+
+     r15317 at tombo:  nickm | 2008-04-24 21:17:49 -0400
+     Add new functions to be more threadsafe (and structure-ignorant) than event_set.
+    
+    
+    svn:r726
+
+commit 49868b618a55c375d6c378edc174cd81e478f213
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Fri Apr 25 01:18:08 2008 +0000
+
+     r15316 at tombo:  nickm | 2008-04-24 20:58:36 -0400
+     Rename internal memory management functions from event_malloc() etc to mm_malloc() etc.
+    
+    
+    svn:r725
+
+commit a55a67d56e989b9f7fa2027f2c75bec8a55a9a87
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Fri Apr 18 13:46:13 2008 +0000
+
+     r15249 at tombo:  nickm | 2008-04-18 09:46:02 -0400
+     Avoid leaking a string in the unlikely OOM case from name_from_addr. spotted by niels.
+    
+    
+    svn:r724
+
+commit a404bf9877ad2cca2f4bb403afff6818bb94d6e8
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Fri Apr 18 13:28:00 2008 +0000
+
+     r15245 at tombo:  nickm | 2008-04-18 09:27:50 -0400
+     Oops; use libevent-internal type instead of uint32_t.
+    
+    
+    svn:r722
+
+commit 8d2a61605b6c32a06b961238eb5d3195b8b452d1
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Fri Apr 18 13:25:05 2008 +0000
+
+     r15242 at tombo:  nickm | 2008-04-18 09:24:44 -0400
+     Make tagging code thread-safe, and fix a bug in encode_int_internal
+    
+    
+    svn:r721
+
+commit a2d4a06298173e0db43ae4012edb48f538825fd6
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Thu Apr 17 19:27:54 2008 +0000
+
+     r15228 at tombo:  nickm | 2008-04-17 15:27:39 -0400
+     Use new includes in evport.c and devpoll.c.  I do not have the hardware to compile these on; somebody else should test them.
+    
+    
+    svn:r720
+
+commit 3eb21c0d33683302e1acd7e14a899889f28b2931
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Thu Apr 17 19:25:35 2008 +0000
+
+     r15226 at tombo:  nickm | 2008-04-17 15:25:25 -0400
+     Fix a couple of gcc warnings on 64-bit platforms
+    
+    
+    svn:r719
+
+commit 8863ff7625c3d4fd81063029738bb7c31471e79d
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Thu Apr 17 19:19:36 2008 +0000
+
+     r15224 at tombo:  nickm | 2008-04-17 15:19:24 -0400
+     Oops. We need to make sure that strdup wasn't oom.
+    
+    
+    svn:r718
+
+commit ae09ac4ae0194880fe7871dc4b6704d99901bd8a
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Thu Apr 17 19:18:40 2008 +0000
+
+     r15220 at tombo:  nickm | 2008-04-17 15:16:02 -0400
+     Use new includes in more files still
+    
+    
+    svn:r717
+
+commit 3f3a16757f2843c1edebe8df58a85aed965f7fd9
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Thu Apr 17 19:17:50 2008 +0000
+
+     r15219 at tombo:  nickm | 2008-04-17 15:12:17 -0400
+     Use new includes in epoll.c
+    
+    
+    svn:r716
+
+commit beb39f577032cc7ba1c727fda00fc63816a90262
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Thu Apr 17 19:16:30 2008 +0000
+
+     r15218 at tombo:  nickm | 2008-04-17 15:10:13 -0400
+     Add a missing #include <stdarg.h>
+    
+    
+    svn:r715
+
+commit e688a88a821506e8cfb43155496c8e2b1b39af53
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Thu Apr 17 17:55:35 2008 +0000
+
+     r15216 at tombo:  nickm | 2008-04-17 13:55:05 -0400
+     Add new thread-safe interfaces to evdns functions. Needs review.
+    
+    
+    svn:r714
+
+commit fc41ffde4d21a61a070c88ae57e1e18f3055b08b
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Thu Apr 17 15:50:28 2008 +0000
+
+     r15214 at tombo:  nickm | 2008-04-17 11:47:10 -0400
+     Make name_from_addr() threadsafe in http.c
+    
+    
+    svn:r713
+
+commit 963ae2cf42af8f9fea2729d5c424ef9ffa0a9a6c
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Wed Apr 16 21:01:31 2008 +0000
+
+     r15212 at tombo:  nickm | 2008-04-16 17:01:21 -0400
+     Remove some needless includes
+    
+    
+    svn:r712
+
+commit 0ac73078ed42b5185a45610534ce3475ba6c27e7
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Wed Apr 16 20:01:51 2008 +0000
+
+     r15193 at tombo:  nickm | 2008-04-16 16:00:35 -0400
+     Split event.h into several new headers in include/event2.  event.h is now just a wrapper that includes all the subheaders.
+    
+    
+    svn:r711
+
+commit f560198e4598fe1b1fe471c9f3da2251edf87105
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Wed Apr 16 20:01:27 2008 +0000
+
+     r15192 at tombo:  nickm | 2008-04-16 15:59:51 -0400
+     Fix a compilation error on OSX.
+    
+    
+    svn:r710
+
+commit f9f4d4fe1720f888ff1d89d7edfdc9725f62432d
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Fri Apr 11 20:02:50 2008 +0000
+
+     r19309 at catbus:  nickm | 2008-04-11 16:02:07 -0400
+     Fix for epoll-on-linux bug (#1908866) where timeout values over (LONG_MAX-999)/HZ) (35 for me, or maybe 6 hours 50 min for some people, or maybe 3 hours 25 minutes for a special few) get treated as "wait forever".  This actually deserves to be fixed in the kernel, but even if it is we will need to support Linux versions with this bug.
+    
+    
+    svn:r709
+
+commit 44ceb945a37cc3b791b59b4ac1a9c669eb3e7e2e
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Thu Apr 10 19:34:50 2008 +0000
+
+     r19305 at catbus:  nickm | 2008-04-10 15:34:10 -0400
+     Fix bug 1938754: do not warn when epoll_create() fails with ENOSYS.
+    
+    
+    svn:r706
+
+commit 0c843507abcf18c8a7c766fa5b7a307b2030bd8f
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Thu Apr 10 19:25:11 2008 +0000
+
+     r19301 at catbus:  nickm | 2008-04-10 14:54:46 -0400
+     Forward-port: Correct the documentation on evbuffer_add_[v]printf: Fix for bug 1914464.
+    
+    
+    svn:r705
+
+commit 812d2fd8fd4dfab158bbc8e278a723363cf29e6e
+Author: Niels Provos <provos at gmail.com>
+Date:   Thu Apr 3 14:27:01 2008 +0000
+
+    proxy one more generator
+    
+    svn:r701
+
+commit a7e395512efd5622ad81dc0e10a41ce157301cee
+Author: Niels Provos <provos at gmail.com>
+Date:   Thu Apr 3 03:33:07 2008 +0000
+
+    slight refactoring
+    
+    svn:r700
+
+commit 193c06a7ed9730f5f08ca3958fbacee2c3e28e36
+Author: Niels Provos <provos at gmail.com>
+Date:   Mon Mar 31 02:04:34 2008 +0000
+
+    fix a bug in which evbuffer_add_vfprintf would loop forever;  avoid
+    fragmentation in evbuffer_expand by increasing the size of the last buffer
+    in the chain; as a result with have to keep track of the previous_to_last
+    chain;   provide a evbuffer_validate() function in the regression test to
+    make sure that all evbuffer are internally consistent.
+    
+    
+    svn:r699
+
+commit 3ef1f5041596672affcfe8af01d6d73eb86865de
+Author: Niels Provos <provos at gmail.com>
+Date:   Mon Mar 31 00:33:46 2008 +0000
+
+    do not delete uninitialized timeout event in evdns
+    
+    svn:r697
+
+commit 502929cdf21ba9433f9956c1e3f177a28a1d5b0f
+Author: Niels Provos <provos at gmail.com>
+Date:   Mon Mar 31 00:31:53 2008 +0000
+
+    add a check that base != NULL for threading; might want to drop this later
+    
+    svn:r696
+
+commit 8920ac4ddf509be3981b00d5b13ed349359e4834
+Author: Niels Provos <provos at gmail.com>
+Date:   Sun Mar 30 21:06:33 2008 +0000
+
+    make RPC replies use application/octet-stream
+    
+    svn:r694
+
+commit ca42671a1443b695bc9a7640d4eb223d1a34fbcc
+Author: Niels Provos <provos at gmail.com>
+Date:   Sat Mar 29 01:45:45 2008 +0000
+
+    make event methods static so that they are not exported; from Andrei Nigmatulin
+    
+    svn:r692
+
+commit cb50f615d4902a0703a604bf64b1a5d014bcbb70
+Author: Niels Provos <provos at gmail.com>
+Date:   Tue Mar 11 05:26:30 2008 +0000
+
+    rename lock create callback functions; as suggested by nick
+    
+    svn:r691
+
+commit c182baca1028af0b12142e26a571e180232039b1
+Author: Niels Provos <provos at gmail.com>
+Date:   Mon Mar 10 03:17:20 2008 +0000
+
+    switch thread support so that locks get allocated as they are needed.
+    
+    svn:r690
+
+commit 6a92ec0b0f43d7b074f856152d24a1f45384c787
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Tue Mar 4 19:47:01 2008 +0000
+
+     r18547 at catbus:  nickm | 2008-03-04 14:46:42 -0500
+     Fix compilation with --enable-gcc-warnings
+    
+    
+    svn:r689
+
+commit 0c49e456f1c80fed988342b90cf28bb1f88273e8
+Author: Niels Provos <provos at gmail.com>
+Date:   Tue Mar 4 05:42:20 2008 +0000
+
+    document thread functions
+    
+    svn:r688
+
+commit d5c15b2ebb609414358216cd62ca135b5658c104
+Author: Niels Provos <provos at gmail.com>
+Date:   Mon Mar 3 03:36:51 2008 +0000
+
+    make event_rpcgen.py generate code include event-config.h
+    
+    svn:r686
+
+commit 968fd5c06fc8dc5cf3cf6cad48fe7bc517d1fe99
+Author: Niels Provos <provos at gmail.com>
+Date:   Sun Mar 2 21:39:49 2008 +0000
+
+    forgot this header file
+    
+    svn:r685
+
+commit 558de9b3776bf378fe2416c1c86639bc7abef3db
+Author: Niels Provos <provos at gmail.com>
+Date:   Sun Mar 2 21:18:33 2008 +0000
+
+    Provide OpenSSL style support for multiple threads accessing the same event_base
+    
+    svn:r684
+
+commit 19dad16699ddf396c87e7c44c174e6716c0d160c
+Author: Niels Provos <provos at gmail.com>
+Date:   Sun Mar 2 01:46:00 2008 +0000
+
+    Do not free the kqop file descriptor in other processes, also allow it to be 0; from Andrei Nigmatulin
+    
+    svn:r682
+
+commit 593b5f99b334da9a5090792910d39b4de16d0f1f
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Fri Feb 29 22:33:01 2008 +0000
+
+     r18492 at catbus:  nickm | 2008-02-29 17:32:55 -0500
+     Add another missing _REENTRANT.
+    
+    
+    svn:r681
+
+commit 00382110b268891ced706f9d84ec80031213bc89
+Author: Niels Provos <provos at gmail.com>
+Date:   Fri Feb 29 05:23:49 2008 +0000
+
+    address nick's comments and make evbuffer_pullup more efficient
+    
+    svn:r680
+
+commit 72105927770952445009742663e95f04ba702806
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Thu Feb 28 20:57:01 2008 +0000
+
+     r18490 at catbus:  nickm | 2008-02-28 15:56:55 -0500
+     Replace www.google.com with google.com; fix EVDNS_MAIN code.
+    
+    
+    svn:r679
+
+commit 697177306f8dcf7781b5adc8bebe4dfae54f472a
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Thu Feb 28 20:41:34 2008 +0000
+
+     r18488 at catbus:  nickm | 2008-02-28 15:41:27 -0500
+     Define reentrant in evdns.c so that we get a declaration for strtok_r
+    
+    
+    svn:r678
+
+commit 0322ce0a3ba144cbf00f0a359c21aaf76e9f2063
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Thu Feb 28 18:36:03 2008 +0000
+
+     r18486 at catbus:  nickm | 2008-02-28 13:35:53 -0500
+     Make offsetof into evutil_offsetof.  Be a little more willing to call evbuffer_chain_align() from evbuffer_expand().  Clarify some docs, and add some XXX comments to note questionable areas.
+    
+    
+    svn:r677
+
+commit d71da6f73748c063814c07c47c0d6fad90b2e8dd
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Thu Feb 28 17:47:30 2008 +0000
+
+     r18484 at catbus:  nickm | 2008-02-28 12:47:20 -0500
+     Use event_warn() function, not fprintf-to-stderr.
+    
+    
+    svn:r676
+
+commit 0e7cbe6508a296952a05ddc9cb883fef0a13cf1e
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Thu Feb 28 17:38:52 2008 +0000
+
+     r18482 at catbus:  nickm | 2008-02-28 12:38:40 -0500
+     Fix GCC 4.2 warnings; fix includes in subdirs.
+    
+    
+    svn:r675
+
+commit 5c70ea4c9d8720525405063658ccd3e24b6966b1
+Author: Niels Provos <provos at gmail.com>
+Date:   Thu Feb 28 02:47:43 2008 +0000
+
+    improved code for evbuffer; avoids memcpy
+    
+    svn:r674
+
+commit eb9b958089bcf59ad712c747e294da95c6baf20c
+Author: Niels Provos <provos at gmail.com>
+Date:   Wed Feb 27 06:20:48 2008 +0000
+
+    add some basic tests for DELETE/PUT; from Josh Rotenberg
+    
+    svn:r673
+
+commit e7ad5493908731707df6c9434decb0fecb7767eb
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Tue Feb 26 20:24:29 2008 +0000
+
+     r14507 at tombo:  nickm | 2008-02-26 15:23:44 -0500
+     Patch from Tani Hosokawa: make some functions in http.c threadsafe.  Also, note some functions in http.c that still are not threadsafe.
+    
+    
+    svn:r671
+
+commit bd31d00fc19e426ed98a1483274e093789789f87
+Author: Niels Provos <provos at gmail.com>
+Date:   Tue Feb 26 04:54:19 2008 +0000
+
+    move signal callbacks closer to test code
+    
+    svn:r670
+
+commit 7470ce52c5670bae0ef2a9aa6a77988e0a77e0cb
+Author: Niels Provos <provos at gmail.com>
+Date:   Tue Feb 26 03:49:00 2008 +0000
+
+    increase listen queue for http sockets to 128
+    
+    svn:r669
+
+commit 960be58869f63c2a7814a984f7a34d69c159fbc3
+Author: Niels Provos <provos at gmail.com>
+Date:   Tue Feb 26 03:29:36 2008 +0000
+
+    deal correctly with http/1.0 and keep-alive
+    
+    svn:r667
+
+commit 0b114da2b64eac386b43933d3243100b4abf82ee
+Author: Niels Provos <provos at gmail.com>
+Date:   Tue Feb 26 03:12:07 2008 +0000
+
+    introduce evhttp_accept_socket() to accept from an already created socket
+    
+    svn:r666
+
+commit b14cd655d1eac14eed28ca749a4abf6889e2afca
+Author: Niels Provos <provos at gmail.com>
+Date:   Mon Feb 25 07:49:22 2008 +0000
+
+    add support (without tests!) to PUT/DELETE requests; from Josh Rotenberg
+    
+    svn:r662
+
+commit bb914ed9af5f509f80f72c289178c0e467864aed
+Author: Niels Provos <provos at gmail.com>
+Date:   Mon Feb 25 07:34:07 2008 +0000
+
+    do not insert event into list when evsel->add fails
+    
+    svn:r660
+
+commit 5a2ece1895d5cf4b3f07aad52ba88dc0edcb4990
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Sat Feb 23 19:04:26 2008 +0000
+
+     r18370 at catbus:  nickm | 2008-02-23 14:04:00 -0500
+     clean up some corner cases in evutil.h.
+    
+    
+    svn:r655
+
+commit 67bf29ad72572aaa433350438534ad78f0d0ec41
+Author: Niels Provos <provos at gmail.com>
+Date:   Sat Feb 23 06:02:04 2008 +0000
+
+    simplify evbuffer by removing orig_buffer
+    
+    svn:r654
+
+commit 87bef9e9740cba70007209eed70e3f55985d9a06
+Author: Niels Provos <provos at gmail.com>
+Date:   Wed Feb 20 21:49:09 2008 +0000
+
+    update event_base_loop documentation; from Tani Hosokawa
+    
+    svn:r652
+
+commit 0d26f1605f54527afb26d64e4fbfa2ff42bdb06e
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Mon Feb 18 20:13:27 2008 +0000
+
+     r18169 at catbus:  nickm | 2008-02-18 15:13:20 -0500
+     Rebuild and re-run configure etc when configure.in or Makefile.am changes.  Also, have automake do its dependency tracking.
+    
+    
+    svn:r651
+
+commit 11230f7e1620c663842e9993ac3cdaa29afec7c2
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Mon Feb 18 20:04:01 2008 +0000
+
+     r18145 at catbus:  nickm | 2008-02-18 15:02:20 -0500
+     Stop using deprecated autoconf code to set integer types; detect actual files to include more thoroughly.   This should make us work on solaris 9 again.  This should be a backport candidate, if it works.  Also, make all libevent code use ev_uint32_t etc, rather than uint_32_t.
+    
+    
+    svn:r649
+
+commit 506d4dbcf469f100ffd490098647384c294e82e1
+Author: Niels Provos <provos at gmail.com>
+Date:   Sun Feb 17 01:31:31 2008 +0000
+
+    remove NDEBUG ifdefs from evdns.c
+    
+    svn:r647
+
+commit 23ef0d093661a0a0219190b2bbbdf8254af0000b
+Author: Niels Provos <provos at gmail.com>
+Date:   Sun Feb 17 01:15:36 2008 +0000
+
+    allow regression code to be build even without Python installed
+    
+    svn:r645
+
+commit f09e9d91b14e549b0b98d26c2c248e283bf8a85f
+Author: Niels Provos <provos at gmail.com>
+Date:   Sun Feb 17 01:12:09 2008 +0000
+
+    1.3.99-trunk -> 1.4.99-trunk
+    
+    svn:r644
+
+commit d47907a73036b07ce61c7ce81d19cde6bc2c4056
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Sat Feb 16 20:50:02 2008 +0000
+
+     r14213 at tombo:  nickm | 2008-02-16 15:48:07 -0500
+     Patch from Scott Lamb: make http content length into a 64-bit value.
+    
+    
+    svn:r641
+
+commit 807ab182d08971651b3cff66353e3145fb8e4ef2
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Sat Feb 16 20:49:47 2008 +0000
+
+     r14211 at tombo:  nickm | 2008-02-16 15:28:54 -0500
+     Add new evutil_strtoll() function so we can apply 64-bit content-length patch from Scott Lamb in a portable way.
+    
+    
+    svn:r640
+
+commit 677a95864be43749c82705f9f8f3f56f0b8a1f4b
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Sat Feb 16 16:56:34 2008 +0000
+
+     r14205 at tombo:  nickm | 2008-02-16 11:55:57 -0500
+     Fix bug 1894184: add a CRLF after each chunk when sending chunked HTTP data.  Original patch from propanbutan.
+    
+    
+    svn:r637
+
+commit 8ab618916fc9ba06ff5e84d3ea858a8b4eec9f1b
+Author: Niels Provos <provos at gmail.com>
+Date:   Sat Feb 16 06:09:39 2008 +0000
+
+    event_base_get_method; from Springande Ulv
+    
+    svn:r635
+
+commit f38aec8bb733c57b5257bede429fa7f992131270
+Author: Niels Provos <provos at gmail.com>
+Date:   Tue Feb 12 06:01:46 2008 +0000
+
+    devpoll and evport need reinit; tested by W.C.A. Wijngaards
+    
+    svn:r633
+
+commit 2fde2217592db3be65a5b0d53e3ee054724139c4
+Author: Niels Provos <provos at gmail.com>
+Date:   Sat Feb 9 16:03:01 2008 +0000
+
+    address some compiler warnings in debug mode
+    
+    svn:r630
+
+commit 6baff52296073f668322e74f397e91ebb29030b9
+Author: Niels Provos <provos at gmail.com>
+Date:   Wed Feb 6 16:14:42 2008 +0000
+
+    EAGAIN check for event ports; from Wijngaards
+    
+    svn:r629
+
+commit 8c66d4e289290c58cfd34865e0405b549320d532
+Author: Niels Provos <provos at gmail.com>
+Date:   Sat Jan 26 07:29:57 2008 +0000
+
+    remove pending timeouts on event_base_free
+    
+    svn:r627
+
+commit 9859bc783adcd51729b3d7563902ac8caca67b42
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Mon Dec 31 20:47:12 2007 +0000
+
+     r15764 at tombo:  nickm | 2007-12-31 15:46:16 -0500
+     Forward-port from 1.4 branch: Make generated rpc files build-depend on event_rpcgen.
+    
+    
+    svn:r626
+
+commit 992bc85b96b3ca3eeff05e030468392894cc7195
+Author: Niels Provos <provos at gmail.com>
+Date:   Mon Dec 31 20:42:21 2007 +0000
+
+    dereference the right field and associate the right connection
+    
+    svn:r624
+
+commit 2460aa5939c91fe75761c75c3d0a90f32b9a73b2
+Author: Niels Provos <provos at gmail.com>
+Date:   Mon Dec 31 19:33:30 2007 +0000
+
+    allow hooks to get access to the connection object
+    
+    svn:r623
+
+commit 5a5609c75317a8c011b02daf3853ebd3b6bab9fc
+Author: Niels Provos <provos at gmail.com>
+Date:   Sat Dec 29 22:45:54 2007 +0000
+
+    allow association of meta data with RPC requests for hook processing
+    
+    svn:r622
+
+commit 024804cce7101c5d09bb58e85d4ca7cc83f3e44d
+Author: Niels Provos <provos at gmail.com>
+Date:   Fri Dec 28 07:58:29 2007 +0000
+
+    the win32 changes for regress_http broke the regression test under unix.  making the socket non-blocking can return -1 on connect; so now, we need to check the errno; not sure if that is supported under windows.
+    
+    
+    svn:r621
+
+commit 955c6abf5327f3ebfa01d58a870a458f6aca0504
+Author: Niels Provos <provos at gmail.com>
+Date:   Fri Dec 28 00:36:47 2007 +0000
+
+    pausing an rpc via a hook needs to deal with the fact that http callbacks free the request after they return; provide a way for a callback to take ownership of the request structure; the user then needs to explicitly free it.
+    
+    
+    svn:r620
+
+commit 6d291da240607b5ab6a3931ae761439c1880a9a4
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Fri Dec 28 00:34:05 2007 +0000
+
+    Fix at least two bugs that are keeping the HTTP regression tests from running on windows.  There are some more bugs somewhere, since the HTTP regression tests still fail on windows.  But now they fail less.
+    
+    svn:r619
+
+commit 819d4a33d766d1d585f73abb9d7c77d4f862970f
+Author: Niels Provos <provos at gmail.com>
+Date:   Thu Dec 27 23:17:24 2007 +0000
+
+    allow hooks to pause RPC processing; this will allow hooks to do meaningful work before resuming the
+    RPC processing; this is not backwards compatible.
+    
+    
+    svn:r617
+
+commit 76945273c674d51f1c2f12e646a5248a2f52ed0b
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Thu Dec 27 21:37:52 2007 +0000
+
+     r15733 at tombo:  nickm | 2007-12-27 16:37:33 -0500
+     Add another "what's new" file -- this one for svn trunk
+    
+    
+    svn:r616
+
+commit 616a64c87cd8c8f0348e2bee1cba5b87b3e760c4
+Author: Niels Provos <provos at gmail.com>
+Date:   Thu Dec 27 20:08:21 2007 +0000
+
+    additional add argument was missing const qualifier
+    
+    
+    svn:r615
+
+commit 7e3a7af7d068a9b97d5d802d104cb30dd75a0e07
+Author: Niels Provos <provos at gmail.com>
+Date:   Mon Dec 24 23:59:41 2007 +0000
+
+    support string arrays in event_rpcgen
+    
+    svn:r613
+
+commit 03589ccb12c61e4ec9879298ddcceb80c930c008
+Author: Niels Provos <provos at gmail.com>
+Date:   Mon Dec 24 22:49:30 2007 +0000
+
+    rollback r594: restructuring to make event activation independent.
+    changes are going to wait for api design
+    
+    
+    svn:r612
+
+commit 68725dc8bddb083ede57a89ca5bba27ea905838b
+Author: Niels Provos <provos at gmail.com>
+Date:   Sun Dec 23 07:38:11 2007 +0000
+
+    support integer arrays in rpc structures;  this involved some refactoring of the event_rpcgen code, so that other types should be able to get arrays fairly easily
+    
+    
+    svn:r609
+
+commit a5176a65ccfcec344d4827ab4ea1cb816bdba778
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Thu Dec 20 22:45:30 2007 +0000
+
+    Fix a win32 warning in regress.c
+    
+    svn:r608
+
+commit 127888bded88781b93be0b95b27737433ba7d516
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Thu Dec 20 22:20:06 2007 +0000
+
+     r17291 at catbus:  nickm | 2007-12-20 17:19:55 -0500
+     Add tree.h to distributed files in trunk.
+    
+    
+    svn:r607
+
+commit fdafb66bb56d5982fa88243d4fd6930c28aba4ee
+Author: Niels Provos <provos at gmail.com>
+Date:   Wed Dec 19 06:33:05 2007 +0000
+
+    removed linger from http server socket; reported by Ilya Martynov
+    
+    
+    svn:r604
+
+commit d4bdbca847ff1c788d6467e915d0b94e57da35bb
+Author: Niels Provos <provos at gmail.com>
+Date:   Tue Dec 18 03:54:19 2007 +0000
+
+    add -Wstrict-aliasing and remove bogus evtag_test from event.h
+    
+    
+    svn:r602
+
+commit d80c1c368959de2b5383eb3c2a921699e04e809d
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Sun Dec 16 19:34:09 2007 +0000
+
+     r17185 at catbus:  nickm | 2007-12-16 14:33:40 -0500
+     Fix compilation with --enable-gcc-warnings enabled.
+    
+    
+    svn:r599
+
+commit d56a34e4669afa708831554e78afe1759ff774d9
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Sun Dec 16 19:33:52 2007 +0000
+
+     r16991 at catbus:  nickm | 2007-12-06 15:05:56 -0500
+     Move event_init in regress.c to the function that actually messed up the current_base value.
+    
+    
+    svn:r598
+
+commit 7ab26a2c3296738fd96842f526858271380cce38
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Sun Dec 16 18:55:16 2007 +0000
+
+     r15519 at tombo:  nickm | 2007-12-16 13:54:12 -0500
+     Fix for bug 1846282: accept as well-formed DNS replies with questions but no answers.
+    
+    
+    svn:r595
+
+commit 7aa845b73b93f84bf46276bb5669ee0cb5e81b6c
+Author: Niels Provos <provos at gmail.com>
+Date:   Sun Dec 16 04:10:30 2007 +0000
+
+    restructure the code to make event activation independent of regular event logic
+    
+    svn:r594
+
+commit 622f69cc5a2d3e40e60c203bdf2c3a8c68539609
+Author: Niels Provos <provos at gmail.com>
+Date:   Fri Dec 14 07:12:05 2007 +0000
+
+    forgot to make new member optional
+    
+    svn:r590
+
+commit 850534734be9e18ed24630d506bc252816229b77
+Author: Niels Provos <provos at gmail.com>
+Date:   Thu Dec 13 06:36:54 2007 +0000
+
+    fix a bug with event_rpcgen for integers
+    
+    svn:r588
+
+commit ffd606cd6dbb0df57a2d3c7f2ae4e68268ca4ea6
+Author: Niels Provos <provos at gmail.com>
+Date:   Thu Dec 13 06:14:18 2007 +0000
+
+    prefix {encode,decode}_tag functions with evtag to avoid collisions
+    
+    svn:r587
+
+commit 3b345f3e2d7870ce23a14e1c11217dbd7aa62d8e
+Author: Niels Provos <provos at gmail.com>
+Date:   Wed Dec 12 07:02:55 2007 +0000
+
+    pull setters/getters out of RPC structures to reduce their memory footprint
+    
+    
+    svn:r585
+
+commit ba48719946f2f1ea80db28b77dc23b27010e01e5
+Author: Niels Provos <provos at gmail.com>
+Date:   Wed Dec 12 04:39:42 2007 +0000
+
+    support for 32-bit tag numbers in rpc structures
+    
+    svn:r583
+
+commit e8b916c36e4b042e14154242d548e0401bba7832
+Author: Niels Provos <provos at gmail.com>
+Date:   Sun Dec 9 05:07:48 2007 +0000
+
+    update ChangeLog; forgot about it
+    
+    svn:r582
+
+commit fbe24f43ab56deb2fd50fa4ca1756069c2c9123e
+Author: Niels Provos <provos at gmail.com>
+Date:   Sun Dec 9 05:07:20 2007 +0000
+
+    remove obsoleted recalc code
+    
+    svn:r581
+
+commit fa89d661d91b584df308c097c0eec2d949b6fc55
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Thu Dec 6 19:40:49 2007 +0000
+
+    Adjust more unit tests to pass on win32.
+    
+    svn:r580
+
+commit fd418645ffe8e0cd0002efaa1ad4cba3dc183af3
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Thu Dec 6 19:36:49 2007 +0000
+
+    Add winsock init functions to bench.c so it can run on win32.
+    
+    svn:r579
+
+commit 9cc67e5f78c9d9f783a6a55514e2b604198de09e
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Thu Dec 6 19:35:55 2007 +0000
+
+    Compile regression tests by default even on win32.
+    
+    svn:r578
+
+commit 77861fa7f177586d361059563987f691e8b7d143
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Thu Dec 6 19:20:24 2007 +0000
+
+     r16931 at catbus:  nickm | 2007-12-06 14:19:58 -0500
+     Fix warnings in debug messages
+    
+    
+    svn:r577
+
+commit cd666f8071baee5cc4834738253d82d86a5307a1
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Thu Dec 6 19:18:14 2007 +0000
+
+    Debug new win32 code: make bufferevents test pass.
+    
+    svn:r576
+
+commit 78d0de30b8e08429c57ccfbf667655e334042ab3
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Thu Dec 6 18:38:50 2007 +0000
+
+    Fix compile warnings and errors in win32 build.
+    
+    svn:r575
+
+commit 2e2104f4cea0932a04d98452ab36f2c41786c5d7
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Thu Dec 6 18:13:03 2007 +0000
+
+     r15172 at tombo:  nickm | 2007-12-06 12:54:37 -0500
+     Rewrite win32.c to use a red-black tree to map sockets to events.  This changes the performance from O(N^2) to O(N lg N).  Needs testing.  (This was made possible by recent changes to the implementation of non-persistent events.)
+    
+    
+    svn:r574
+
+commit 3206bbca46f55e4eb4570566a9566dd10c182c6d
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Thu Dec 6 18:12:56 2007 +0000
+
+     r15171 at tombo:  nickm | 2007-12-06 12:47:47 -0500
+     Use GCC attributes (where available) to verify printf type-correctness.  Fix some bugs this turned up.
+    
+    
+    svn:r573
+
+commit 1e435af17e658c973f644c9c751ab58296413fcb
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Thu Dec 6 18:12:44 2007 +0000
+
+     r15170 at tombo:  nickm | 2007-12-06 12:38:03 -0500
+     Fix a warning in regress.c
+    
+    
+    svn:r572
+
+commit 5482192bb3cd0d4ece6fdcc641f85ec852c0437d
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Thu Dec 6 04:36:18 2007 +0000
+
+     r15166 at tombo:  nickm | 2007-12-05 23:35:10 -0500
+     Apply patch from bug 1841036: set the base of the correct event in evhttp_connection_start_detectclose()
+    
+    
+    svn:r571
+
+commit 60103d25a96c46043386edaa3b78175225ff0189
+Author: Niels Provos <provos at gmail.com>
+Date:   Sat Dec 1 16:36:00 2007 +0000
+
+    remove duplicate submit of test_evbuffer_readln
+    
+    svn:r569
+
+commit 395dd198cb64f03bf0fc12a4dbb33999906dc9d7
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Sat Dec 1 09:30:07 2007 +0000
+
+     r15096 at tombo:  nickm | 2007-12-01 04:29:39 -0500
+     Test for corner-cases of re-adding non-persistent events from one another's handlers
+    
+    
+    svn:r568
+
+commit d73cf1e1f28c7df624488749276f9ebc1e13f4d3
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Sat Dec 1 09:29:52 2007 +0000
+
+    svn:r567
+
+commit 876c3af7b042624a9c0efd70e1cc571e0a852fe6
+Author: Niels Provos <provos at gmail.com>
+Date:   Fri Nov 30 02:21:33 2007 +0000
+
+    add another benchmark that tests cascading events
+    
+    svn:r566
+
+commit 74b3db50ae9cdbc9ffcafd761251935d7f1a2216
+Author: Niels Provos <provos at gmail.com>
+Date:   Thu Nov 29 06:08:24 2007 +0000
+
+    always generate Date and Content-Length headers for HTTP/1.1
+    
+    svn:r564
+
+commit f175befac9e6c8a26ce1f99810816e2d03b5cd86
+Author: Niels Provos <provos at gmail.com>
+Date:   Thu Nov 29 04:03:36 2007 +0000
+
+    small improvements to evhttp documentation
+    
+    svn:r562
+
+commit eeb5e4cd883536ac95c746d42cd844047590f45b
+Author: Niels Provos <provos at gmail.com>
+Date:   Thu Nov 29 02:52:32 2007 +0000
+
+    a bug in the regression test of event_reinit caused epoll to fail
+    
+    svn:r560
+
+commit ef085e84c6614fef3110c6c3448874d0f7ab44f1
+Author: Niels Provos <provos at gmail.com>
+Date:   Tue Nov 27 06:45:25 2007 +0000
+
+    we need to pass the evbase to evsel->add
+    
+    svn:r558
+
+commit e2e4cf1f6c847a3987af140c21b54903659e1127
+Author: Niels Provos <provos at gmail.com>
+Date:   Tue Nov 27 06:11:28 2007 +0000
+
+    more complete test for forking behavior
+    
+    svn:r556
+
+commit 5f3e31596b1a231a6041b9a1302d8059293a9b02
+Author: Niels Provos <provos at gmail.com>
+Date:   Tue Nov 27 01:39:10 2007 +0000
+
+    move EV_PERSIST handling out of the event backends
+    
+    svn:r555
+
+commit a7a7a1904507bb7fcc22a3c045c030d2837c3510
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Mon Nov 26 19:25:09 2007 +0000
+
+     r16735 at catbus:  nickm | 2007-11-26 14:24:58 -0500
+     Fix test for EVBUFFER_LENGTH in evhttp_make_header().  Since appending an empty buffer to another is a no-op, this is not really a bug-fix.
+    
+    
+    svn:r554
+
+commit ce4ee418d2fffd0a5ce7208e35a19a2fc7205826
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Mon Nov 26 19:18:49 2007 +0000
+
+     r16733 at catbus:  nickm | 2007-11-26 14:18:25 -0500
+     Add an --enable-gcc-warnings option (lifted from Tor) to the configure script.  When provided, and when we are using GCC, we enable a bunch of extra GCC warnings in the compiler.  Also, make the code all build happily with these warnings.
+    
+    
+    svn:r553
+
+commit 1120f04f3eaafe98259ef286eecb648337b2214f
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Sun Nov 25 21:53:06 2007 +0000
+
+     r16731 at catbus:  nickm | 2007-11-25 16:52:53 -0500
+     Replace all fds on non-unix-specific APIs with evutil_socket_t, which is int on unix and intptr_t on win32.
+    
+    
+    svn:r552
+
+commit cbf9cfdf4507651ba39489158b17cf11703bb43d
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Sun Nov 25 21:35:02 2007 +0000
+
+     r16729 at catbus:  nickm | 2007-11-25 16:34:50 -0500
+     Add missing changelog entry for last commit.
+    
+    
+    svn:r551
+
+commit 6773a59721365a793bfbf8da91c512a449bdaf4f
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Sun Nov 25 21:32:26 2007 +0000
+
+     r14953 at tombo:  nickm | 2007-11-25 15:56:40 -0500
+     Replace evbuffer_readline with a more powerful evbuffer_readln that can handle more EOL styles, and that can give useful results when there are NUL characters inside the returned values. Includes regression tests.
+    
+    
+    svn:r550
+
+commit ab010e161f5877f99a3122bf2726f3a40ceb3204
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Sun Nov 25 21:32:15 2007 +0000
+
+     r14952 at tombo:  nickm | 2007-11-25 14:47:45 -0500
+     Fix an unused variable warning.
+    
+    
+    svn:r549
+
+commit d1ad9403cb39da4c5daae9bd7ab0fc3e6b4da4b9
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Sun Nov 25 21:28:51 2007 +0000
+
+    svn:r547
+
+commit fa95fe469aa666de53505f565bb69c8cd16ae6d8
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Sun Nov 25 21:28:43 2007 +0000
+
+     r16704 at catbus:  nickm | 2007-11-19 15:58:54 -0500
+     Check return value of event_add in signal.c
+    
+    
+    svn:r546
+
+commit 2823cb057927110719a7203c2346d6be8aa8468f
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Sun Nov 25 17:15:28 2007 +0000
+
+     r14944 at tombo:  nickm | 2007-11-25 12:12:28 -0500
+     Make kqueue pass more unit tests.
+    
+    
+    svn:r544
+
+commit 566ca340224c39e517f14d7a45cde68b874acde1
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Sun Nov 25 17:15:17 2007 +0000
+
+    svn:r543
+
+commit 555e300ab282812f6fe4d776908584275993ba76
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Sun Nov 25 17:14:24 2007 +0000
+
+     r14940 at tombo:  nickm | 2007-11-25 12:01:37 -0500
+     New mm-internal.h header that includes internal memory management functions.
+    
+    
+    svn:r542
+
+commit 7eb250e9c52813f30fef256b97f08a6871fd381a
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Sun Nov 25 17:14:19 2007 +0000
+
+     r14939 at tombo:  nickm | 2007-11-25 11:59:26 -0500
+     New function event_set_mem_functions to replace internal calls to malloc, free, etc with a user-supplied functions.
+    
+    
+    svn:r541
+
+commit 98b5453ecdd6a474ba8c3495285e607d5b7a8e57
+Author: Niels Provos <provos at gmail.com>
+Date:   Sun Nov 25 07:11:59 2007 +0000
+
+    forgot to dealloc previous base
+    
+    svn:r540
+
+commit 88897852fc72c2cd43c057f2fc550b5842d5b857
+Author: Niels Provos <provos at gmail.com>
+Date:   Sun Nov 25 06:57:59 2007 +0000
+
+    provide event_reinit() to reinitialized an event_base after fork - necessary for epoll/kqueue
+    
+    svn:r539
+
+commit 8c3396b0c60bd6c0dcc4f8baeb9174810247e557
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Thu Nov 22 16:41:29 2007 +0000
+
+     r14935 at tombo:  nickm | 2007-11-22 11:36:54 -0500
+     Always set test_ok to zero after finishing a test, and before starting one.  This turns up some failures we had been missing.
+    
+    
+    svn:r537
+
+commit 1c23e219527b8342639f49e0884e209f7232502a
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Sat Nov 17 22:21:42 2007 +0000
+
+     r14931 at tombo:  nickm | 2007-11-17 17:21:09 -0500
+     Patch from Scott Lamb: Implement event_{base_}loopbreak.  Includes documentation and tests.  From sf.net Feature Request 1826546.
+    
+    
+    svn:r535
+
+commit 70248ca8ad0dd426798d1e11328970b1f537e505
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Sat Nov 17 22:21:33 2007 +0000
+
+     r14930 at tombo:  nickm | 2007-11-17 17:01:14 -0500
+     documentation fix on loopexit and elsewhere from Scott Lamb.
+    
+    
+    svn:r534
+
+commit af6f331a0b777bedab38bfed254310134617c9e4
+Author: Niels Provos <provos at gmail.com>
+Date:   Sat Nov 17 01:32:30 2007 +0000
+
+    use a const pointer for bufferevent_write
+    
+    svn:r531
+
+commit f586f42885b7558b1617396f53f19299f7c46ba8
+Author: Niels Provos <provos at gmail.com>
+Date:   Wed Nov 14 17:52:21 2007 +0000
+
+    provide event_base_new() as a mechanism for not setting the current_global
+    
+    
+    svn:r529
+
+commit 56934d5d977892afa1342c8c3f55035989626bc5
+Author: Niels Provos <provos at gmail.com>
+Date:   Tue Nov 13 17:36:58 2007 +0000
+
+    debug cleanups in signal.c; from Christopher Layne
+    
+    svn:r527
+
+commit d50afbb3700f6938387128c0e9283b9b4987d3c9
+Author: Niels Provos <provos at gmail.com>
+Date:   Tue Nov 13 03:32:10 2007 +0000
+
+    free minheap; from Christopher Layne
+    
+    svn:r525
+
+commit d1e03054a30a79ee0574d8d2b98395f6445d63a7
+Author: Niels Provos <provos at gmail.com>
+Date:   Mon Nov 12 07:34:29 2007 +0000
+
+    clean up event-config.h to fix make distcheck; from sourceforge tracker
+    
+    svn:r521
+
+commit 3742868ab54c82bc77686f8f89f3cae7191a2fe1
+Author: Niels Provos <provos at gmail.com>
+Date:   Mon Nov 12 06:54:35 2007 +0000
+
+    We do not need to specially remove a timeout before calling event_del; patch from Christopher Layne.
+    
+    svn:r519
+
+commit 568095bfa1ba6c9fffe93250420471baf13c574f
+Author: Niels Provos <provos at gmail.com>
+Date:   Mon Nov 12 05:34:10 2007 +0000
+
+    srcdir for verify; from Christopher Layne
+    
+    svn:r516
+
+commit 7add3d364197ff8ec3dce91cd8110a1f3fcf231e
+Author: Niels Provos <provos at gmail.com>
+Date:   Mon Nov 12 02:44:02 2007 +0000
+
+    stick autogen.sh into EXTRA_DIST
+    
+    svn:r515
+
+commit df667b96ea57a2d00b5c3cdd150a675591ffacac
+Author: Niels Provos <provos at gmail.com>
+Date:   Mon Nov 12 02:32:35 2007 +0000
+
+    we no longer need acconfig.h
+    
+    svn:r510
+
+commit 4a1a2e0d52a83a3b38f651a4480af3d8f7dcf435
+Author: Niels Provos <provos at gmail.com>
+Date:   Mon Nov 12 02:31:07 2007 +0000
+
+    Make the logic for active events work better with internal events; patch from Christopher Layne
+    
+    svn:r509
+
+commit bbed0954b18de634a8fed50b8b08af6ea3bf3dae
+Author: Niels Provos <provos at gmail.com>
+Date:   Sun Nov 11 03:05:03 2007 +0000
+
+    revert r505; it introduced errors in epoll
+    
+    svn:r508
+
+commit 97917e68e7b225ee0d2d77963e30290d095a74e6
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Sat Nov 10 07:49:13 2007 +0000
+
+     r16588 at catbus:  nickm | 2007-11-10 02:47:14 -0500
+     Another include for sample.  Patch from Christopher Layne.
+    
+    
+    svn:r507
+
+commit 321dfd55d4d37ad7060272abf933adaf9d22f7b6
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Sat Nov 10 05:18:17 2007 +0000
+
+     r16585 at catbus:  nickm | 2007-11-10 00:16:11 -0500
+     Patch from Christopher Layne: Make event_del() restore previous signal handlers, not the default.
+    
+    
+    svn:r506
+
+commit 9f0f3d6da29f5e323c025f2955a9d21a0efa4af0
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Sat Nov 10 05:18:11 2007 +0000
+
+     r16584 at catbus:  nickm | 2007-11-10 00:00:59 -0500
+     Patch from Christopher Lane: reduce branch count in epoll_dispatch.c and generally improve clarity.
+    
+    
+    svn:r505
+
+commit cabcd62f38345d31a37b62b08fb166f34c8bc4f5
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Thu Nov 8 17:36:28 2007 +0000
+
+     r16578 at catbus:  nickm | 2007-11-08 12:34:51 -0500
+     The == operator in shell is a bash-ism; do not use it in autogen.sh
+    
+    
+    svn:r503
+
+commit 8fd2124ef9e12228f41023bcf02bdbdf6800a208
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Wed Nov 7 22:57:08 2007 +0000
+
+     r16556 at catbus:  nickm | 2007-11-07 17:55:39 -0500
+     MSVC6 does not seem to define a useful "what is the name of this function" macro
+    
+    
+    svn:r502
+
+commit 74e5e8f439f86e6e5ac699f0513beb4a19d115de
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Wed Nov 7 22:35:15 2007 +0000
+
+     r16554 at catbus:  nickm | 2007-11-07 17:33:49 -0500
+     Mention autogen.sh in the README, now that we are more vocally encouraging people to try svn.
+    
+    
+    svn:r501
+
+commit 92cd548f80336e26fb44b519248476bf345be0aa
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Wed Nov 7 21:14:04 2007 +0000
+
+     r16544 at catbus:  nickm | 2007-11-07 16:12:37 -0500
+     Oops; forgot the log entry.
+    
+    
+    svn:r500
+
+commit 4e1ec3e05e39699025e087929b84f3634929ae4c
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Wed Nov 7 21:01:26 2007 +0000
+
+    Make all the C files in the libraries compile under MSVC 2005 Express.  There are still a few warnings, and probably some subtle issues, but it's better than nothing.
+    
+    svn:r499
+
+commit 45c7ab25de2dea155332cc144c1f94f5c073c919
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Wed Nov 7 07:33:36 2007 +0000
+
+     r16510 at catbus:  nickm | 2007-11-07 02:29:42 -0500
+     Try not to shadow local variables or function arguments.
+    
+    
+    svn:r498
+
+commit e72661d2ff04ce1020fce74ecb97130fb5ea9aab
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Wed Nov 7 07:33:31 2007 +0000
+
+     r16509 at catbus:  nickm | 2007-11-07 02:08:32 -0500
+     Stop using C++ style comments.
+    
+    
+    svn:r497
+
+commit 1f50f412834c8b150a37bb5742f6702537093d52
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Wed Nov 7 07:33:26 2007 +0000
+
+     r16508 at catbus:  nickm | 2007-11-07 02:01:03 -0500
+     Note a dubious point in http.c
+    
+    
+    svn:r496
+
+commit 7feba57010f4d5024083abc055864f292f9a6063
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Wed Nov 7 07:33:21 2007 +0000
+
+     r16507 at catbus:  nickm | 2007-11-07 01:34:55 -0500
+     Never assign a string constant to a non-const char *.
+    
+    
+    svn:r495
+
+commit a3f122d66756626bdd69ad00757ea8208cc38021
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Wed Nov 7 07:33:16 2007 +0000
+
+     r16506 at catbus:  nickm | 2007-11-07 01:29:59 -0500
+     Make all rpc and http functions not prototyped in evrpc.h and evhttp.h into static functions.  I believe that these functions were meant to be private, yes?
+    
+    
+    svn:r494
+
+commit 794857242f09a687f73200d5e95e6d7311900eb4
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Wed Nov 7 06:07:54 2007 +0000
+
+    Remove spurious #include <sys/tree.h> in win32.c.
+    
+    svn:r493
+
+commit f74e7258fd29a341b4ecf08dfdb83e50aaee3255
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Wed Nov 7 06:01:57 2007 +0000
+
+     r16501 at catbus:  nickm | 2007-11-07 01:00:31 -0500
+     This is one of those patches which will either make matters far
+     simpler after the bugs shake out, or will get reverted pretty quick
+     once we realize that it is a stupid idea.
+    
+     We now post-process the config.h file into a new event-config.h file,
+     whose macros are prefixed with _EVENT_ and which is thus safe for
+     headers to include.  Using this, we can define replacement timeval
+     manipulation functions in evutil.h, and use them uniformly through our
+     code.  We can also detect which headers are needful in event.h, and
+     include them as required.
+    
+     This is also the perfect time to remove the long-deprecated acconfig.h
+     file, so that autoheader no longer warns.
+    
+     Should resolve the following issues:
+    
+     [ 1826530 ] Header files should have access to autoconf output.
+     [ 1826545 ] acconfig.h is deprecated.
+     [ 1826564 ] On some platforms, event.h can't be included alone.
+    
+    
+    
+    svn:r492
+
+commit d0ce7d4ed7f6f269fdc93039d739fecf28495c24
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Wed Nov 7 06:01:45 2007 +0000
+
+     r16500 at catbus:  nickm | 2007-11-07 00:27:44 -0500
+     Remove from the (deprecated) acconfig.h file stubs that are already generated by autoheader.
+    
+    
+    svn:r491
+
+commit 206d43363817c4dc77976f85a9df04a411c7913c
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Wed Nov 7 05:02:21 2007 +0000
+
+     r16497 at catbus:  nickm | 2007-11-07 00:01:02 -0500
+     Resolve issue 1826588: make event_base_free() succeed even if there are pending non-INTERNAL events still in the base.  This can leak memory and fds if used injudiciously, but at least it no longer crashes.
+    
+    
+    svn:r490
+
+commit 29420339dcf85d133313083823db7cf68c21fd32
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Wed Nov 7 05:02:14 2007 +0000
+
+     r16496 at catbus:  nickm | 2007-11-06 23:58:52 -0500
+     Clarify some doxygen in event.h
+    
+    
+    svn:r489
+
+commit bab0e6d440f1c5dc6615bd1b72712c663929b87f
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Wed Nov 7 04:28:54 2007 +0000
+
+     r16492 at catbus:  nickm | 2007-11-06 23:27:32 -0500
+     Fix unit tests so that an outdated nameserver means "Skip IPv6 tests", not "Abort."
+    
+    
+    svn:r487
+
+commit 7c507668d7ba0e4488730ce1d607673dd2585f73
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Wed Nov 7 03:52:20 2007 +0000
+
+     r16489 at catbus:  nickm | 2007-11-06 22:51:05 -0500
+     Do not use "class" as identifier in evdns.h; but use a backward-compatible fix. (Should fix bug 1826515, originally reported by Roger Clark)
+    
+    
+    svn:r486
+
+commit e9564eceb349d76cf83cffb2291b34d59ac9a4a0
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Wed Nov 7 03:40:26 2007 +0000
+
+     r16487 at catbus:  nickm | 2007-11-06 22:38:44 -0500
+     Remove rtsig method, as discussed in July.  It hasn't compiled for quite a while, and nobody has seemed to miss it much.  Please let us know if this was a bad call. [Tracker issue 1826539].
+    
+    
+    svn:r485
+
+commit 4555f755094e25e5bd1b6483e09a5bfc9984764f
+Author: Niels Provos <provos at gmail.com>
+Date:   Wed Nov 7 03:25:03 2007 +0000
+
+    remove tree.h from EXTRA_DIST; from Charles Kerr
+    
+    svn:r484
+
+commit 3c1bbca672a43f6457fad0b0d6d6649a17375368
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Wed Nov 7 02:30:17 2007 +0000
+
+     r14744 at tombo:  nickm | 2007-11-06 21:30:11 -0500
+     Fix coding error: patch from Charles Kerr.
+    
+    
+    svn:r483
+
+commit a527151846e06aac3674fae5b79d5ba6ec75154a
+Author: Niels Provos <provos at gmail.com>
+Date:   Wed Nov 7 01:48:44 2007 +0000
+
+    make event_init should return struct event_base *
+    
+    svn:r481
+
+commit 81802bf98c2608ec96c8fa299ecb761a26b0755c
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Tue Nov 6 20:57:37 2007 +0000
+
+     r16473 at catbus:  nickm | 2007-11-06 15:55:35 -0500
+     Increment MAX_ADDRS in evdns so as to be quite large.  This is not as good as a general solution, but it may be good enough for practical use.
+    
+    
+    svn:r479
+
+commit d257a4c0d6527fff60bfa19f05b7937213375695
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Tue Nov 6 20:57:32 2007 +0000
+
+     r16454 at catbus:  nickm | 2007-11-06 09:59:45 -0500
+     Small code cleanups in epoll_dispatch(): remove a needless variable and some redundant conditionals.
+    
+    
+    svn:r478
+
+commit d7d91461c853d87fa78b467d6c5fdf386d9c10e1
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Tue Nov 6 03:04:49 2007 +0000
+
+     r14732 at tombo:  nickm | 2007-11-05 22:03:28 -0500
+     Quick hack to make evhttp.h build when there is no TAILQ to be found.  Based on patch from Paul Fisher.  We could perhaps do this more elegantly, but it _does_ need to be done.
+    
+    
+    svn:r475
+
+commit dc2317f921f6d0041ae387cccdf7e0368f4920b0
+Author: Niels Provos <provos at gmail.com>
+Date:   Sun Nov 4 06:35:29 2007 +0000
+
+    improve doxygen documentation
+    
+    svn:r473
+
+commit 1bcb112b20ae193f05a9e3381e6fe13f36ccc7b1
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Sun Nov 4 02:21:31 2007 +0000
+
+     r14698 at tombo:  nickm | 2007-11-03 22:20:23 -0400
+     Use libtool versioning correctly. Add comment to Makefile.am explaining how to keep this working.
+    
+    
+    svn:r472
+
+commit 22bd8b00942732ae1ac8a77523a509c327a26623
+Author: Niels Provos <provos at gmail.com>
+Date:   Sat Nov 3 23:54:27 2007 +0000
+
+    remove last vestiges of RBTREE
+    
+    svn:r471
+
+commit 2026b21598d8f6f47148db088dbb76a6cc9e0a59
+Author: Niels Provos <provos at gmail.com>
+Date:   Sat Nov 3 23:53:49 2007 +0000
+
+    remove last vestiges of RBTREE
+    
+    svn:r470
+
+commit 881731028b90bb196450105ea04b3d22107052d8
+Author: Niels Provos <provos at gmail.com>
+Date:   Sat Nov 3 23:45:38 2007 +0000
+
+    split libevent into two extra libraries libevent_core and libevent_extra
+    
+    
+    svn:r469
+
+commit 1d3a008af3433485256d8386366ceaac4d48af5f
+Author: Niels Provos <provos at gmail.com>
+Date:   Sat Nov 3 22:51:26 2007 +0000
+
+    provide hooks for outgoing pools; associate a base with a pool
+    
+    svn:r468
+
+commit 30ae40cc52300a79b8153db3ca40b77c544de76c
+Author: Niels Provos <provos at gmail.com>
+Date:   Sat Nov 3 18:04:53 2007 +0000
+
+    switch timeouts to a min heap; from Maxim Yegorushkin
+    
+    svn:r467
+
+commit 65236aa8578aeb17c088b41818da17311672aed1
+Author: Niels Provos <provos at gmail.com>
+Date:   Fri Nov 2 06:34:04 2007 +0000
+
+    simple hooks for processing incoming and outgoing rpcs
+    
+    
+    svn:r466
+
+commit 18ac92486fc7b4f2ac7092ce56dc89ebad41c729
+Author: Niels Provos <provos at gmail.com>
+Date:   Sat Oct 27 17:50:07 2007 +0000
+
+    Solaris event port improvements
+    
+    
+    svn:r464
+
+commit ccdc59905b36686d3331607362197e08f1c8b0ae
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Thu Oct 18 17:49:52 2007 +0000
+
+     r15922 at catbus:  nickm | 2007-10-18 13:48:46 -0400
+     Patch to event.3 from Christopher Lane.
+    
+    
+    svn:r463
+
+commit c91794e25dc412ff102b700eeba3c1e519e485dc
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Fri Oct 12 18:02:56 2007 +0000
+
+    Instead of read/write in regress.c, use send/recv.  Now all of the win32 regression tests pass, except for http and rpc.
+    
+    svn:r461
+
+commit e1f09dfe5c7fa0736318ec42e77d7884db390085
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Fri Oct 12 17:55:37 2007 +0000
+
+    Fix evutil code to use correct EVUTIL_SET_SOCKET_ERROR macro.
+    
+    svn:r460
+
+commit 49ede3be00c7461d54fa289005db8ef6e8e76225
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Wed Oct 3 17:19:22 2007 +0000
+
+     r15517 at catbus:  nickm | 2007-10-03 13:14:05 -0400
+     Correct the pointer manipulation in fake_getaddrinfo(), and do the right thing for fake_getaddrinfo(NULL,&ai).  Based on a patch by Lubmir Marinov, hacked until the unit tests passed on Linux with #undef HAVE_GETADDRINFO.
+    
+    
+    svn:r459
+
+commit bc7b7c249c470fe916c337b03605410f32dcd7fa
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Wed Oct 3 04:14:54 2007 +0000
+
+    Fix implementation of strsep.
+    
+    svn:r457
+
+commit 4ed4867375f26dc01af1db00de43624bcbba6f7b
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Tue Oct 2 19:11:41 2007 +0000
+
+     r15496 at catbus:  nickm | 2007-10-02 15:06:22 -0400
+     Move end of "extern C {" block to the end of evdns.h.
+    
+    
+    svn:r456
+
+commit 3550be9387dd451da3c32caff29dddb0ff0bd112
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Tue Sep 25 15:50:50 2007 +0000
+
+     r15331 at catbus:  nickm | 2007-09-25 11:46:52 -0400
+     Add EVPORT to test.sh script.  Patch from Trond Norbye.
+    
+    
+    svn:r454
+
+commit fe4829776bacef6f75790337a0fd5c0b0e18890b
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Mon Sep 24 16:26:11 2007 +0000
+
+     r15324 at catbus:  nickm | 2007-09-24 12:22:21 -0400
+     New evutil.h macros to manipulate winsock errors.  Use them in http.c and in evutil_socketpair().
+    
+    
+    svn:r451
+
+commit 3c1a6a68d2b9938a387c694928ab97b948eb09de
+Author: Niels Provos <provos at gmail.com>
+Date:   Sun Sep 23 03:49:28 2007 +0000
+
+    first attempts at refactoring this code to make it more readable;
+    mostly changing to dictionaries for format strings
+    
+    
+    svn:r450
+
+commit a4cc3d148a7b346143a0143f46589104bc50bea5
+Author: Niels Provos <provos at gmail.com>
+Date:   Sat Sep 22 23:57:11 2007 +0000
+
+    rename the rpc member from kill to attack; that way the
+    structure does not have the same name.  might find some
+    bugs.
+    
+    
+    svn:r449
+
+commit db43c1e111f1fb7a6c5912154dce4a46034eed7a
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Thu Sep 20 19:36:03 2007 +0000
+
+    On win32, sockets apparently can't be used with ReadFile and WriteFile: You need send() and recv() instead. Also, you need to use ioctlsocket() with sockets, not ioctl. [Fixes evbuffer regression tests.]
+    
+    svn:r448
+
+commit 1e1f77c5b02fca9622e9e1d249adec4b5428a245
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Thu Sep 20 19:08:20 2007 +0000
+
+    Make the test/ subdirectory buildable under Windows.  Well, mingw at least.  The tests still don't all pass, but at least now we know that.
+    
+    svn:r447
+
+commit d85bce4e96eeadf3248b9298926c957e39851504
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Thu Sep 20 18:38:31 2007 +0000
+
+    Remove gratuitous tor-isms in evutil_socketpair(); fix a windows warning in http.c.
+    
+    svn:r446
+
+commit f4c84e862877a0f2f13aa33665b8b4d5adb795ca
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Thu Sep 20 18:27:01 2007 +0000
+
+     r15220 at catbus:  nickm | 2007-09-20 14:22:57 -0400
+     Another patch from Trond: Skip calling gettime() in timeout_process if we have no events in the timetree.
+    
+    
+    svn:r445
+
+commit 5a0d671f0e05af014c55447e28e8b1b8be4a84ee
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Thu Sep 20 18:26:56 2007 +0000
+
+     r15219 at catbus:  nickm | 2007-09-20 14:17:32 -0400
+     Apply patch from Trond Norbye with recommendations from Magne Mahre and Hannah Schroeter: make autogen.sh work on systems where /bin/sh is not bash.
+    
+    
+    svn:r444
+
+commit 8b256b8e86bfcf38e79fb17975d903f892572386
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Thu Sep 20 18:26:51 2007 +0000
+
+     r15218 at catbus:  nickm | 2007-09-20 14:14:05 -0400
+     More win32 fixes: Use evutil_make_socket_nonblocking and EVUTIL_CLOSESOCKET consistently throughout the code.
+    
+    
+    svn:r443
+
+commit f0e06d75e50913ce9786a675ff69dee68d41c3f5
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Thu Sep 20 18:26:46 2007 +0000
+
+     r15217 at catbus:  nickm | 2007-09-20 14:04:32 -0400
+     Fix win32 signals: teach win32 that we have per-base signal queues; teach signal.c that not everybody has sigaction().
+    
+    
+    svn:r442
+
+commit 250071830a701193c72aa8a65bd9afa5f74692fe
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Thu Sep 20 18:26:40 2007 +0000
+
+     r15216 at catbus:  nickm | 2007-09-20 13:58:23 -0400
+     Add a new evutil module to contain the usual cross-platform hacks: socketpair, closesocket, and make_socket_nonblocking()
+    
+    
+    svn:r441
+
+commit 626cc5f982f648e4d669178dc5e0bbb1f4ddb6d6
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Wed Sep 19 15:27:53 2007 +0000
+
+     r15168 at catbus:  nickm | 2007-09-19 11:24:30 -0400
+     Add a new function to evdns to override the default transaction ID generation code.
+    
+    
+    svn:r440
+
+commit 7f57289f99900ee5210f62be55b7109f016eab85
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Tue Sep 18 15:16:23 2007 +0000
+
+     r15103 at catbus:  nickm | 2007-09-18 11:13:09 -0400
+     Use a dummy target to ensure that doxygen gets rebuilt every time we "make doxygen".
+    
+    
+    svn:r439
+
+commit 47ed792cb6ac47b629786157e0b5ccdd7c100410
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Tue Sep 18 15:16:17 2007 +0000
+
+     r15102 at catbus:  nickm | 2007-09-18 11:12:43 -0400
+     Make the autogen.sh script executable.
+    
+    
+    svn:r438
+
+commit d69a4c9ec4158b6f09bfc6bf3c646e06fc6554ac
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Tue Sep 18 15:12:20 2007 +0000
+
+     r15097 at catbus:  nickm | 2007-09-18 11:08:42 -0400
+     Wrap all newly-added Doxygen comments to fit in a consistent 80 columns, and remove all their trailing whitespace.
+    
+    
+    svn:r437
+
+commit 7135ffb6fc4fe231f2cbdb8a0b4188b6b7d65a9f
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Tue Sep 18 15:12:09 2007 +0000
+
+     r15096 at catbus:  nickm | 2007-09-18 11:02:12 -0400
+     Add Doxygen documentation to header files; patch from Mark Heily.
+    
+    
+    svn:r436
+
+commit c895ee46180e1b8bbfea0e37a05b3a5e122cf385
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Tue Sep 18 15:11:53 2007 +0000
+
+     r15094 at catbus:  nickm | 2007-09-18 10:52:11 -0400
+     Patch from Christopher Lane: Make regress.gen.* buildable from outside source directory.
+    
+    
+    svn:r434
+
+commit 7b7742fce7b694977579b9f2e11bc974b1c346da
+Author: Niels Provos <provos at gmail.com>
+Date:   Sun Sep 16 02:26:37 2007 +0000
+
+    optimize by removing a variable
+    
+    svn:r433
+
+commit bfd27f58da9d5fba6e2ed0c0d4f436fa240dbc47
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Sat Sep 15 18:45:57 2007 +0000
+
+     r15086 at catbus:  nickm | 2007-09-15 14:42:55 -0400
+     Patch from Trond Norbye: Fix two solaris bugs.
+    
+    
+    svn:r432
+
+commit b835ee085f537aa6a45df865930626688e984009
+Author: Niels Provos <provos at gmail.com>
+Date:   Sat Sep 15 15:50:11 2007 +0000
+
+    fix http.c to compile properly with USE_DEBUG; from Christopher Layne
+    
+    
+    svn:r430
+
+commit 640c61bac92550c97c3ad2b04d437c559df5c119
+Author: Niels Provos <provos at gmail.com>
+Date:   Sat Sep 15 00:53:47 2007 +0000
+
+    deal with out of memory situations for realloc
+    
+    svn:r429
+
+commit 82153e6e92117d092b1ea0630f2ba96ebb006fe7
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Mon Sep 10 14:56:00 2007 +0000
+
+     r15025 at catbus:  nickm | 2007-09-10 10:54:46 -0400
+     More DNS standard correctness changes: we preserve the CD flag,not the TC flag on responses.  When we get a nonstandard query, we should say "NOTIMPL" rather than ignoring it.
+    
+    
+    svn:r428
+
+commit 8b39254926c96587e74ec334f001d17f4d09f4d8
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Mon Sep 10 14:55:55 2007 +0000
+
+     r15024 at catbus:  nickm | 2007-09-10 10:49:15 -0400
+     Fix evdns_resolve_reverse_ipv6() so buffer is bug enough, and so the string ends with ".ip6.arpa" rather than "..ip6.arpa".
+    
+    
+    svn:r427
+
+commit c396c767e2abf4d15ce8bf485588f67dbe10c14e
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Mon Sep 10 14:55:50 2007 +0000
+
+     r15023 at catbus:  nickm | 2007-09-10 10:46:16 -0400
+     Add a missing begin-comment to the DNS_USE_OPENSSL_FOR_ID code in evdns.c.
+    
+    
+    svn:r426
+
+commit fc1211ed8a8c0ba7f167f92796c3887d659b2f1d
+Author: Niels Provos <provos at gmail.com>
+Date:   Mon Sep 10 01:37:57 2007 +0000
+
+    fix another memory leak
+    
+    svn:r424
+
+commit 7c66bf33e18939d7ee6fabc47ed624c8caa6c46c
+Author: Niels Provos <provos at gmail.com>
+Date:   Mon Sep 10 01:30:11 2007 +0000
+
+    fix a memory leak in the dns server; found by valgrind
+    
+    svn:r422
+
+commit babd622f7ab9e8d3cb4004700fcf2f9dadd4bd4b
+Author: Niels Provos <provos at gmail.com>
+Date:   Sun Sep 9 03:10:16 2007 +0000
+
+    make allocating array members in event_rpcgen more efficient, but doubling the size of
+    available slots every time we run out.
+    
+    
+    svn:r421
+
+commit e2f564116e1bcdcf2c6500c1552fcc25de810c53
+Author: Niels Provos <provos at gmail.com>
+Date:   Sun Sep 9 02:33:10 2007 +0000
+
+    Fix a memory leak in which failed HTTP connections whould not free the request object
+    
+    svn:r419
+
+commit 8ee20a3fa46f7d603f5fa98cd47992fcdbb3beb6
+Author: Niels Provos <provos at gmail.com>
+Date:   Sun Sep 9 02:15:34 2007 +0000
+
+    fix memory leaks/unitialized memory found by valgrind
+    
+    svn:r418
+
+commit e678f009a82b38745baac9874a3573136d0658b6
+Author: Niels Provos <provos at gmail.com>
+Date:   Sun Sep 9 01:46:35 2007 +0000
+
+    fix a couple memory leaks; time buffer marshaling
+    
+    svn:r417
+
+commit 98f9616bf45951901f264b75269d1c554d50511e
+Author: Niels Provos <provos at gmail.com>
+Date:   Fri Sep 7 02:49:46 2007 +0000
+
+    support setting local address on an evhttp_connection
+    
+    
+    svn:r416
+
+commit 23866b765739016f0723fae22b688a82c14a2b5d
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Fri Sep 7 01:18:53 2007 +0000
+
+    Another tweak on the date patch: win32 has no gmtime_r, but its gmtime() function uses thread-local storage for safety.  Backportable.
+    
+    svn:r414
+
+commit 003698c0dfcb29fc435d7d2d862ff838d797d3d8
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Fri Sep 7 01:03:01 2007 +0000
+
+     r14975 at catbus:  nickm | 2007-09-06 21:00:38 -0400
+     Oops; we were already including sys/time.h.  Remove the redundant include.
+    
+    
+    svn:r413
+
+commit 8d5ef326baa461201b1c948f9b29c5c4ae22533c
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Fri Sep 7 01:02:56 2007 +0000
+
+     r14974 at catbus:  nickm | 2007-09-06 20:59:14 -0400
+     Changes to http.c: Add a Date header on replies if there is none already set.  Also, include time.h unconditionally to be sure that struct tm is declared: every platform has time.h; the conditional should have been for sys/time.h.
+    
+    
+    svn:r412
+
+commit 9c3ac4e444bdacff2b904b1d175e4ac3cb2f7da5
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Fri Sep 7 00:10:15 2007 +0000
+
+     r14970 at catbus:  nickm | 2007-09-06 20:09:39 -0400
+     Fix compilation on Solaris; Patch from Magne Mahre.
+    
+    
+    svn:r409
+
+commit ff9e1af68f2fc7e808fbaca5d7e45f10f616fa8c
+Author: Niels Provos <provos at gmail.com>
+Date:   Sun Sep 2 01:33:38 2007 +0000
+
+    demote most warnings to debug messages;
+    execute callback later to allow freeing of connection object
+    
+    
+    svn:r407
+
+commit 11a0a9e42fd74f723c6d4670ef403eb10d9abeb5
+Author: Niels Provos <provos at gmail.com>
+Date:   Sat Aug 25 18:47:22 2007 +0000
+
+    allow \r or \n individually to separate HTTP headers instead of
+    the standard "\r\n"; from Charles Kerr.
+    
+    
+    svn:r406
+
+commit 49e01ff789ae1aa0a5666ac62062f27cce2cbb46
+Author: Niels Provos <provos at gmail.com>
+Date:   Sat Aug 25 18:42:42 2007 +0000
+
+    include event.h in evhttp.h; found by Charles Kerr
+    
+    svn:r404
+
+commit 5f04e3b7b5b234e6ccfc3ced1321619d209928b7
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Fri Aug 24 01:08:39 2007 +0000
+
+    Bump version number in svn trunk to 1.3.99.
+    
+    svn:r403
+
+commit 9a99bab0db8f13f12ea1829e8af8d5d0b66a4cad
+Author: Niels Provos <provos at gmail.com>
+Date:   Thu Aug 23 15:36:38 2007 +0000
+
+    let's try to keep a log of changes; as suggested by Nick
+    
+    
+    svn:r401
+
+commit a36d4a930d75bc9ed6caf1cbfa86e02bc68f7df7
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Mon Aug 20 14:44:15 2007 +0000
+
+     r14699 at catbus:  nickm | 2007-08-20 10:42:57 -0400
+     Use $top_srcdir and $srcdir variables to refer to source paths in Makefile.am.  This makes it possible to build libevent from a separate directory.  Patch from Kelly Anderson.
+    
+    
+    svn:r400
+
+commit 41c69fc335e116de8b9a6889798a7dd5bc295fd3
+Author: Niels Provos <provos at gmail.com>
+Date:   Sun Aug 19 17:26:02 2007 +0000
+
+    fix typo in comments
+    
+    svn:r399
+
+commit 3d2320b2187f5e4635f829c0de417c961f02f007
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Sun Aug 19 17:25:52 2007 +0000
+
+     r14697 at catbus:  nickm | 2007-08-19 13:24:39 -0400
+     Remove redundant typedef of socklen_t in evdns.c: On windows, it is already defined by autoconf in config.h.
+    
+    
+    svn:r398
+
+commit 67947ce38192f31fd67d9cac63ba5baaf112885b
+Author: Niels Provos <provos at gmail.com>
+Date:   Sun Aug 19 02:41:23 2007 +0000
+
+    provide evhttp_new and evhttp_bind_socket instead of evhttp_start;
+    using evhttp_new, it is possible to associate an event_base with
+    the http server so that multi-threaded applications can have their
+    own http server per thread; add appropriate testing.
+    
+    
+    svn:r397
+
+commit 35983cd60ff2972add1db2c7236b3c7b244c7968
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Thu Aug 16 21:12:53 2007 +0000
+
+     r14618 at catbus:  nickm | 2007-08-16 17:11:47 -0400
+     In ANSI C, int func() is a function with unspecified arguments, whereas int func(void) is a function that takes no arguments.  Using int func() to mean a function with no arguments is a C++ism, so let's not use or generate it.
+    
+    
+    svn:r395
+
+commit 12fe087e124f2f66049e4dffe9402baf7881f284
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Fri Aug 10 16:37:33 2007 +0000
+
+     r14505 at catbus:  nickm | 2007-08-10 12:35:52 -0400
+     Fix win32 build errors (reported by Phobos): mingw gcc seems to dislike unnamed function parameters.
+    
+    
+    svn:r390
+
+commit 7d821580e81072e0eba32d4789fdadca6683329b
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Fri Aug 10 16:31:02 2007 +0000
+
+    Fix compile warning on osx: the udata field in struct kevent is supposed to be void*, not intptr_t.
+    
+    svn:r387
+
+commit 21a7e7ed67979b9f2444f4671d9bd668ef2ebabf
+Author: Nick Mathewson <nickm at torproject.org>
+Date:   Fri Aug 10 15:59:31 2007 +0000
+
+     r14498 at catbus:  nickm | 2007-08-10 11:58:32 -0400
+     Fix compilation warnings in trunk on linux with gcc 4.1.2.  In time-test.c, always include time.h, so that time() is defined.  In test/Makefile.am, put -I../compat in CPPFLAGS, and fix a typo.  In test/regress.c, cast unsigned char pointers to char* before passing them to str[n]cmp.
+    
+    
+    svn:r385
+
+commit cd6dd9516d8bd7a7b94bf7a9ed6f5e63643b7c34
+Author: Niels Provos <provos at gmail.com>
+Date:   Mon Aug 6 21:00:49 2007 +0000
+
+    add a proper test for filtering new lines in headers
+    
+    
+    svn:r384
+
+commit 073d35906117ce1276b16cdfc70d744deb04575d
+Author: Niels Provos <provos at gmail.com>
+Date:   Mon Aug 6 20:53:33 2007 +0000
+
+    fix an embarassing bug where strchr was used with a cstring instead of a char
+    
+    
+    svn:r383
+
+commit 8ea5ffefc32e5950beeec8db0cd862e6bd9eab76
+Author: Niels Provos <provos at gmail.com>
+Date:   Sun Aug 5 02:15:10 2007 +0000
+
+    request dispatching fix from Elliot Foster
+    
+    
+    svn:r382
+
+commit b7ff0248c7993bf1b437598f53ce7ec56a0f2bdb
+Author: Niels Provos <provos at gmail.com>
+Date:   Tue Jul 31 00:32:00 2007 +0000
+
+    fix memory leak; found by Elliot F
+    
+    
+    svn:r378
+
+commit 5e0ac7f239457e6fceac199ad649d762950e0c9b
+Author: Niels Provos <provos at gmail.com>
+Date:   Tue Jul 31 00:25:22 2007 +0000
+
+    check for sys/select.h
+    
+    
+    svn:r377
+
+commit aa106169a0e5b960c2a82958912bc41a1e76b4c5
+Author: Niels Provos <provos at gmail.com>
+Date:   Tue Jul 31 00:21:04 2007 +0000
+
+    use AM_CLFAGS from Jan Kneschke
+    
+    
+    svn:r376
+
+commit 9e0333a8d56970514acbdb792a04e6db2b0d56fe
+Author: Niels Provos <provos at gmail.com>
+Date:   Mon Jul 30 23:56:05 2007 +0000
+
+    include config.h if HAVE_CONFIG_H from Jan Kneschke
+    
+    
+    svn:r375
+
+commit 72c479e76a6dacaa47482f418b00b3dee3998336
+Author: Niels Provos <provos at gmail.com>
+Date:   Mon Jul 30 23:54:25 2007 +0000
+
+    remove c99 variable declarations; from Jan Kneschke
+    
+    
+    svn:r374
+
+commit 7c6df310c98cd50aac9e34839b6f475020939c98
+Author: Niels Provos <provos at gmail.com>
+Date:   Mon Jul 30 23:53:10 2007 +0000
+
+    remove c++ comments from Jan Kneschke
+    
+    
+    svn:r373
+
+commit 10267216a6ff7d94db7deb3269e379c94adc190d
+Author: Niels Provos <provos at gmail.com>
+Date:   Mon Jul 30 23:49:00 2007 +0000
+
+    initalize ev_res from Scott Lamb
+    
+    
+    svn:r372
+
+commit 3ad6b47e03993f688e92fb202c89e3be984a8f56
+Author: Niels Provos <provos at gmail.com>
+Date:   Mon Jul 30 22:41:00 2007 +0000
+
+    make clock_monotonic work; do not use default timeout;
+    from Scott Lamb, plus some fixes from me.
+    
+    
+    svn:r371
+
+commit d7918e7963db292b49d575fbd3b9c47f4d59c9cf
+Author: Niels Provos <provos at gmail.com>
+Date:   Mon Jul 30 21:27:33 2007 +0000
+
+    drop illegal header values
+    
+    
+    svn:r370
+
+commit b15d715cbc77f5ce9b8da27938ad07426f7f2e57
+Author: Niels Provos <provos at gmail.com>
+Date:   Fri Jul 6 03:36:31 2007 +0000
+
+    make event_rpcgen.py use the uint_ types;
+    make event.h include stdint.h (wonder which OS that will break)
+    
+    
+    svn:r369
+
+commit 753ffa563b67feee30069d8637c920da809107da
+Author: Niels Provos <provos at gmail.com>
+Date:   Sat Jun 30 19:08:46 2007 +0000
+
+    convert u_int8_t types to uint8_t types
+    
+    
+    svn:r368
+
+commit f0ff792afabecc032bc9f92e504ff6601057b415
+Author: Niels Provos <provos at gmail.com>
+Date:   Sat Jun 30 18:58:34 2007 +0000
+
+    fixes from Joerg Sonnenberger:
+    http.c is a violation of the ctype(3) interface and an unused function.
+    
+    test/regress_http.c are incorrect format strings.
+    
+    test/regress.c uses raise(3) from signal.h.
+    
+    evdns.c: evdns_error_strings is unused. The GET* macros can eat the
+    semicolon from the expression. pos is passed in as off_t, so just pass
+    that down. When assigning negativ values to unsigned variables, an
+    explicit cast is considered good style.
+    
+    
+    svn:r367
+
+commit aa5c8068888ffa501c81d191b93ca1b5765b54b7
+Author: Niels Provos <provos at gmail.com>
+Date:   Sat Jun 16 03:23:15 2007 +0000
+
+    make it compile on solaris; from Andrei Nigmatulin
+    
+    
+    svn:r366
+
+commit d1848a8872c9596d1f30a5edbd1f9050e8124611
+Author: Niels Provos <provos at gmail.com>
+Date:   Thu Jun 14 04:38:42 2007 +0000
+
+    include config.h
+    
+    
+    svn:r365
+
+commit cf5c1fcebbb698a39603c92ea0928d1c603abbd5
+Author: Niels Provos <provos at gmail.com>
+Date:   Fri Jun 8 16:06:23 2007 +0000
+
+    made the wrong fd non-blocking in accept_socket; from szjwwu
+    
+    
+    svn:r364
+
+commit 3794534feb99f94e052359c7cce61462ed909383
+Author: Niels Provos <provos at gmail.com>
+Date:   Tue May 29 05:38:58 2007 +0000
+
+    change the signature of the client rpc callback to pass in an rpc status; the status
+    allows us to determine if an error happened.
+    
+    
+    svn:r363
+
+commit f0d0559c3e01bc378c3cb960013fc34245128291
+Author: Niels Provos <provos at gmail.com>
+Date:   Mon May 28 21:21:59 2007 +0000
+
+    allow DNS server to get access to the IP address for the requestor; from tor cvs via Nick Mathewson
+    
+    
+    svn:r362
+
+commit 5d3b6a83870d68c0ec4ed4fc60a6710d8ad938df
+Author: Niels Provos <provos at gmail.com>
+Date:   Mon May 28 21:20:57 2007 +0000
+
+    fail quicker on bad replies; from tor cvs via Nick Mathewson
+    
+    
+    svn:r361
+
+commit d06ab8569e26b3535967be5c8fcc5efad6850e85
+Author: Niels Provos <provos at gmail.com>
+Date:   Mon May 28 21:19:18 2007 +0000
+
+    fix bug where req was freed and dereferenced afterwards; from tor cvs via Nick Mathewson
+    
+    
+    svn:r360
+
+commit 28246587c0520a9e812fc6ed64b3d7c173864789
+Author: Niels Provos <provos at gmail.com>
+Date:   Mon May 28 21:17:35 2007 +0000
+
+    treat SERVERFAILED as a timeout; from tor cvs via Nick Mathewson
+    
+    
+    svn:r359
+
+commit 5be24333aec311d776e7d6c5fde9e74fcf04217d
+Author: Niels Provos <provos at gmail.com>
+Date:   Mon May 28 21:09:00 2007 +0000
+
+    solaris may return short reads on resolve.conf; fix from tor cvs via Nick Mathewson
+    
+    
+    svn:r358
+
+commit d0111a29e9e53899e0ea2e529b43f2f26353b853
+Author: Niels Provos <provos at gmail.com>
+Date:   Sun May 27 06:27:11 2007 +0000
+
+    evdns_shutdown fix from Adam Langley
+    
+    
+    svn:r357
+
+commit 621a1b2947b39d662123c98c49404fe71353c241
+Author: Niels Provos <provos at gmail.com>
+Date:   Wed May 23 05:31:33 2007 +0000
+
+    support freeing of evrpc base
+    
+    
+    svn:r356
+
+commit 0c2808246a5db1515f0392ef6f65a557e5832ccb
+Author: Niels Provos <provos at gmail.com>
+Date:   Wed May 23 05:20:59 2007 +0000
+
+    support removing of http callbacks and removing of registered RPCs
+    
+    
+    svn:r355
+
+commit 5b5400f66bb3959dbed81f6f544aa6f392ca18f5
+Author: Niels Provos <provos at gmail.com>
+Date:   Sat May 12 06:23:52 2007 +0000
+
+    permit connection free from callback; from Ben Rigas
+    
+    
+    
+    svn:r354
+
+commit 4408a5f8fc5028c67fc847e34a10891cb3523351
+Author: Niels Provos <provos at gmail.com>
+Date:   Thu Apr 19 03:13:12 2007 +0000
+
+    fix evbuffer_find off by one; found by Ken Cox; regression test by him
+    and fix by me
+    
+    
+    svn:r353
+
+commit f5aa65c9b369a6b34be7eb019087e06b64cd1e5b
+Author: Niels Provos <provos at gmail.com>
+Date:   Thu Mar 22 15:09:30 2007 +0000
+
+    man page fixes from todd miller
+    
+    
+    svn:r352
+
+commit 41b7cbc38105a540ade7d02bb6137898a94abc89
+Author: Niels Provos <provos at gmail.com>
+Date:   Sat Mar 10 06:37:53 2007 +0000
+
+    more the signal base into the event base; this removes global state and makes signals
+    work better with threading; from Wouter Wijngaards
+    small fixes for kqueue and style by me
+    
+    
+    svn:r351
+
+commit a968da742598e9e6720c883cb78b1f0f6e912ae2
+Author: Niels Provos <provos at gmail.com>
+Date:   Tue Mar 6 06:26:10 2007 +0000
+
+    split finding of callbacks out of code
+    
+    
+    
+    svn:r350
+
+commit 50edb19f17555389f18c0d2cef488eed2a643497
+Author: Niels Provos <provos at gmail.com>
+Date:   Mon Mar 5 07:28:15 2007 +0000
+
+    EVRPC_MAKE_REQUEST needs the pool argument
+    
+    
+    svn:r349
+
+commit fcd55934ae57b3af2e67ba2d4c47da8342348260
+Author: Niels Provos <provos at gmail.com>
+Date:   Mon Mar 5 06:49:45 2007 +0000
+
+    spell Oleson correctly
+    
+    
+    svn:r348
+
+commit 729487deb380bd8f0fa6591a8f6184595080a490
+Author: Niels Provos <provos at gmail.com>
+Date:   Sat Mar 3 08:27:52 2007 +0000
+
+    better conversion; cannot use event_err here.
+    
+    
+    svn:r344
+
+commit 660662517c717b53d7340ed0198bffbe154ef0b1
+Author: Niels Provos <provos at gmail.com>
+Date:   Sat Mar 3 08:18:20 2007 +0000
+
+    proper casting for conversion
+    
+    svn:r343
+
+commit 74f7118d66e2b31d2d113bcb3674bb8074676165
+Author: Niels Provos <provos at gmail.com>
+Date:   Sat Mar 3 08:16:40 2007 +0000
+
+    install evrpc.h header
+    
+    svn:r342
+
+commit b5d2f9a255dbd5eb7d650cd8d829fb85c9c69f2c
+Author: Niels Provos <provos at gmail.com>
+Date:   Thu Mar 1 06:25:18 2007 +0000
+
+    rolling back r339: evconfig.h does not work
+    
+    svn:r341
+
+commit 8d94bd03ebac666171fbbc75a598ef01f63390f5
+Author: Niels Provos <provos at gmail.com>
+Date:   Wed Feb 28 04:29:18 2007 +0000
+
+    signal fixes from scott lamb
+    
+    
+    svn:r340
+
+commit 127c260bb7f8e972fffab9bc72bd1f53eae48730
+Author: Niels Provos <provos at gmail.com>
+Date:   Wed Feb 28 04:02:29 2007 +0000
+
+    make evconfig.h available as installed header file; not
+    really ideal but good enough for me; from Nick Mathewson
+    
+    
+    svn:r339
+
+commit 995a58a374c4b1ce28c214d22dfdf00329b28957
+Author: Niels Provos <provos at gmail.com>
+Date:   Tue Feb 27 08:16:50 2007 +0000
+
+    missing return (-1) for failures on make_socket
+    
+    
+    svn:r338
+
+commit f86cead09999380887752d9a391e0ebd3ee38807
+Author: Niels Provos <provos at gmail.com>
+Date:   Sat Feb 24 08:33:07 2007 +0000
+
+    remove artifical 16-bit restriction on evrpc entries
+    
+    
+    svn:r337
+
+commit 4356b6813376ae48478ab7af0f593d34e1af9c26
+Author: Niels Provos <provos at gmail.com>
+Date:   Tue Feb 20 03:35:31 2007 +0000
+
+    remove redundant \n from event_warn
+    
+    
+    svn:r336
+
+commit 72a3f29da36a8d9fa49dce8eaa8e5f5a86cb4e7f
+Author: Niels Provos <provos at gmail.com>
+Date:   Sun Feb 18 19:33:19 2007 +0000
+
+    1.3a on trunk?
+    
+    svn:r333
+
+commit 06d0f8c0824651631e68c5c593051098c4008753
+Author: Niels Provos <provos at gmail.com>
+Date:   Fri Feb 16 08:48:55 2007 +0000
+
+    O(n^2) is bad
+    
+    
+    svn:r332
+
+commit 7398790296fa8e8fdb226cd8f6d76c8705d4e366
+Author: Niels Provos <provos at gmail.com>
+Date:   Thu Feb 15 22:46:04 2007 +0000
+
+    missing reference to strlcpy-internal
+    
+    
+    svn:r330
+
+commit fe2662384db52b1e4c500bbb9939a97545178c46
+Author: Niels Provos <provos at gmail.com>
+Date:   Thu Feb 15 02:16:07 2007 +0000
+
+    try to make it work with proxy-connections
+    
+    
+    svn:r329
+
+commit 58f42c79e7df54dd5f7136b6c006ba67b55f624f
+Author: Niels Provos <provos at gmail.com>
+Date:   Wed Feb 14 16:59:47 2007 +0000
+
+    fix handling of chunked requests
+    
+    
+    svn:r328
+
+commit 8901c141c9bef59baf308764c8c0f4dcadc6a487
+Author: Niels Provos <provos at gmail.com>
+Date:   Wed Feb 14 06:10:32 2007 +0000
+
+    make chunked requests work correctly; this is done by providing
+    a separate callback for invidiual chunks.  if this callback is
+    not set, all the data is going to be delivered at the end.
+    
+    
+    svn:r327
+
+commit 36950cef58fc02495dffcc143bb2ec147dc7e9ad
+Author: Niels Provos <provos at gmail.com>
+Date:   Tue Feb 13 06:25:16 2007 +0000
+
+    close connections for http/1.0 unless there is keep-alive
+    
+    
+    svn:r326
+
+commit 19373b3dda45af29663926cdbc4121f8289e2f0e
+Author: Niels Provos <provos at gmail.com>
+Date:   Tue Feb 13 06:14:42 2007 +0000
+
+    when parsing query parameters, we automatically unquote them
+    
+    
+    svn:r325
+
+commit 9a65d0135fd39753858686dbb0eec2d807c29583
+Author: Niels Provos <provos at gmail.com>
+Date:   Sun Feb 11 07:58:39 2007 +0000
+
+    set content length even if content-type is specified
+    
+    svn:r324
+
+commit ba748012bacf371824a961efddc2e4db024303d2
+Author: Niels Provos <provos at gmail.com>
+Date:   Fri Feb 9 07:52:04 2007 +0000
+
+    add prototype for bufferevent_base_set; from thorsten glaser
+    
+    
+    svn:r323
+
+commit bfb9f44f370ab0afa230f9e7795236043da7a5ea
+Author: Niels Provos <provos at gmail.com>
+Date:   Fri Feb 9 07:49:55 2007 +0000
+
+    make mingw happy; from Nick Mathewson
+    
+    
+    svn:r322
+
+commit faf5f73a694ecfa720a7af4405298f5cb40349f0
+Author: Niels Provos <provos at gmail.com>
+Date:   Thu Feb 8 16:39:15 2007 +0000
+
+    dns server support from Nick Mathewson; tiny tweaks
+    to the regression test from me to make it run on
+    systems where stack variables get initialized with
+    trash.
+    
+    
+    svn:r321
+
+commit 3b8e27a58f240e38040a2c15a9592d6ce7fbae28
+Author: Niels Provos <provos at gmail.com>
+Date:   Thu Feb 8 16:27:26 2007 +0000
+
+    add people I forgot to give credit to;  but in alphabetical order;
+    from dug song (he had to remind me of this; how embarassing)
+    
+    
+    svn:r320
+
+commit 121efe6530075e1e0d64956cd5b00600218407a6
+Author: Niels Provos <provos at gmail.com>
+Date:   Sat Jan 27 08:38:51 2007 +0000
+
+    small bug fixes to AAAA resolution and regression test; from Nick Mathewson!
+    
+    we love regresson tests.
+    
+    
+    
+    svn:r319
+
+commit 78f2aa300c941029c7cf808755df9b1e7007fc05
+Author: Niels Provos <provos at gmail.com>
+Date:   Sat Jan 27 04:27:59 2007 +0000
+
+    Allow setting of more DNS options via API; from Nick Mathewson!!!
+    
+    
+    svn:r318
+
+commit b776b2da7282414d9bf42bb21c7c1fd4293cbd02
+Author: Niels Provos <provos at gmail.com>
+Date:   Sat Jan 27 04:25:46 2007 +0000
+
+    dns name compression; from Nick Mathewson!!
+    
+    
+    
+    svn:r317
+
+commit 5baf8ecf6916fa9b91c59bb7e1307b7a94d26195
+Author: Niels Provos <provos at gmail.com>
+Date:   Sat Jan 27 04:23:33 2007 +0000
+
+    minor fixes; spelling corrections; compatibility from Nick Mathewson!
+    
+    
+    svn:r316
+
+commit 6318fca29e9d3ebe9300a229d0b84e16ec5e5626
+Author: Niels Provos <provos at gmail.com>
+Date:   Sat Jan 27 04:22:36 2007 +0000
+
+    AAAA support for DNS; from Nick Mathewson.
+    
+    unfortunately, no regression test
+    
+    
+    
+    svn:r315
+
+commit 22e53c7a849b95f2f32640b846e2fc98dc3bcc1c
+Author: Niels Provos <provos at gmail.com>
+Date:   Sat Jan 27 04:10:08 2007 +0000
+
+    make it work on freebsd; from phil oleson
+    
+    
+    svn:r314
+
+commit 4922f342fcbad0f56c6de5f40a00b029d6757823
+Author: Niels Provos <provos at gmail.com>
+Date:   Sat Jan 27 04:06:52 2007 +0000
+
+    extern "C" guard for header file.
+    
+    assert activeq in event.c;
+    
+    from Phil Oelson.
+    
+    
+    
+    svn:r313
+
+commit b04043ae51589899021d306af299dbad6668a621
+Author: Niels Provos <provos at gmail.com>
+Date:   Sun Jan 21 17:28:55 2007 +0000
+
+    fix ddos in dns parsing due to infinite loop;
+    patch from Nick Mathewson; also received
+    notification from Jon Oberheide.
+    
+    
+    svn:r311
+
+commit d5d04949e3550823c2935562f5e07b423de46871
+Author: Niels Provos <provos at gmail.com>
+Date:   Thu Jan 18 06:28:42 2007 +0000
+
+    fix http server so it can accept on high ports;
+    better warning messages for getnameinfo;
+    from Philip Lewis
+    
+    
+    svn:r310
+
+commit ff12220703d4bd45169fb2f1aab61c4979340df9
+Author: Niels Provos <provos at gmail.com>
+Date:   Wed Jan 10 02:42:29 2007 +0000
+
+    make accept socket non-blocking; from dug song
+    
+    
+    svn:r309
+
+commit de4e25f1d0a27a4d603d1834b090437237323d06
+Author: Niels Provos <provos at gmail.com>
+Date:   Sat Jan 6 02:25:50 2007 +0000
+
+    evbuffer_find fix from Dug Song
+    
+    
+    svn:r308
+
+commit ba8289bea55a2b0013fc4c2cfd6ffda9a6a82c21
+Author: Niels Provos <provos at gmail.com>
+Date:   Thu Jan 4 18:05:17 2007 +0000
+
+    from dug song:
+    the original code failed in the case of a large single client
+    request+body write - for instance, over loopback (with a larger MTU
+    exceeding EVBUFFER_MAX_READ).
+    
+    
+    
+    svn:r307
+
+commit 0db257b828ff7d9b480c6499651e469d2b20154b
+Author: Niels Provos <provos at gmail.com>
+Date:   Wed Jan 3 07:11:17 2007 +0000
+
+    rename strlcpy so that it does not conflict with other tests; from
+    Nick Mathewson.
+    
+    
+    svn:r306
+
+commit 894b63654303649ee1b0fc888cbfded616e6d54e
+Author: Niels Provos <provos at gmail.com>
+Date:   Sat Dec 23 07:30:10 2006 +0000
+
+    fix a bug in an assert; from Weston Andros Adamson
+    
+    
+    svn:r305
+
+commit 557e0f62be87b54db604bb95b063a7838b7a4164
+Author: Niels Provos <provos at gmail.com>
+Date:   Mon Dec 18 15:26:19 2006 +0000
+
+    http chunking support from dug song;
+    some refactoring and extra error checking by me
+    
+    
+    svn:r304
+
+commit 0147ef3ac71cb393443af2250fe658940020f880
+Author: Niels Provos <provos at gmail.com>
+Date:   Tue Dec 12 04:02:07 2006 +0000
+
+    From Nick Mathewson:
+    This patch resets the successive timeout count to zero when:
+      - A nameserver comes up
+      - We receive a reply from a nameserver
+      - We decide to not use the nameserver for a while because of its
+        timeout count.
+    
+    This patch also changes the timeout threshold from 3 to 5 seconds.
+    
+    
+    svn:r303
+
+commit a91d2b2b8ce9ce4a1dd437c30a8c88b5609fa653
+Author: Niels Provos <provos at gmail.com>
+Date:   Tue Dec 12 03:51:30 2006 +0000
+
+    do close-detection via a separate event
+    
+    
+    svn:r301
+
+commit 04bdb2488c61489f91f67c68f308b0cfc84076f1
+Author: Niels Provos <provos at gmail.com>
+Date:   Sat Dec 9 05:14:37 2006 +0000
+
+    detect if a client to a streaming reply hangs up; from dug song
+    comments from me :-)
+    
+    
+    svn:r300
+
+commit de7db33a61f13f94fe3b60a084d20735b06bd72f
+Author: Niels Provos <provos at gmail.com>
+Date:   Sat Dec 9 02:58:12 2006 +0000
+
+    low-level interfaces for streaming; from dug song
+    i applied some bug fixes and slight re-arranged the logic
+    on when to call the close notification callback;
+    i also don't like the streaming interface; i'd rather
+    see it do the chunked response formatting explicitly.
+    
+    
+    svn:r298
+
+commit 852d05a3c093ecaaacffb5ee339307782f706c96
+Author: Niels Provos <provos at gmail.com>
+Date:   Sat Dec 9 01:41:57 2006 +0000
+
+    support retrying for connections; from dug song
+    small tweaks from me.
+    
+    
+    svn:r297
+
+commit 2225eec22b1e62c6b24113e7e8915de3ef26a209
+Author: Niels Provos <provos at gmail.com>
+Date:   Sat Dec 9 01:33:03 2006 +0000
+
+    decode uri when sending a request; from dug song
+    
+    
+    svn:r296
+
+commit 785923704c6d55af0fa1f06086349d1d707fea37
+Author: Niels Provos <provos at gmail.com>
+Date:   Wed Dec 6 04:12:11 2006 +0000
+
+    fix a bug where event_set was called on a pending event;
+    don't read body for return codes that do not require a body;
+    from dug song.
+    
+    
+    svn:r294
+
+commit c6e285d31a1892a6bbfdab2137d83c5041f97742
+Author: Niels Provos <provos at gmail.com>
+Date:   Wed Dec 6 03:38:41 2006 +0000
+
+    allow gotsig to terminate active event loop;
+    free http connection on failed incoming connections;
+    bugs pointed out by Dug Song.
+    
+    
+    svn:r293
+
+commit ec0679199fbdddcb3308a72a90a15b342cc3c0a3
+Author: Niels Provos <provos at gmail.com>
+Date:   Sat Dec 2 21:28:39 2006 +0000
+
+    fix cases where there is no content or transfer encoding was specified
+    from Dug Song
+    
+    
+    svn:r291
+
+commit 7fe5edf50c5ccad3c4dddc2a8756ea241fd94b89
+Author: Niels Provos <provos at gmail.com>
+Date:   Sat Dec 2 21:25:21 2006 +0000
+
+    use CLOCK_REALTIME when CLOCK_MONOTONIC is not available; from Phil Oleson
+    
+    
+    svn:r290
+
+commit c1aa5480de538c63e6015f690226a84e7569e3f7
+Author: Niels Provos <provos at gmail.com>
+Date:   Sun Nov 26 16:13:17 2006 +0000
+
+    support #define in .rpc descriptions
+    
+    
+    svn:r278
+
+commit 942656bb5cd89b131ad119e395a770e6a1488e9b
+Author: Niels Provos <provos at gmail.com>
+Date:   Thu Nov 23 06:32:20 2006 +0000
+
+    persistent connections are somewhat complicated; detect on the client side if the
+    server closes a persistent connection.  previously, we would have failed the next
+    request on that connection.  provide test case.
+    
+    
+    svn:r277
+
+commit 3882669d3e20bcbca991e6775d0d05401d58a1b6
+Author: Niels Provos <provos at gmail.com>
+Date:   Thu Nov 23 05:27:15 2006 +0000
+
+    transaction id fixes from richard nyberg; return correct
+    error code when file for resolv.conf cannot be found.
+    
+    
+    svn:r276
+
+commit 30a49b57dab3baa8b53775563ff03210b357db03
+Author: Niels Provos <provos at gmail.com>
+Date:   Wed Nov 22 07:30:34 2006 +0000
+
+    test that rpc timeouts work correctly
+    
+    
+    svn:r275
+
+commit 2d028ef6c189a2c53d64ca9d1ceff813d62755f0
+Author: Niels Provos <provos at gmail.com>
+Date:   Wed Nov 22 06:54:28 2006 +0000
+
+    fix a bug where rpc would not be scheduled when they were queued; test for it.
+    allow a configurable timeout for connections and RPCs.
+    
+    
+    svn:r274
+
+commit ce436242ad05172d2abe53ed83ab46f956edc789
+Author: Niels Provos <provos at gmail.com>
+Date:   Wed Nov 22 05:03:02 2006 +0000
+
+    an attempt at differentiated error handling for timeouts and eof.
+    really this needs to be propagated all the way to the callback.
+    
+    
+    svn:r273
+
+commit 51fde16666a3402959cab77cd0313c9ff4b4c66a
+Author: Niels Provos <provos at gmail.com>
+Date:   Wed Nov 22 04:35:56 2006 +0000
+
+    forgot to add this
+    
+    
+    svn:r272
+
+commit 868f10e7c9abe1cb38cd3cc84e6dd4a9b1d966cc
+Author: Niels Provos <provos at gmail.com>
+Date:   Wed Nov 22 01:21:10 2006 +0000
+
+    mingw fixes from Nick
+    
+    
+    svn:r271
+
+commit 4aa780d6adf37a23985aa8f544087bc3b14aba9b
+Author: Niels Provos <provos at gmail.com>
+Date:   Mon Nov 20 07:57:36 2006 +0000
+
+    don't require string literal for message name
+    
+    
+    svn:r270
+
+commit ff43ed5b3379125e3b57044016ca71b9b8f4739f
+Author: Niels Provos <provos at gmail.com>
+Date:   Mon Nov 20 07:44:37 2006 +0000
+
+    finish RPC client support
+    
+    
+    svn:r269
+
+commit fda1216b6e18df98b8f3c32ce4132f955c346a90
+Author: Niels Provos <provos at gmail.com>
+Date:   Mon Nov 20 03:32:53 2006 +0000
+
+    generate client request code via macro; flesh out the pools a little bit.
+    
+    
+    svn:r268
+
+commit 3a15f7d4e4f3de810e2b81634b4e60f286605066
+Author: Niels Provos <provos at gmail.com>
+Date:   Sun Nov 19 02:03:43 2006 +0000
+
+    make it work with python2.2
+    
+    
+    svn:r267
+
+commit 226fd50a99761f5e874e7376d99674ae54b1aeed
+Author: Niels Provos <provos at gmail.com>
+Date:   Sat Nov 18 21:27:42 2006 +0000
+
+    use more python builtins; dont use reserved keywords
+    
+    
+    svn:r266
+
+commit 31ba30abfee720e49c19e7a4790854cfbe0e9d5e
+Author: Niels Provos <provos at gmail.com>
+Date:   Sat Nov 18 08:51:12 2006 +0000
+
+    make regression test work for poll and select
+    
+    
+    svn:r265
+
+commit 1a64c982eb0f8f72e5e2766a5eec88d350fdfb06
+Author: Niels Provos <provos at gmail.com>
+Date:   Sat Nov 18 07:30:21 2006 +0000
+
+    some compilers don't like C99 inline variable declaration
+    
+    
+    svn:r264
+
+commit ddf70659ad7db0f4bdf8c4f8aa0259fd36abeab3
+Author: Niels Provos <provos at gmail.com>
+Date:   Sat Nov 18 03:52:27 2006 +0000
+
+    forgot ifdef guard around stdint.h
+    
+    
+    svn:r263
+
+commit 9d81ac48f8031e6a49afb1c7c35358d9751f414c
+Author: Niels Provos <provos at gmail.com>
+Date:   Sat Nov 18 03:43:26 2006 +0000
+
+    test both piplining on persistent and non-persistent connections
+    
+    
+    svn:r262
+
+commit 36212f9df0664c3d9056d18d962ef37acf9a45e3
+Author: Niels Provos <provos at gmail.com>
+Date:   Sat Nov 18 03:05:26 2006 +0000
+
+    make persistent connections work; needs more testing
+    
+    
+    svn:r261
+
+commit d2c27da1145e81267737e9a52dd9cf2fd45721f9
+Author: Niels Provos <provos at gmail.com>
+Date:   Sat Nov 18 02:10:25 2006 +0000
+
+    introduce is connection close
+    
+    
+    svn:r260
+
+commit a67d9cb1153a16bd314471a22eb86782fac41dc0
+Author: Niels Provos <provos at gmail.com>
+Date:   Fri Nov 17 07:45:42 2006 +0000
+
+    add "Connection: close" to the output headers of the HTTP server reply;
+    we don't currently support persistent connections; although that's going
+    to be easy to add.
+    
+    
+    svn:r259
+
+commit c4836d10539e9937d2ee0afce2675362dce01e00
+Author: Niels Provos <provos at gmail.com>
+Date:   Fri Nov 17 06:06:17 2006 +0000
+
+    make sure that the rpc callback receives an unmarshaled payload;
+    make sure that the rpc reply contains a good rpc structure, too.
+    
+    
+    svn:r258
+
+commit 1caff9bcc8f26223ddfd9056d99e7581bc484805
+Author: Niels Provos <provos at gmail.com>
+Date:   Thu Nov 16 15:59:42 2006 +0000
+
+    we indicate a failed request by removing the uri from the request object
+    
+    
+    svn:r257
+
+commit 44bd5ab4e03a7fd943520243dd07bc3e6fdba249
+Author: Niels Provos <provos at gmail.com>
+Date:   Thu Nov 16 08:49:26 2006 +0000
+
+    prefix was missing /; malformed request caused server to crash
+    
+    
+    svn:r256
+
+commit 9d9d60b1ff0b588ee20b1b7a4f73ea409fad232d
+Author: Niels Provos <provos at gmail.com>
+Date:   Thu Nov 16 08:21:27 2006 +0000
+
+    forgot to add file
+    
+    
+    svn:r255
+
+commit f554234f74e9e80c0faabe385dd8537fc7b1ab9f
+Author: Niels Provos <provos at gmail.com>
+Date:   Thu Nov 16 07:36:20 2006 +0000
+
+    first stab at an rpc layer;  this breaks the regression test.
+    
+    
+    svn:r254
+
+commit 768aa15c77073b5799033854c332553eea4929fd
+Author: Niels Provos <provos at gmail.com>
+Date:   Sun Nov 12 00:59:56 2006 +0000
+
+    don't need to include getopt here
+    
+    
+    svn:r253
+
+commit 79d2ca8cac2ebb3f8be06d93376b036d5e73ef50
+Author: Niels Provos <provos at gmail.com>
+Date:   Fri Nov 10 02:16:16 2006 +0000
+
+    fix a potential problem in multiple handling of va_list; use va_copy instead;
+    from Alejo.
+    
+    
+    svn:r251
+
+commit 025b009bb67e402c75dcb92bd06485f8c0ed8097
+Author: Niels Provos <provos at gmail.com>
+Date:   Sun Nov 5 17:24:24 2006 +0000
+
+    fail without leaking memory when poll set extension fails
+    
+    
+    svn:r249
+
+commit d6989659281f67acc88bd6255f67680f9004e7f9
+Author: Niels Provos <provos at gmail.com>
+Date:   Sat Oct 28 03:20:22 2006 +0000
+
+    fix a potential memory leak in event_once from Scott Lamb
+    
+    
+    svn:r244
+
+commit 3eec7f7c64c2356157ed123e5ad2ce8e75a6ae16
+Author: Niels Provos <provos at gmail.com>
+Date:   Sun Oct 15 21:55:13 2006 +0000
+
+    make it 1.2; fix some size issues for printf in regression code
+    
+    
+    svn:r242
+
+commit ea52d9fd8d12126643f21007f279ef2e03dfca1e
+Author: Niels Provos <provos at gmail.com>
+Date:   Sun Oct 15 21:41:56 2006 +0000
+
+    improved nroff mdoc for the man page
+    
+    
+    svn:r241
+
+commit 152f570047d7cdcb8d2e437c0d5751a7ddd3fa83
+Author: Niels Provos <provos at gmail.com>
+Date:   Mon Oct 9 01:55:23 2006 +0000
+
+    install evdns.3 man page
+    
+    
+    svn:r240
+
+commit cf47f86b74fe5f60b21458f14503657e6f6a4476
+Author: Niels Provos <provos at gmail.com>
+Date:   Mon Oct 9 00:48:42 2006 +0000
+
+    put the evdns documentation into the header file.  pathetic start of evdns manpage.  a little bit
+    more testing and debug output for the DNS regression test.   add a BSD copyright to evdns.h with
+    appropriate explanations.
+    
+    
+    svn:r239
+
+commit fe1dfe0f40776ef18f5318149f981387d386b962
+Author: Niels Provos <provos at gmail.com>
+Date:   Thu Oct 5 22:59:44 2006 +0000
+
+    sync evdns changes with tor - from Nick Mathewson
+    
+    
+    svn:r238
+
+commit b6b933af5c3405e44f8fe134e989193cc369afa9
+Author: Niels Provos <provos at gmail.com>
+Date:   Wed Oct 4 03:45:10 2006 +0000
+
+    Protect EVENT_* macros - () were missing
+    
+    
+    
+    svn:r237
+
+commit 9f7d28bb81b65094dd63a65607bbb9972f1af006
+Author: Niels Provos <provos at gmail.com>
+Date:   Wed Sep 27 03:07:38 2006 +0000
+
+    make it compile with mingw; from Nick
+    
+    
+    svn:r235
+
+commit 64c76fbea4fe4443cfa70876b7a289c117101f35
+Author: Niels Provos <provos at gmail.com>
+Date:   Sun Sep 3 21:12:59 2006 +0000
+
+    typo in kqueue delete; from Bert JW Regeer
+    
+    
+    
+    svn:r232
+
+commit e9c1e3f7f0c262c529300e58e1f5724c52ab76d2
+Author: Niels Provos <provos at gmail.com>
+Date:   Mon Aug 28 00:57:49 2006 +0000
+
+    introduce evdns_init() which works on windows and unix.
+    
+    
+    svn:r231
+
+commit 07c3fb50675fa9a80b928f24028431e92358df3c
+Author: Niels Provos <provos at gmail.com>
+Date:   Sun Aug 27 20:04:20 2006 +0000
+
+    add a simple regression test for the DNS resolver; requires internet access.
+    do some KNF on evdns.c; add checks to prevent potential buffer overflows.
+    fix one memory leak.
+    
+    
+    svn:r230
+
+commit e80e52ceb7846d4f081e5106a19a767d2aa51dab
+Author: Niels Provos <provos at gmail.com>
+Date:   Sun Aug 27 19:43:00 2006 +0000
+
+    include evdns.h header - fix windows distribution files
+    
+    
+    svn:r229
+
+commit b0b5e2c2acfb13a67935c12187dca84e16ead9bb
+Author: Niels Provos <provos at gmail.com>
+Date:   Sat Aug 26 04:34:43 2006 +0000
+
+    document that read and write callbacks may be NULL.
+    
+    
+    svn:r228
+
+commit c1eec7aae52af93d5c763859e4b8dab8e780e329
+Author: Niels Provos <provos at gmail.com>
+Date:   Sat Aug 26 04:32:31 2006 +0000
+
+    allow both read and write callbacks for bufferevents to be NULL
+    
+    
+    svn:r227
+
+commit 52bfcab894c0644318dc9e067a87931d16b7e061
+Author: Niels Provos <provos at gmail.com>
+Date:   Thu Aug 24 06:10:50 2006 +0000
+
+    rename eventdns to evdns to match libevent naming scheme
+    
+    
+    svn:r226
+
+commit d0d8f9b468a5401d9c3da770d1b14572e384843e
+Author: Niels Provos <provos at gmail.com>
+Date:   Sun Aug 13 06:59:37 2006 +0000
+
+    configure evdns and make it compile
+    
+    
+    svn:r225
+
+commit cca7249ed6ad71eb8d0be56891451b26bedb7a5a
+Author: Niels Provos <provos at gmail.com>
+Date:   Sun Aug 13 06:33:45 2006 +0000
+
+    unmodified eventdns from Adam Langley via tor repository
+    
+    
+    svn:r224
+
+commit 296739e022dc8d6415a573b8dda557b280caff3d
+Author: Niels Provos <provos at gmail.com>
+Date:   Sun Aug 13 00:03:35 2006 +0000
+
+    fix regression test
+    
+    svn:r223
+
+commit 4596f82e1733df39fce93384b4c375aa4e924f3b
+Author: Niels Provos <provos at gmail.com>
+Date:   Fri Aug 11 15:20:10 2006 +0000
+
+    windows makefile fixes from branch
+    
+    svn:r222
+
+commit 49ef242f6e524e7d3a4f70cc280daa6b9220b184
+Author: Niels Provos <provos at gmail.com>
+Date:   Wed Aug 9 01:04:12 2006 +0000
+
+    add back the original sun copyright block
+    
+    
+    svn:r219
+
+commit 94af961f362dc654c77524e2b51c590d6628ebda
+Author: Niels Provos <provos at gmail.com>
+Date:   Tue Jul 18 06:35:48 2006 +0000
+
+    get rid of err.h
+    
+    
+    svn:r218
+
+commit ba7262ebdf82da9c285f39200d69aac54013c16a
+Author: Niels Provos <provos at gmail.com>
+Date:   Mon Jul 17 00:33:57 2006 +0000
+
+    reorganization of the http functionality; we separate http handling into a
+    connection object and a request object; also make it clear which buffers are
+    used for input and output; unittests not complete yet.
+    
+    
+    svn:r217
+
+commit 00bc7e37fd8f9cc5c749fa83d4152c3395e14975
+Author: Niels Provos <provos at gmail.com>
+Date:   Sat Jul 15 02:55:57 2006 +0000
+
+    1.2-rc1; Solaris' event port support from Dave Pacheco
+    
+    
+    svn:r216
+
+commit f0ecf50727b291356ed2776d7b03a69cbc9f35b1
+Author: Niels Provos <provos at gmail.com>
+Date:   Sat Jul 15 02:39:31 2006 +0000
+
+    need to report one less file descriptor to solaris then the limit; reported
+    by Dave Pacheco
+    
+    
+    svn:r215
+
+commit 6813af3f11c4fdffa68efce687d46023aa195773
+Author: Niels Provos <provos at gmail.com>
+Date:   Sat Jun 10 22:37:21 2006 +0000
+
+    move http related prototypes to evhttp.h
+    
+    
+    svn:r214
+
+commit 147b71e33c34bd8fae7ea339b7ecdb742768656f
+Author: Niels Provos <provos at gmail.com>
+Date:   Sat Jun 10 22:28:21 2006 +0000
+
+    rename http.h to http-internal.h - i wish there were decent refactoring tools
+    for open source programmers.
+    
+    
+    svn:r213
+
+commit ebf5333f97a342fc0e53a985daa54b1b57794fea
+Author: Niels Provos <provos at gmail.com>
+Date:   Wed May 17 13:13:31 2006 +0000
+
+    oops.  the enums were actually creating symbols
+    
+    
+    svn:r212
+
+commit 71108cd98b6485fabdecc0522ca0a1918f303dd5
+Author: Niels Provos <provos at gmail.com>
+Date:   Tue Mar 28 16:57:19 2006 +0000
+
+    uhm - i obliterated a gettimeofday that was required for remapping the
+    timeouts to "real" time.  thanks to claudio for pointing that out.
+    
+    
+    svn:r211
+
+commit 2e8051f593abd20b961e85c3f99dfa0ac0ee375d
+Author: Niels Provos <provos at gmail.com>
+Date:   Tue Mar 28 04:40:54 2006 +0000
+
+    introduce a way to free the base from Nick Mathewson <nickm at freehaven.net>
+    
+    
+    svn:r210
+
+commit 571ac95430c344d4688c28adaa8aa53956cd12a7
+Author: Niels Provos <provos at gmail.com>
+Date:   Tue Mar 28 04:33:41 2006 +0000
+
+    use clock_gettime if available from Claudio Jeker <claudio at openbsd.org>
+    
+    
+    svn:r209
+
+commit a32839c8ecfee948bc8c051857c9ea454de937e6
+Author: Niels Provos <provos at gmail.com>
+Date:   Tue Mar 28 04:17:51 2006 +0000
+
+    some nit-picking from poul-henning kamp
+    
+    
+    svn:r208
+
+commit 7517ef2a81eab41b8aeda699dc8ed050c01092b6
+Author: Niels Provos <provos at gmail.com>
+Date:   Tue Mar 28 04:16:14 2006 +0000
+
+    some fixes from openbsd via brad
+    
+    
+    svn:r207
+
+commit 682d598ada027ef7713168b776955143d07417de
+Author: Niels Provos <provos at gmail.com>
+Date:   Mon Feb 27 02:33:02 2006 +0000
+
+    add log.c to build file; remove err.c; reported by Sreekant Sreedharan
+    
+    
+    svn:r206
+
+commit 38b33048ebbef976bb1e77499a9487ee9bfc072c
+Author: Niels Provos <provos at gmail.com>
+Date:   Mon Feb 27 02:27:37 2006 +0000
+
+    make a simple test for HTTP POST requests
+    
+    
+    svn:r205
+
+commit 60192b462563034cfa179c98f50a1bf51e0f3859
+Author: Niels Provos <provos at gmail.com>
+Date:   Sun Feb 26 20:18:35 2006 +0000
+
+    improved/well-completely rewritten rtsig support by Mathew Mills; fix some
+    cases where regress would not pass on Linux
+    
+    
+    svn:r204
+
+commit f6550f407c6c74386f3bdcabf0a5e211a9b98e04
+Author: Niels Provos <provos at gmail.com>
+Date:   Sun Feb 26 20:13:04 2006 +0000
+
+    provide strlcpy for the unenlightened libcs
+    
+    
+    svn:r203
+
+commit 88bd79439d0c37468e9da9ee7354cd2405fba532
+Author: Niels Provos <provos at gmail.com>
+Date:   Mon Feb 13 04:53:58 2006 +0000
+
+    make it compile on mac os x
+    
+    
+    svn:r202
+
+commit 896bf3a2607c25ded5b732de35da63bd8016f9ed
+Author: Niels Provos <provos at gmail.com>
+Date:   Mon Feb 13 02:22:48 2006 +0000
+
+    many changes for fixing a small bug: post requests would not send the post
+    data.  I took the opportunity to reorganize a bit.
+    
+    
+    svn:r201
+
+commit 7b78c82823a8d65338503b8aabd3a606116d7cfc
+Author: Niels Provos <provos at gmail.com>
+Date:   Mon Feb 13 01:51:58 2006 +0000
+
+    limit the amount of data bufferevents are going to consume to something
+    reasonable; in some circumstances it could happen that libevent happily
+    allocated 100MB in read buffers without telling the user; found by
+    christopher maxwell - parts of these changes are from his patch.
+    
+    
+    svn:r200
+
+commit f296e6336ac80c8c46e563e84372501434d8884b
+Author: Niels Provos <provos at gmail.com>
+Date:   Fri Feb 3 19:26:06 2006 +0000
+
+    allow setting an event base for bufferevents; from phil oleson
+    
+    
+    svn:r199
+
+commit 6717cf313ac8b06f8f588f071d333854a6e1fe1e
+Author: Niels Provos <provos at gmail.com>
+Date:   Fri Feb 3 19:24:28 2006 +0000
+
+    fix a compile problem when USE_DEBUG is enabled
+    
+    
+    svn:r198
+
+commit c398d788119564faf16ef856aef897b4c02b4839
+Author: Niels Provos <provos at gmail.com>
+Date:   Thu Feb 2 22:36:37 2006 +0000
+
+    disable bufferevent after we have received the data that we care for.
+    
+    
+    svn:r197
+
+commit a3bb4a035fe27dcdf52158d115c4caea153dabf5
+Author: Niels Provos <provos at gmail.com>
+Date:   Sun Jan 22 05:08:50 2006 +0000
+
+    I often need some very simple HTTP functionality, so this is a first stab
+    at integrating something really simple with HTTP.  The interface is still
+    evolving as I start messing with it.  Not all the interfaces are properly
+    exported yet.
+    
+    I am also trying to figure out how to intelligently hide the details about
+    the different structures from users, so that that things can be changed
+    around later.
+    
+    
+    svn:r196
+
+commit 8af2db10d95a3bcae2702b25ded991e6ed3be12a
+Author: Niels Provos <provos at gmail.com>
+Date:   Sun Jan 22 05:06:29 2006 +0000
+
+    version 1.2
+    
+    
+    svn:r195
+
+commit 36bedaef19b18ba1d6633c94622e9134a463b6ef
+Author: Niels Provos <provos at gmail.com>
+Date:   Sun Jan 22 05:06:14 2006 +0000
+
+    another fix from art
+    
+    
+    svn:r194
+
+commit 3c74f06f428c83c400146cdaace47e52347b72d6
+Author: Niels Provos <provos at gmail.com>
+Date:   Sat Jan 21 03:04:31 2006 +0000
+
+    improved manpage from Phil Oleson
+    
+    
+    svn:r193
+
+commit 1d308e88139bd549b99cddae4025ce4d499070b7
+Author: Niels Provos <provos at gmail.com>
+Date:   Sat Dec 17 20:25:22 2005 +0000
+
+    mostly whitespace fixes from OpenBSD via Brad
+    
+    
+    svn:r192
+
+commit 686dede71bd2da2e6352c2e59efc7b99d692a937
+Author: Niels Provos <provos at gmail.com>
+Date:   Sat Dec 17 20:18:10 2005 +0000
+
+    do not undefine USE_DEBUG in header file; allow CFLAGS specification; from
+    Stas Bekman
+    
+    
+    svn:r191
+
+commit 139e862e32d76d0fd04f754eaf532c1608faebe7
+Author: Niels Provos <provos at gmail.com>
+Date:   Sat Dec 17 20:15:25 2005 +0000
+
+    do not remove kq inkernel flag before event_del gets to it; bug reported by
+    Tassilo von Parseval; also add a test for this behavior.
+    
+    
+    svn:r190
+
+commit 0c48c70680727ea0d6aed694b271d40019f2aa15
+Author: Niels Provos <provos at gmail.com>
+Date:   Thu Dec 8 23:05:42 2005 +0000
+
+    windows memory corruption bug fix from I-M Weasel via Nick Mathewson.
+    
+    
+    svn:r189
+
+commit 8d1317d71c46e27c5073d3429a64af69de0351a6
+Author: Niels Provos <provos at gmail.com>
+Date:   Tue Dec 6 03:26:28 2005 +0000
+
+    add evbuffer_add_vprintf interface from artur grabowski; add some testing
+    
+    
+    svn:r188
+
+commit 9c9f0651842bbb84d16e301640d8e5e6a1c34297
+Author: Niels Provos <provos at gmail.com>
+Date:   Sat Dec 3 20:51:23 2005 +0000
+
+    avoid double recacle when loop_once is used; from Richard Nyberg
+    
+    
+    svn:r187
+
+commit 68292e2f45dabe21a301c0bb5864e2c2026176f3
+Author: Niels Provos <provos at gmail.com>
+Date:   Sat Dec 3 17:52:47 2005 +0000
+
+    signal handler satefy improvements from Theo DeRaadt
+    
+    
+    svn:r186
+
+commit 65644dfb80f4aa1b0501d300f015efeb3bd35dd7
+Author: Niels Provos <provos at gmail.com>
+Date:   Sat Nov 12 19:04:17 2005 +0000
+
+    solaris kernel changes are not backwards compatible - how retarded.  problem
+    pointed out by: Geoffrey Giesemann
+    
+    
+    svn:r185
+
+commit 11a40d478efcc69a379a07f005beb0415f6954e6
+Author: Niels Provos <provos at gmail.com>
+Date:   Tue Sep 20 15:59:00 2005 +0000
+
+    event.3
+    
+    
+    svn:r184
+
+commit 50f7aaef6b7742263a3212264cb746f456d55168
+Author: Niels Provos <provos at gmail.com>
+Date:   Fri Sep 9 06:56:12 2005 +0000
+
+    make it compile on mac os x
+    
+    
+    svn:r183
+
+commit 3b9b3f6b7e7325c380bddec6ff86e1ead63dd582
+Author: Niels Provos <provos at gmail.com>
+Date:   Fri Sep 2 05:34:14 2005 +0000
+
+    don't spam on stderr
+    
+    
+    svn:r182
+
+commit acafd9942f4829205229b80ee32f1c3edfc071a6
+Author: Niels Provos <provos at gmail.com>
+Date:   Fri Sep 2 05:34:01 2005 +0000
+
+    make it run on older shells; from tor user via Nick Mathewson <nickm at freehaven.net>
+    
+    
+    svn:r181
+
+commit 7000fe664d16094741e6e6728f7998a2c45b7eb2
+Author: Niels Provos <provos at gmail.com>
+Date:   Tue Aug 30 06:02:09 2005 +0000
+
+    remove dos opportunity
+    
+    
+    svn:r180
+
+commit 5c5145dc1ca44fab0e6f543dbb2cbf95583e0bbf
+Author: Niels Provos <provos at gmail.com>
+Date:   Mon Aug 29 07:23:51 2005 +0000
+
+    oops forgot this one
+    
+    
+    svn:r179
+
+commit b4ab56dc045e2d8a04600a8579e35b52532d3859
+Author: Niels Provos <provos at gmail.com>
+Date:   Sun Aug 28 23:48:16 2005 +0000
+
+    support for arrays on structs.
+    
+    
+    svn:r178
+
+commit 32acc283c8ae44d9c4e306dbaf6a9fead5e71952
+Author: Niels Provos <provos at gmail.com>
+Date:   Sat Aug 27 06:29:52 2005 +0000
+
+    a few more bug fixes
+    
+    
+    svn:r177
+
+commit 2813f1b0f14967cabb0c59fc44518670f38bec37
+Author: Niels Provos <provos at gmail.com>
+Date:   Fri Aug 26 02:15:54 2005 +0000
+
+    constify
+    
+    
+    svn:r176
+
+commit aaf56fb61e0a8f2299e758f44cac93ba60cd9807
+Author: Niels Provos <provos at gmail.com>
+Date:   Tue Aug 23 07:43:11 2005 +0000
+
+    fix API problems for get in some types
+    
+    
+    svn:r175
+
+commit 6e55da606ced033562be6d8a023b89c6ca484c4b
+Author: Niels Provos <provos at gmail.com>
+Date:   Mon Aug 22 01:39:54 2005 +0000
+
+    typo
+    
+    
+    svn:r174
+
+commit e5ab86a726c26fc775589182d4290603df7e12d3
+Author: Niels Provos <provos at gmail.com>
+Date:   Mon Aug 22 01:38:23 2005 +0000
+
+    make use of the built in warn/err code
+    
+    
+    svn:r173
+
+commit c4e60994a2cf955908f236b4945ea7288950ec45
+Author: Niels Provos <provos at gmail.com>
+Date:   Mon Aug 22 01:34:34 2005 +0000
+
+    including the tagging code that is required by event_rpcgen.py; test the
+    new functionality.
+    
+    
+    svn:r172
+
+commit 949cbd12fa314a1d0f4296985cdfaa6ec63e960b
+Author: Niels Provos <provos at gmail.com>
+Date:   Sun Aug 21 16:25:02 2005 +0000
+
+    generate marshalling code based on libevent
+    
+    
+    svn:r171
+
+commit fbee901e2326effd07d8c29f07621148648c17a7
+Author: Niels Provos <provos at gmail.com>
+Date:   Thu Jul 14 04:09:55 2005 +0000
+
+    correctly test against SIG_ERR
+    
+    
+    svn:r170
+
+commit e1759c7bbde90093709b70020fadc8a9f90416d5
+Author: Niels Provos <provos at gmail.com>
+Date:   Sun Jun 19 20:28:20 2005 +0000
+
+    fix issue with signedness warnings; from Alexander von Gernler
+    
+    
+    svn:r169
+
+commit 9938aaf5114110c60a8a4f59866be3de5cd88c48
+Author: Niels Provos <provos at gmail.com>
+Date:   Sat Jun 11 21:15:22 2005 +0000
+
+    treate EINVAL as per fd error in kqueue; use argument for debug macros in
+    poll; version 1.1a; EINVAL fix from Nick Mathewson
+    
+    
+    svn:r168
+
+commit 81bd0a0687f1350f5d1a427ca2ed5858fcfa3af4
+Author: Niels Provos <provos at gmail.com>
+Date:   Fri Jun 10 07:42:14 2005 +0000
+
+    bufferevents would not correctly detect EOF on read; reported by
+    Jonathan Brannan
+    
+    
+    svn:r167
+
+commit 7a0c530b5645ea0b50e7524eae9ddab170293a18
+Author: Niels Provos <provos at gmail.com>
+Date:   Wed May 11 04:08:51 2005 +0000
+
+    performance improvements of select handler by Nick Mathewson; I added
+    better recovery when memory allocation fails; something that needs to be
+    done for the poll improvements, too.
+    
+    
+    svn:r166
+
+commit 57fafe6b5f9b416367f01e77540c7f72ae019c5d
+Author: Niels Provos <provos at gmail.com>
+Date:   Wed May 11 03:34:42 2005 +0000
+
+    detect kqueue bug in Mac OS X 10.4; from Nick Mathewson
+    
+    
+    svn:r165
+
+commit 145c11fd6d69b52f3549698a2084b9c32bdeabee
+Author: Niels Provos <provos at gmail.com>
+Date:   Tue May 10 17:27:58 2005 +0000
+
+    more credits
+    
+    
+    svn:r164
+
+commit dc816fdc7adeb3703b0ad548ce4023fd9714721b
+Author: Niels Provos <provos at gmail.com>
+Date:   Tue May 10 17:27:11 2005 +0000
+
+    type; from Alexander von Gernler
+    
+    
+    svn:r163
+
+commit cdcfae7fc1c2fe974094caef649ab9ba9a8f139a
+Author: Niels Provos <provos at gmail.com>
+Date:   Tue May 10 08:14:39 2005 +0000
+
+    call epoll_ctl after changing our state table; in case that epoll_ctl fails
+    we need to make sure that the table is consistent. from William Ahern
+    
+    
+    svn:r162
+
+commit c15db0349af138302a2749b5a80390941a428b6d
+Author: Niels Provos <provos at gmail.com>
+Date:   Tue May 10 04:40:03 2005 +0000
+
+    performance improvements by Nick Mathewson; we modify the arrays directly
+    in poll_add and poll_del; some minor tweaks by me.  earmark this as 1.0f
+    
+    
+    svn:r161
+
+commit d6e56988a769f97653205f57d32bdd48091642b5
+Author: Niels Provos <provos at gmail.com>
+Date:   Tue May 10 04:16:17 2005 +0000
+
+    sync
+    
+    
+    svn:r160
+
+commit e444040f3d4aa96f7e0e726fc9542f596910d938
+Author: Niels Provos <provos at gmail.com>
+Date:   Fri Apr 29 02:55:20 2005 +0000
+
+    fix rule that depended on obsolete libevent.a
+    
+    
+    svn:r159
+
+commit 1585013558c04d7e366d8db260c0c1f102731e8c
+Author: Niels Provos <provos at gmail.com>
+Date:   Tue Apr 26 15:48:42 2005 +0000
+
+    prototype addition; from Alexander von Gernler
+    
+    
+    svn:r158
+
+commit dfe4e16e138a48c8593c03a5db0b9a67a83ddeb4
+Author: Niels Provos <provos at gmail.com>
+Date:   Tue Apr 26 07:17:42 2005 +0000
+
+    pointer arithmetic bug; from Nick Mathewson
+    
+    
+    svn:r157
+
+commit 0f5b0389e54990972e36a062dd443d163f5d1edc
+Author: Niels Provos <provos at gmail.com>
+Date:   Sat Apr 23 15:40:14 2005 +0000
+
+    fix memory leak; from Andrey Matveev
+    
+    
+    svn:r156
+
+commit c09a817563b505a7ebe7b1ceb75e829a70d7ebb2
+Author: Niels Provos <provos at gmail.com>
+Date:   Sat Apr 23 03:03:28 2005 +0000
+
+    1.0d
+    
+    
+    svn:r155
+
+commit 425fc0d5747936ebe4af7f46571bab0e427cc243
+Author: Niels Provos <provos at gmail.com>
+Date:   Sat Apr 23 02:53:39 2005 +0000
+
+    provide a function to read lines from buffers; comes in handy for many
+    AscII protocols.
+    
+    
+    svn:r154
+
+commit fdfa743ccc7466e0532411098ee1ad655dfe393b
+Author: Niels Provos <provos at gmail.com>
+Date:   Sat Apr 23 02:48:49 2005 +0000
+
+    libtoolize; from Nick Mathewson
+    
+    
+    svn:r153
+
+commit 0cce9a01d72b65a95175ff2b48868fc5d0cbc853
+Author: Niels Provos <provos at gmail.com>
+Date:   Sat Apr 23 02:48:27 2005 +0000
+
+    better comment
+    
+    
+    svn:r152
+
+commit 2fa38549d7b33b94994894bcb6d696127bd946dc
+Author: Niels Provos <provos at gmail.com>
+Date:   Sat Apr 23 02:40:26 2005 +0000
+
+    compress read and write events for the same file descriptor into on poll
+    descriptor; from Nick Mathewson plus bug fixes from me.
+    
+    
+    svn:r151
+
+commit bca504e41cd146f39b1fdf749ee6ea3718c34f02
+Author: Niels Provos <provos at gmail.com>
+Date:   Sat Apr 23 02:38:30 2005 +0000
+
+    fix typos
+    
+    
+    svn:r150
+
+commit 1d0d4bc66e96e9782db3c53dfea6ba41f1c3b944
+Author: Niels Provos <provos at gmail.com>
+Date:   Sun Apr 17 06:51:10 2005 +0000
+
+    make gotsig volatile. from Alexander von Gernler
+    
+    
+    svn:r149
+
+commit 5e2ba12a89b47a0d075e51e526b57333e712fa0e
+Author: Niels Provos <provos at gmail.com>
+Date:   Thu Apr 14 23:28:06 2005 +0000
+
+    fixes from alexander von gernler
+    
+    
+    svn:r148
+
+commit bc2c695b7672490e320b28f602e8207ce2dd3cac
+Author: Niels Provos <provos at gmail.com>
+Date:   Sun Apr 10 07:18:18 2005 +0000
+
+    type; set the priorities based on the correct base; reported by Vinh D. Lee
+    
+    
+    svn:r147
+
+commit 6ba5e0d03ed6db885ceec5313e66e02c5aaa8db1
+Author: Niels Provos <provos at gmail.com>
+Date:   Sat Apr 9 03:32:11 2005 +0000
+
+    fix a windows bug; from nick mathewson
+    
+    
+    svn:r146
+
+commit d47798be5a106177a7ce99b314878d8d77fa8a96
+Author: Niels Provos <provos at gmail.com>
+Date:   Thu Apr 7 03:35:56 2005 +0000
+
+    return error code when kqueue fails on a specific fd; from alexander von
+    gernler.
+    
+    
+    svn:r145
+
+commit 8f0541af3e0c0126ad4b1997a102ca162d936355
+Author: Niels Provos <provos at gmail.com>
+Date:   Mon Apr 4 00:37:26 2005 +0000
+
+    forgot
+    
+    
+    svn:r144
+
+commit 4157d33ee9456e4468ffc3ad1de3d6b6d6a43a8f
+Author: Niels Provos <provos at gmail.com>
+Date:   Mon Apr 4 00:35:14 2005 +0000
+
+    acknowledgements and new version
+    
+    
+    svn:r143
+
+commit bc9b24876b41077e567655ccbc6011f4be951f0d
+Author: Niels Provos <provos at gmail.com>
+Date:   Mon Apr 4 00:10:17 2005 +0000
+
+    make it compile on solaris
+    
+    
+    svn:r142
+
+commit 1e128e2d05888c86a2058ab5979607450c605c64
+Author: Niels Provos <provos at gmail.com>
+Date:   Sun Apr 3 07:46:27 2005 +0000
+
+    fix bug that broke poll/select stuff
+    
+    
+    svn:r141
+
+commit 720f7fcc0d313af430d8a4ac1b4ed8e5bc53c5fc
+Author: Niels Provos <provos at gmail.com>
+Date:   Sat Apr 2 08:43:55 2005 +0000
+
+    event_base_loop and some event logging fixes.
+    
+    
+    svn:r140
+
+commit 32bed8f9b640757766937dec613ca9b1feb704a4
+Author: Niels Provos <provos at gmail.com>
+Date:   Fri Apr 1 04:20:39 2005 +0000
+
+    build fixes from nick mathewson
+    
+    
+    svn:r139
+
+commit 1919a4aed60dc9c95aef10974dc6945f01832377
+Author: Niels Provos <provos at gmail.com>
+Date:   Thu Mar 31 19:53:06 2005 +0000
+
+    suppress valgrind warnings from knew -a- pimb.org
+    
+    
+    svn:r138
+
+commit d85d47f8ca128f4b4f8b9cae1dfb2be5da0f4173
+Author: Niels Provos <provos at gmail.com>
+Date:   Tue Mar 29 07:16:52 2005 +0000
+
+    devpoll improvements from Andrew Danforth <adanforth at gmail.com>
+    
+    
+    svn:r137
+
+commit fbdaf3ab6229f036c0561a347f06b7f913a2b165
+Author: Niels Provos <provos at gmail.com>
+Date:   Tue Mar 29 07:03:10 2005 +0000
+
+    debugging callbacks from Nick Mathewson <nickm at freehaven.net>
+    
+    
+    svn:r136
+
+commit 99442c6f00c16502afa517e063ff15e20c00212a
+Author: Niels Provos <provos at gmail.com>
+Date:   Tue Mar 29 06:54:36 2005 +0000
+
+    windows fixes from Nick Mathewson <nickm at freehaven.net>
+    
+    
+    svn:r135
+
+commit da971e5fc81c86038bb99513e993171d9d5a0c43
+Author: Niels Provos <provos at gmail.com>
+Date:   Sat Mar 12 02:30:32 2005 +0000
+
+    bug fix in event_once by Jody Belka <knew at pimb.org>
+    
+    
+    svn:r134
+
+commit c5e4eee03b7852754f7a843ee0f9350ef2579fcb
+Author: Niels Provos <provos at gmail.com>
+Date:   Fri Feb 25 05:28:57 2005 +0000
+
+    event_get_version() and event_get_method() from
+    Nick Mathewson <nickm at freehaven.net>
+    
+    
+    svn:r133
+
+commit a46c2609bfa4d68e78665dd55461af9b1ce9651b
+Author: Niels Provos <provos at gmail.com>
+Date:   Tue Feb 22 16:12:34 2005 +0000
+
+    compilation fixes for IRIX; from Nick Mathewson <nickm at freehaven.net>
+    
+    
+    svn:r132
+
+commit 905ee67d0032eb86e4de37878c45cc4bd67cda47
+Author: Niels Provos <provos at gmail.com>
+Date:   Tue Feb 22 15:47:53 2005 +0000
+
+    provide maintainer mode in automake; put event_gotsig back into global
+    state; return proper error code
+    
+    
+    svn:r131
+
+commit 42b97958672d382435ed2db47468176e3518cb77
+Author: Niels Provos <provos at gmail.com>
+Date:   Fri Feb 4 11:17:18 2005 +0000
+
+    make it compile again; from dug song
+    
+    
+    svn:r130
+
+commit 3ba224dbd5e5e482bb2be47fa704beff46540a28
+Author: Niels Provos <provos at gmail.com>
+Date:   Mon Jan 3 18:58:40 2005 +0000
+
+    fixes for threaded operations from Andrew Danforth
+    
+    
+    svn:r129
+
+commit bd6999b4a2b60fdd4e2e317ca84d382f2b9b0ace
+Author: Niels Provos <provos at gmail.com>
+Date:   Tue Dec 14 03:36:12 2004 +0000
+
+    fix issue where event_del is called before event_set.  bad bad thing to do.
+    pointed out by Mark Kidwell <MKidwell at looksmart.net>
+    
+    
+    svn:r128
+
+commit d9cf6fe2f16eae6d97251b905473aea4e57ed0c6
+Author: Niels Provos <provos at gmail.com>
+Date:   Sun Dec 5 22:16:35 2004 +0000
+
+    version 1.0
+    
+    
+    svn:r127
+
+commit cacd83983f20af59b9a137886131a63f834a06e9
+Author: Niels Provos <provos at gmail.com>
+Date:   Wed Dec 1 20:10:16 2004 +0000
+
+    documentation on thread safe events
+    
+    
+    svn:r126
+
+commit 256460459e6e9a8358337f64b8080c6665f34c1a
+Author: Niels Provos <provos at gmail.com>
+Date:   Wed Dec 1 20:04:54 2004 +0000
+
+    provide more base-based functions :-)
+    
+    
+    svn:r125
+
+commit f5a62ed30e895fb622db889b24184851f8f7ea04
+Author: Niels Provos <provos at gmail.com>
+Date:   Wed Dec 1 19:59:00 2004 +0000
+
+    make a separate verify target
+    
+    
+    svn:r124
+
+commit b011b734eb6cfe3ea15f926dbfa696a262d7cff7
+Author: Niels Provos <provos at gmail.com>
+Date:   Thu Nov 25 09:54:33 2004 +0000
+
+    forgot printf parameter
+    
+    
+    svn:r123
+
+commit 8773c4c96c47078ee502030daef36078bc0e75a4
+Author: Niels Provos <provos at gmail.com>
+Date:   Thu Nov 25 09:50:18 2004 +0000
+
+    make libevent thread-safe; first cut
+    
+    
+    svn:r122
+
+commit 96a25ae6a2d4f63f1df483cd3d49b779175031b0
+Author: Niels Provos <provos at gmail.com>
+Date:   Sun Sep 19 22:38:34 2004 +0000
+
+    when converting usec to msec round up; so that libevent does not spin until
+    the time conversion has caught up; from Aaron Hopkins <aaron at die.net>
+    
+    
+    svn:r121
+
+commit fa6c304d9e11982058ea8fc1b6f970924c599f52
+Author: Niels Provos <provos at gmail.com>
+Date:   Sun Sep 19 21:08:09 2004 +0000
+
+    support for event priorities; active events are scheduled into priority queues;
+    lower priorities get always processed before higher priorities
+    
+    
+    svn:r120
+
+commit 6df2ede5f5e2b3db8c2647327274e83cc485600b
+Author: Niels Provos <provos at gmail.com>
+Date:   Tue Aug 10 18:29:37 2004 +0000
+
+    close file descriptors on exec(); suggested by aaron at die.net
+    
+    
+    svn:r119
+
+commit 6d4bafd03c84b03b1f904ca466ac2ac173a9626f
+Author: Niels Provos <provos at gmail.com>
+Date:   Tue Aug 10 17:49:53 2004 +0000
+
+    work around a bug in Solaris by using pwrite instead of write; reported by
+    michael.wookey at citrix.com.au
+    
+    
+    svn:r118
+
+commit 60216e8b1d3cad7992923335fbdb21446386d476
+Author: Niels Provos <provos at gmail.com>
+Date:   Fri Jul 30 05:15:59 2004 +0000
+
+    mention devpoll
+    
+    
+    svn:r117
+
+commit 5de7f4eea5d629b27359897a351ebae1c484a426
+Author: Niels Provos <provos at gmail.com>
+Date:   Fri Jul 30 05:04:36 2004 +0000
+
+    devpoll support. weeh
+    
+    
+    svn:r116
+
+commit 98c14269929187c1abab83737a15e19d92a74b78
+Author: Niels Provos <provos at gmail.com>
+Date:   Fri Jul 30 05:03:55 2004 +0000
+
+    fix compiler warning
+    
+    
+    svn:r115
+
+commit d829ccea3d25ce1f7ec4514d1735c26182b3beff
+Author: Niels Provos <provos at gmail.com>
+Date:   Fri Jul 30 05:00:44 2004 +0000
+
+    fix a warning on freebsd;
+    
+    
+    svn:r114
+
+commit 06aaa92fe298e376d432947c6eef9ddabfd5faec
+Author: Niels Provos <provos at gmail.com>
+Date:   Fri Jul 30 04:57:21 2004 +0000
+
+    devpoll support
+    
+    
+    svn:r113
+
+commit 6f2f98bd26a04476387e26132fd3ef406b387981
+Author: Niels Provos <provos at gmail.com>
+Date:   Tue Jul 20 06:12:30 2004 +0000
+
+    make it compile on solaris
+    
+    
+    svn:r112
+
+commit 6db3da27e2ef340b7547db2be0c0559d410575c2
+Author: Niels Provos <provos at gmail.com>
+Date:   Mon Jul 19 06:18:10 2004 +0000
+
+    should work a little bit better with solaris compiler
+    
+    
+    svn:r111
+
+commit 44d88ea6068f5926f8d04b837819216235a7779d
+Author: Niels Provos <provos at gmail.com>
+Date:   Tue Jul 13 08:02:45 2004 +0000
+
+    change evbuffer_read so that it reads directly into the memory allocated to
+    the evbuffer; this avoids one unnecessary data copy.
+    
+    
+    svn:r110
+
+commit ee739151a155d358edc48c4ddf88a63b9e0132f0
+Author: Niels Provos <provos at gmail.com>
+Date:   Tue Jul 13 08:01:05 2004 +0000
+
+    make the sockets non-blocking; increase the data size for bufferevent
+    testing
+    
+    
+    svn:r109
+
+commit a78472da72d9b3ac765997a9ce1dba7cca436618
+Author: Niels Provos <provos at gmail.com>
+Date:   Tue Jul 13 07:55:01 2004 +0000
+
+    fix a bug for persistent events when using select()
+    
+    
+    svn:r108
+
+commit de5fc61928cd202ef35c860039ab16000b89fd5b
+Author: Niels Provos <provos at gmail.com>
+Date:   Fri Jun 11 04:42:56 2004 +0000
+
+    make it compile on systems without vasprintf
+    
+    
+    svn:r107
+
+commit 49dbb7ea4c0938da3c5a0a531030452e6a8b400b
+Author: Niels Provos <provos at gmail.com>
+Date:   Fri Jun 11 04:39:11 2004 +0000
+
+    reformat comment
+    
+    
+    svn:r106
+
+commit 025d1bc2206c5b7edb2fb0c2ad58e7322f4b8b4d
+Author: Niels Provos <provos at gmail.com>
+Date:   Mon May 24 00:19:52 2004 +0000
+
+    fix some of the windows compile issues; make buffer.c faster; support
+    signals via pipes.
+    
+    
+    svn:r105
+
+commit 849d5249120e6d6c95b655672900b1381d8f7613
+Author: Niels Provos <provos at gmail.com>
+Date:   Tue Apr 13 06:22:48 2004 +0000
+
+    license
+    
+    
+    svn:r104
+
+commit 24ffe1cb5571506e1b9ae212ef1b17b45a7ea396
+Author: Niels Provos <provos at gmail.com>
+Date:   Sun Apr 4 04:04:16 2004 +0000
+
+    add a section about BUGS
+    
+    
+    svn:r103
+
+commit 8f2e1f6d3ac14c67d38c86edfd8efb50d83039a0
+Author: Niels Provos <provos at gmail.com>
+Date:   Sun Apr 4 03:59:22 2004 +0000
+
+    add section about buffered events
+    
+    
+    svn:r102
+
+commit fbf01c7f044f143046df7b9c566b5f49770ba0cb
+Author: Niels Provos <provos at gmail.com>
+Date:   Sun Apr 4 02:20:21 2004 +0000
+
+    support for low and high watermarks
+    
+    
+    svn:r101
+
+commit 3772ec8e95d2c5eed60ff37024fe2ab04326b0ec
+Author: Niels Provos <provos at gmail.com>
+Date:   Sun Apr 4 02:19:52 2004 +0000
+
+    add new functions
+    
+    
+    svn:r100
+
+commit 8f7a7a910c4b940e3bac0923df6661d6eada619a
+Author: Niels Provos <provos at gmail.com>
+Date:   Sun Apr 4 02:19:39 2004 +0000
+
+    version 0.8
+    
+    
+    svn:r99
+
+commit 57a51a161dd9a453bc1abf2ffa9b6149d1ce9ae2
+Author: Niels Provos <provos at gmail.com>
+Date:   Sun Apr 4 02:19:08 2004 +0000
+
+    provide more regression tests
+    
+    
+    svn:r98
+
+commit 85fbdbb243a17da6fb804b14a4782d2795889c82
+Author: Niels Provos <provos at gmail.com>
+Date:   Sat Mar 27 17:42:49 2004 +0000
+
+    faster insertion of timeouts; ensure uniqueness in RB-tree compare function
+    
+    
+    svn:r97
+
+commit 246d8583c08dc31d70479d538c8b1f4056f49c43
+Author: Niels Provos <provos at gmail.com>
+Date:   Tue Mar 23 04:05:37 2004 +0000
+
+    allow the write callback to called even if there is no buffered data
+    
+    
+    svn:r96
+
+commit 5908bd721368a9aebc752fffbe6ec5b753ed7e3a
+Author: Niels Provos <provos at gmail.com>
+Date:   Tue Mar 23 03:43:53 2004 +0000
+
+    provided buffered events
+    
+    
+    svn:r95
+
+commit cd699abf44d6da49dffff09f72f843bbb0211aae
+Author: Niels Provos <provos at gmail.com>
+Date:   Mon Mar 22 21:46:45 2004 +0000
+
+    support event_loopexit(); idea from marius; and fix event_once()
+    
+    
+    svn:r94
+
+commit ec2c1db47e2931fc4be55f9653b3b4182d674cc7
+Author: Niels Provos <provos at gmail.com>
+Date:   Sun Feb 22 21:17:23 2004 +0000
+
+    new event_once interface; start of buffering interface for buffered events
+    
+    
+    svn:r93
+
+commit 1b974101b9617b0fdceac534e7e0fd73ab6c90d8
+Author: Niels Provos <provos at gmail.com>
+Date:   Sat Dec 20 20:05:17 2003 +0000
+
+    fix kqueue behaviour; requires special kernel patch to make kqueue
+    semantics consistent; from marius at umich.edu
+    
+    
+    svn:r92
+
+commit 8a92823c67843cf7ab8f7735adc3aac5dcd4b9c8
+Author: Niels Provos <provos at gmail.com>
+Date:   Sat Oct 25 21:59:24 2003 +0000
+
+    make rtsig optional
+    
+    
+    svn:r91
+
+commit e1cd86d73e9959f50fa24ac39dbb6cea9a14b386
+Author: Niels Provos <provos at gmail.com>
+Date:   Sat Oct 25 21:58:33 2003 +0000
+
+    fixes to handle error cases by Anatoly Vorobey at pobox.com
+    
+    
+    svn:r90
+
+commit d780375fc486b189c64c13e5cf6bd5e0559bde61
+Author: Niels Provos <provos at gmail.com>
+Date:   Sat Oct 25 21:49:44 2003 +0000
+
+    fix source files
+    
+    
+    svn:r89
+
+commit e2f06f4f6a6b76e217cb290a6d47918521da6f1e
+Author: Niels Provos <provos at gmail.com>
+Date:   Sat Oct 25 21:49:25 2003 +0000
+
+    fix license
+    
+    
+    svn:r88
+
+commit e9cd9b56a3fbf5f19f5f241c730666c7f3d89bcd
+Author: Niels Provos <provos at gmail.com>
+Date:   Sat Oct 11 02:54:41 2003 +0000
+
+    bad realloc; found by awohl at chessclub
+    
+    
+    svn:r87
+
+commit 1d66008bbf3ce97ec23e7193cb4daefda06d1955
+Author: Niels Provos <provos at gmail.com>
+Date:   Sun Oct 5 22:02:49 2003 +0000
+
+    make it work with more shells
+    
+    
+    svn:r86
+
+commit 98af43a351fe571c5d562a8c63de5b3839a0e897
+Author: Niels Provos <provos at gmail.com>
+Date:   Sat Oct 4 23:33:04 2003 +0000
+
+    3-clause license and changes to the benchmark by davide
+    
+    
+    svn:r85
+
+commit c3f496c71b598194ee9efe74906ecfe57155678b
+Author: Niels Provos <provos at gmail.com>
+Date:   Sat Oct 4 23:27:26 2003 +0000
+
+    minor corrections; change license to 3-clause BSD license
+    
+    
+    svn:r84
+
+commit 763f6a77307f0ff66755f1e0732cb9f7cf3b43c3
+Author: Niels Provos <provos at gmail.com>
+Date:   Thu Sep 25 23:18:52 2003 +0000
+
+    proper rtsig
+    
+    
+    svn:r83
+
+commit f08bf5325eb9bb2afa3b68f629a69de59920406b
+Author: Niels Provos <provos at gmail.com>
+Date:   Thu Sep 25 23:07:09 2003 +0000
+
+    fix poll hup support
+    
+    
+    svn:r82
+
+commit ec70653b61cdf20f4640a9e3d445a2f77c63e738
+Author: Niels Provos <provos at gmail.com>
+Date:   Thu Sep 25 17:55:17 2003 +0000
+
+    more tests
+    
+    
+    svn:r81
+
+commit c61a2547e26d073d8acf7b9503d9633bbadb3c48
+Author: Niels Provos <provos at gmail.com>
+Date:   Thu Sep 25 03:30:49 2003 +0000
+
+    __FUNCTION__ -> __func__
+    
+    
+    svn:r80
+
+commit 9d26a46c39b312985988c849f519d330b1177405
+Author: Niels Provos <provos at gmail.com>
+Date:   Thu Sep 25 03:29:37 2003 +0000
+
+    windows support
+    
+    
+    svn:r79
+
+commit e0216ed7096c05356fb18f394dcf454a6314d036
+Author: Niels Provos <provos at gmail.com>
+Date:   Thu Sep 25 03:28:43 2003 +0000
+
+    credits
+    
+    
+    svn:r78
+
+commit e506eaf79e11f34a15efa8d91aab883d7dff3160
+Author: Niels Provos <provos at gmail.com>
+Date:   Thu Sep 25 03:26:53 2003 +0000
+
+    constify; some windows stuff by mike davis; fix a poll bug
+    
+    
+    svn:r77
+
+commit dd0b36ab03d0fd966f694f5152220987d84b2c5d
+Author: Niels Provos <provos at gmail.com>
+Date:   Thu Sep 25 03:25:17 2003 +0000
+
+    update build stuff
+    
+    
+    svn:r76
+
+commit 2bf53326c06f0ddee544e64c9281192253767aac
+Author: Niels Provos <provos at gmail.com>
+Date:   Thu Sep 25 02:53:39 2003 +0000
+
+    Real time signal support from Taral <taral at taral.net>
+    
+    
+    svn:r75
+
+commit ee8cc84e9f4d3a5d5b9f4d7e67e9c2f2b2adf037
+Author: Niels Provos <provos at gmail.com>
+Date:   Tue Sep 23 22:28:01 2003 +0000
+
+    Windows support from Mike Davis
+    
+    
+    svn:r74
+
+commit cde427c1ecd987401f4407fef4d87bc4d77633e2
+Author: Niels Provos <provos at gmail.com>
+Date:   Tue Jun 24 14:45:21 2003 +0000
+
+    found a bug where specifying both read|write for a single event let to
+    a crash; found by Bruno Achauer
+    
+    
+    svn:r73
+
+commit 6ce5b876ea564782600a92ef482485f60d5ae5d5
+Author: Niels Provos <provos at gmail.com>
+Date:   Thu Jun 12 23:33:19 2003 +0000
+
+    clean up from NetBSD integration
+    
+    
+    svn:r72
+
+commit 6551780aefb8f0a8b4d41dc5641b136338fbb2d8
+Author: Niels Provos <provos at gmail.com>
+Date:   Mon Jun 2 19:37:13 2003 +0000
+
+    bug fix from Ira Lee
+    
+    
+    svn:r71
+
+commit 6809f060b2ab9172e0a71cf17b7f4cbdae4be514
+Author: Niels Provos <provos at gmail.com>
+Date:   Mon Jun 2 19:36:52 2003 +0000
+
+    bug fix from Pierre Phaneuf
+    
+    
+    svn:r70
+
+commit b6b1e4ebe9c463767a37eb882a56b359d7251614
+Author: Niels Provos <provos at gmail.com>
+Date:   Mon Jun 2 19:36:22 2003 +0000
+
+    forgot
+    
+    
+    svn:r69
+
+commit 833f0c095d50627b38451de9e887aab07e8464b9
+Author: Niels Provos <provos at gmail.com>
+Date:   Wed Apr 30 19:23:27 2003 +0000
+
+    fix a bug where a event fires twice due to bad active list handling
+    
+    
+    svn:r68
+
+commit bdf5a68b95d61051687507abe29349494c3fcc18
+Author: Niels Provos <provos at gmail.com>
+Date:   Tue Apr 29 18:29:16 2003 +0000
+
+    updated tree code
+    
+    
+    svn:r67
+
+commit 670b94e479791707584b38f8473b51ca4fc11569
+Author: Niels Provos <provos at gmail.com>
+Date:   Mon Apr 14 17:32:19 2003 +0000
+
+    version 0.7
+    
+    
+    svn:r66
+
+commit f9e0c44925d28fd719cd96b7b64927d5af4857a0
+Author: Niels Provos <provos at gmail.com>
+Date:   Thu Apr 10 19:14:03 2003 +0000
+
+    if a timeout on the active list is rescheduled before it can execute it
+    gets removed from the active list;  bug report from Jon Poland AT arbor.net
+    
+    
+    svn:r65
+
+commit 30eff294f0d0c469b762db95f2a21f6b3eee1f9d
+Author: Niels Provos <provos at gmail.com>
+Date:   Wed Apr 9 18:16:07 2003 +0000
+
+    document environment variables
+    
+    
+    svn:r64
+
+commit b0b72eb05eb1567ddd56bfafbc056a535c97b728
+Author: Niels Provos <provos at gmail.com>
+Date:   Wed Apr 9 18:12:11 2003 +0000
+
+    use maximum number of fds for epoll_create; from Davide Libenzi
+    
+    
+    svn:r63
+
+commit 9eb31e5307cab71aa5ede2f835b3e388061c0457
+Author: Niels Provos <provos at gmail.com>
+Date:   Wed Apr 9 18:11:31 2003 +0000
+
+    proper indent
+    
+    
+    svn:r62
+
+commit 7e4e52045e898f2f5bc3412582140e04c30da805
+Author: Niels Provos <provos at gmail.com>
+Date:   Wed Apr 9 18:11:06 2003 +0000
+
+    add some timer macros for operating systems that dont support them
+    
+    
+    svn:r61
+
+commit 04153adb66e1456de3efad0e9ce183e57f99b47d
+Author: Niels Provos <provos at gmail.com>
+Date:   Sun Mar 30 20:19:07 2003 +0000
+
+    EVENT_SHOW_METHOD environment prints which event mechanism we are using;
+    from Davide Libenzi <davidel at xmailserver.org>
+    
+    
+    svn:r60
+
+commit 012a0b53e1b4f3136f3b08ba0742e71b48fadc32
+Author: Niels Provos <provos at gmail.com>
+Date:   Mon Mar 10 05:39:41 2003 +0000
+
+    add benchmark
+    
+    
+    svn:r59
+
+commit 1ed00256d50d5ea4a04e9a864664a4d40aedf23f
+Author: Niels Provos <provos at gmail.com>
+Date:   Mon Mar 10 05:13:02 2003 +0000
+
+    fix type
+    
+    
+    svn:r58
+
+commit ebb73c0db86a39d3aba49f3c5a174f562ce82a8e
+Author: Niels Provos <provos at gmail.com>
+Date:   Mon Mar 10 04:56:41 2003 +0000
+
+    simple bench mark
+    
+    
+    svn:r57
+
+commit 34d794b293a7103a77cf8bfb78a8af90484b4dad
+Author: Niels Provos <provos at gmail.com>
+Date:   Sun Mar 9 23:29:57 2003 +0000
+
+    some cleanup
+    
+    
+    svn:r56
+
+commit d5009e8ad6787274337673b0bb75a566a5dfef2e
+Author: Niels Provos <provos at gmail.com>
+Date:   Sun Mar 9 23:29:26 2003 +0000
+
+    -g
+    
+    
+    svn:r55
+
+commit eb646205bdb48129d1fbcdfda657331a64dd8fc3
+Author: Niels Provos <provos at gmail.com>
+Date:   Sun Mar 9 23:29:04 2003 +0000
+
+    style
+    
+    
+    svn:r54
+
+commit adf0bb84cde497f7ae6c4e4af73be0d5fff720bb
+Author: Niels Provos <provos at gmail.com>
+Date:   Sat Mar 8 20:14:39 2003 +0000
+
+    another test
+    
+    
+    svn:r53
+
+commit 28d248e0067fb91917ab5e60633e71687974a6ed
+Author: Niels Provos <provos at gmail.com>
+Date:   Sat Mar 8 16:50:27 2003 +0000
+
+    copyright
+    
+    
+    svn:r52
+
+commit c48e71d839977ced6aff4eb52ca7e01f7d410d83
+Author: Niels Provos <provos at gmail.com>
+Date:   Sat Mar 8 16:44:51 2003 +0000
+
+    oneshot means that its removed from the kernel list already
+    
+    
+    svn:r51
+
+commit 0036d79ab6d7663618c76ca49ca5173b2ab4424a
+Author: Niels Provos <provos at gmail.com>
+Date:   Sat Mar 8 16:33:18 2003 +0000
+
+    fix kqueue problem
+    
+    
+    svn:r50
+
+commit 33b1c6c4745a769c1d14454d1f22e378757fe80f
+Author: Niels Provos <provos at gmail.com>
+Date:   Sat Mar 8 14:44:08 2003 +0000
+
+    include config.h
+    
+    
+    svn:r49
+
+commit 251c7f6808fc0ab338e1e03402fb043a7670f2e0
+Author: Niels Provos <provos at gmail.com>
+Date:   Sat Mar 8 14:41:00 2003 +0000
+
+    sync
+    
+    
+    svn:r48
+
+commit 481799afd2d4b3161d97399a67f219bb33f17b84
+Author: Niels Provos <provos at gmail.com>
+Date:   Sat Mar 8 14:21:14 2003 +0000
+
+    add persist test
+    
+    
+    svn:r47
+
+commit bedded8230ff24d96629f912ee8ab659e1bfa6b5
+Author: Niels Provos <provos at gmail.com>
+Date:   Sat Mar 8 06:39:30 2003 +0000
+
+    more comprehensive regression test
+    
+    
+    svn:r46
+
+commit cde7a3528d38baf89b1c1022191397904bec9ed0
+Author: Niels Provos <provos at gmail.com>
+Date:   Sat Mar 8 06:37:56 2003 +0000
+
+    fix signal usage
+    
+    
+    svn:r45
+
+commit ea1d95d2fb03801de52ab3a369bad87c8eb3b132
+Author: Niels Provos <provos at gmail.com>
+Date:   Sat Mar 8 05:24:26 2003 +0000
+
+    automake-ify test dir, too
+    
+    
+    svn:r44
+
+commit 71e513296d99948e350e68bd0885af73c0bc7c6a
+Author: Niels Provos <provos at gmail.com>
+Date:   Fri Mar 7 23:21:01 2003 +0000
+
+    check for linux eventpoll
+    
+    
+    svn:r43
+
+commit 3e41f17afacd87c3bf0a48adc395c3f7e4b7d8bf
+Author: Niels Provos <provos at gmail.com>
+Date:   Fri Mar 7 23:20:36 2003 +0000
+
+    support for Linux eventpoll mechanism
+    
+    
+    svn:r42
+
+commit 01a932fe1fd385fdb961efdbac991dd4b481fc49
+Author: Niels Provos <provos at gmail.com>
+Date:   Fri Mar 7 23:19:05 2003 +0000
+
+    fix signal usage
+    
+    
+    svn:r41
+
+commit e72dff13d9ecfee512aa03bfcbdba39ea84bde48
+Author: Niels Provos <provos at gmail.com>
+Date:   Sat Mar 1 20:31:28 2003 +0000
+
+    replace references to __FUNCTION__ with __func__
+    
+    
+    svn:r40
+
+commit 3c2916aa1318bfd9f5031ddd34f5fa3326d685da
+Author: Niels Provos <provos at gmail.com>
+Date:   Sat Mar 1 19:48:05 2003 +0000
+
+    ifdef config.h
+    
+    
+    svn:r39
+
+commit b5b585c1f9a13577e28549436bb7b95c0c427f6b
+Author: Niels Provos <provos at gmail.com>
+Date:   Sat Mar 1 19:46:27 2003 +0000
+
+    support disabling of event mechanisms via the environment; error out
+    if no event mechanism is available
+    
+    
+    svn:r38
+
+commit b3d1c6a854e10d00bd79403ccd2f1b6790512f81
+Author: Niels Provos <provos at gmail.com>
+Date:   Fri Feb 28 22:38:30 2003 +0000
+
+    support poll(2) and split out the signal handling
+    
+    
+    svn:r37
+
+commit ac44ddda99627b82012db5b0c097bb9aa9dd9703
+Author: Niels Provos <provos at gmail.com>
+Date:   Mon Oct 7 17:56:25 2002 +0000
+
+    grammar from jsyn at nthought.com
+    
+    
+    svn:r36
+
+commit 9d2401fffcc6694bb59a2ac42c338ff943cb073a
+Author: Niels Provos <provos at gmail.com>
+Date:   Mon Oct 7 00:47:34 2002 +0000
+
+    portability fixes from marius at umich.edu.
+    
+    
+    svn:r35
+
+commit acf7a8e321a482434f9e179528a554018a1e6ca9
+Author: Niels Provos <provos at gmail.com>
+Date:   Sun Sep 15 19:01:42 2002 +0000
+
+    version 0.6
+    
+    
+    svn:r34
+
+commit 2ccd77d4778f4b8a00ee18c121c392253523a8fe
+Author: Niels Provos <provos at gmail.com>
+Date:   Sun Sep 15 18:55:21 2002 +0000
+
+    test timeouts
+    
+    
+    svn:r33
+
+commit e0ca1ef203a00670c7863d0981c5c07fd96adee5
+Author: Niels Provos <provos at gmail.com>
+Date:   Sun Sep 15 18:52:28 2002 +0000
+
+    signal fixes from ericj at monkey.org via dugsong at monkey.org
+    
+    
+    svn:r32
+
+commit eb15f4d86639b37362e19564b536661661aba091
+Author: Niels Provos <provos at gmail.com>
+Date:   Sun Sep 8 02:46:44 2002 +0000
+
+    fix from marius at umich.edu
+    
+    
+    svn:r31
+
+commit f1cf632254f290b88120b49b12108a9d4b6e73ac
+Author: Niels Provos <provos at gmail.com>
+Date:   Fri Sep 6 17:13:08 2002 +0000
+
+    add timeout_ defines back for backward compatibility.
+    
+    
+    svn:r30
+
+commit 5f8658582ec1ee084e1f1a9da6c9d0a0f40ac9b5
+Author: Niels Provos <provos at gmail.com>
+Date:   Fri Jul 26 14:45:50 2002 +0000
+
+    sync with openbsd;  API change: timeout_ is now evtimer_
+    
+    
+    svn:r29
+
+commit 8bb9fd5842dea6af0893e68db0c093103a3db391
+Author: Niels Provos <provos at gmail.com>
+Date:   Thu Jun 13 01:58:34 2002 +0000
+
+    version 0.5
+    
+    
+    svn:r28
+
+commit 3821c7e2015e95f7b6479fe94c15940186db9017
+Author: Niels Provos <provos at gmail.com>
+Date:   Thu Jun 13 01:54:07 2002 +0000
+
+    make kqueue signal callback work with sigchld.  cast and better timeout.
+    
+    
+    svn:r27
+
+commit 484e594e5cee77a4fc7b5c3c70809a8ae5aa9784
+Author: Niels Provos <provos at gmail.com>
+Date:   Tue Jun 11 18:38:37 2002 +0000
+
+    make kqueue work for callbacks that use both read and write events
+    simultaneously
+    
+    
+    svn:r26
+
+commit 3107493c971bc11e09649a448282331f697dfb78
+Author: Niels Provos <provos at gmail.com>
+Date:   Mon May 20 21:51:53 2002 +0000
+
+    signal fix from dugsong at monkey.org
+    
+    
+    svn:r25
+
+commit cc32570a080e176def54ab37bcb74df4c803babc
+Author: Niels Provos <provos at gmail.com>
+Date:   Mon May 20 21:47:04 2002 +0000
+
+    updating a timeout might corrupt RB tree.  Remove before changing time.
+    
+    
+    svn:r24
+
+commit 4ec4cddecee9100da65c4f7874fbb36ae5ec31ba
+Author: Niels Provos <provos at gmail.com>
+Date:   Wed Apr 17 02:07:31 2002 +0000
+
+    forgot to initialize elements
+    
+    
+    svn:r23
+
+commit dcf6cbe45d2652df57b173be65e6d712f6bcdc25
+Author: Niels Provos <provos at gmail.com>
+Date:   Tue Apr 16 14:09:21 2002 +0000
+
+    correct date
+    
+    
+    svn:r22
+
+commit 409fcdd2fa94d25719af65e8a1c5f78c8a22f717
+Author: Niels Provos <provos at gmail.com>
+Date:   Wed Apr 10 14:48:31 2002 +0000
+
+    remove queue.h include
+    
+    
+    svn:r21
+
+commit 59137c119f9deaca9244811040aa3fee2f7b293c
+Author: Niels Provos <provos at gmail.com>
+Date:   Wed Apr 10 03:15:19 2002 +0000
+
+    deal correctly with deleting an event, now that we allow multiple callbacks
+    for signal delivery.
+    
+    
+    svn:r20
+
+commit 06630e311655f1fde0f9d7fb42a197340caaa133
+Author: Niels Provos <provos at gmail.com>
+Date:   Wed Apr 10 02:20:26 2002 +0000
+
+    describe signal_*
+    
+    
+    svn:r19
+
+commit d10f85dbce67c2835eb09c712da691a46d319aac
+Author: Niels Provos <provos at gmail.com>
+Date:   Wed Apr 10 02:10:47 2002 +0000
+
+    signal support for kqueue; support of EV_PERSIST flag to event_set
+    
+    
+    svn:r18
+
+commit b855bc55000e64d0adb12822fcf8b8117e8f3309
+Author: Niels Provos <provos at gmail.com>
+Date:   Wed Apr 10 00:31:31 2002 +0000
+
+    initial support for signals (only for select now) based on code from
+    Dug Song <dugsong at monkey.org>
+    
+    
+    svn:r17
+
+commit dbaa408ea5bbbdeeb60bd2bd69b6c7ec93fa0177
+Author: Niels Provos <provos at gmail.com>
+Date:   Tue Apr 9 19:30:22 2002 +0000
+
+    port to solaris
+    
+    
+    svn:r16
+
+commit db48ac015458237170e27952cc62cdb99cc7a336
+Author: Niels Provos <provos at gmail.com>
+Date:   Tue Apr 9 19:21:39 2002 +0000
+
+    change includes
+    
+    
+    svn:r15
+
+commit 361c1cc0b7f9d78bc86bb3af699a8127c079061d
+Author: Niels Provos <provos at gmail.com>
+Date:   Tue Apr 9 19:09:32 2002 +0000
+
+    add compat dir to includes
+    
+    
+    svn:r14
+
+commit 409c7ff72d121a6b8673ea6ebe053413038628d4
+Author: Niels Provos <provos at gmail.com>
+Date:   Tue Apr 9 19:06:18 2002 +0000
+
+    another one
+    
+    
+    svn:r13
+
+commit abef3b7e64539f82ceac9bbe145aa3ffef2a3db8
+Author: Niels Provos <provos at gmail.com>
+Date:   Tue Apr 9 19:03:24 2002 +0000
+
+    one more file required by automake
+    
+    
+    svn:r12
+
+commit 4cbc77da52f7fbf34cff95e3c52edd7515df9c69
+Author: Niels Provos <provos at gmail.com>
+Date:   Tue Apr 9 17:52:23 2002 +0000
+
+    missing files
+    
+    
+    svn:r11
+
+commit 5b27aa0323a4c51442ce040dcfe5844d0b39ad92
+Author: Niels Provos <provos at gmail.com>
+Date:   Tue Apr 9 17:42:15 2002 +0000
+
+    further automake conversion
+    
+    
+    svn:r10
+
+commit 6c6c936bcbfb3e83599e5fef96e59dc5c6326094
+Author: Niels Provos <provos at gmail.com>
+Date:   Tue Apr 9 17:02:38 2002 +0000
+
+    change to automake
+    
+    
+    svn:r9
+
+commit 61cb68467cff31416295b3e548a3061a3a42e45c
+Author: Niels Provos <provos at gmail.com>
+Date:   Tue Apr 9 16:35:06 2002 +0000
+
+    move stuff
+    
+    
+    svn:r8
+
+commit e99653d0286249761e688782cdbba46209f10930
+Author: Niels Provos <provos at gmail.com>
+Date:   Tue Apr 9 15:29:12 2002 +0000
+
+    type
+    
+    
+    svn:r7
+
+commit aa6567fe6475d3230c7c745a7ca208735af0c331
+Author: Niels Provos <provos at gmail.com>
+Date:   Tue Apr 9 15:14:06 2002 +0000
+
+    Initial revision
+    
+    
+    svn:r2

==== sntp/libevent/CommitLog ====
2011-04-14 19:54:05+00:00, davehart at shiny.ad.hartbrothers.com +0 -0

==== sntp/libevent/Makefile.am ====
2011-04-14 19:55:03+00:00, davehart at shiny.ad.hartbrothers.com +27 -24
  libevent 2.1 (prerelease git head bfdda26534ea66b847760720260a4b4d8fcefe58)

--- 1.1/sntp/libevent/Makefile.am	2011-01-20 03:02:52 -05:00
+++ 1.1.1.1/sntp/libevent/Makefile.am	2011-04-14 15:55:03 -04:00
@@ -12,7 +12,7 @@ ACLOCAL_AMFLAGS = -I m4
 # will increment for each series until we revise our interfaces enough
 # that we can seriously expect ABI compatibility between series.
 #
-RELEASE = -release 2.0
+RELEASE = -release 2.1
 
 # This is the version info for the libevent binary API.  It has three
 # numbers:
@@ -32,22 +32,9 @@ RELEASE = -release 2.0
 #
 # Once an RC is out, DO NOT MAKE ANY ABI-BREAKING CHANGES IN THAT SERIES
 # UNLESS YOU REALLY REALLY HAVE TO.
-VERSION_INFO = 5:1:0
+VERSION_INFO = 1:0:0
 
 # History:          RELEASE    VERSION_INFO
-#  2.0.1-alpha --     2.0        1:0:0
-#  2.0.2-alpha --                2:0:0
-#  2.0.3-alpha --                2:0:0  (should have incremented; didn't.)
-#  2.0.4-alpha --                3:0:0
-#  2.0.5-beta  --                4:0:0
-#  2.0.6-rc    --     2.0        2:0:0
-#  2.0.7-rc    --     2.0        3:0:1
-#  2.0.8-rc    --     2.0        4:0:2
-#  2.0.9-rc    --     2.0        5:0:0 (ABI changed slightly)
-# Planned:
-#  2.0.10-stable--    2.0        5:1:0 (No ABI change)
-#
-# For Libevent 2.1:
 #  2.1.1-alpha --     2.1        1:0:0
 
 
@@ -72,7 +59,7 @@ VERSION_INFO = 5:1:0
 dist_bin_SCRIPTS = event_rpcgen.py
 
 pkgconfigdir=$(libdir)/pkgconfig
-pkgconfig_DATA=libevent.pc
+LIBEVENT_PKGCONFIG=libevent.pc
 
 # These sources are conditionally added by configure.in or conditionally
 # included from other files.
@@ -89,14 +76,21 @@ EXTRA_DIST = \
 	Makefile.nmake test/Makefile.nmake \
 	$(PLATFORM_DEPENDENT_SRC)
 
-lib_LTLIBRARIES = libevent.la libevent_core.la libevent_extra.la
+LIBEVENT_LIBS_LA = libevent.la libevent_core.la libevent_extra.la
 if PTHREADS
-lib_LTLIBRARIES += libevent_pthreads.la
-pkgconfig_DATA += libevent_pthreads.pc
+LIBEVENT_LIBS_LA += libevent_pthreads.la
+LIBEVENT_PKGCONFIG += libevent_pthreads.pc
 endif
 if OPENSSL
-lib_LTLIBRARIES += libevent_openssl.la
-pkgconfig_DATA += libevent_openssl.pc
+LIBEVENT_LIBS_LA += libevent_openssl.la
+LIBEVENT_PKGCONFIG += libevent_openssl.pc
+endif
+
+if INSTALL_LIBEVENT
+lib_LTLIBRARIES = $(LIBEVENT_LIBS_LA)
+pkgconfig_DATA = $(LIBEVENT_PKGCONFIG)
+else
+noinst_LTLIBRARIES =  $(LIBEVENT_LIBS_LA)
 endif
 
 SUBDIRS = . include sample test
@@ -141,7 +135,7 @@ endif
 BUILT_SOURCES = ./include/event2/event-config.h
 
 ./include/event2/event-config.h: config.h
-	@MKDIR_P@ ./include/event2
+	$(MKDIR_P) ./include/event2 || true
 	echo '/* event2/event-config.h' > $@
 	echo ' *' >> $@
 	echo ' * This file was generated by autoconf when libevent was built, and post-' >> $@
@@ -156,6 +150,7 @@ BUILT_SOURCES = ./include/event2/event-c
 
 	sed -e 's/#define /#define _EVENT_/' \
 	    -e 's/#undef /#undef _EVENT_/' \
+	    -e 's/# define /# define _EVENT_/' \
 	    -e 's/#ifndef /#ifndef _EVENT_/' < config.h >> $@
 	echo "#endif" >> $@
 
@@ -205,13 +200,21 @@ noinst_HEADERS = util-internal.h mm-inte
 	minheap-internal.h log-internal.h evsignal-internal.h evmap-internal.h \
 	changelist-internal.h iocp-internal.h \
 	ratelim-internal.h \
+	evconfig-private.h \
 	WIN32-Code/event2/event-config.h \
+	WIN32-Code/evconfig-private.h \
 	WIN32-Code/tree.h \
 	compat/sys/queue.h
 
-include_HEADERS = event.h evhttp.h evdns.h evrpc.h evutil.h
+EVENT1_HDRS = event.h evhttp.h evdns.h evrpc.h evutil.h
+
+if INSTALL_LIBEVENT
+include_HEADERS = $(EVENT1_HDRS)
+else
+noinst_HEADERS += $(EVENT1_HDRS)
+endif
 
-INCLUDES = -I$(srcdir)/compat -I$(srcdir)/include -I./include $(SYS_INCLUDES)
+AM_CPPFLAGS = -I$(srcdir)/compat -I$(srcdir)/include -I./include $(SYS_INCLUDES)
 
 verify: check
 

==== sntp/libevent/WIN32-Code/evconfig-private.h ====
2011-04-14 19:55:06+00:00, davehart at shiny.ad.hartbrothers.com +6 -0
  libevent 2.1 (prerelease git head bfdda26534ea66b847760720260a4b4d8fcefe58)

--- /dev/null	2011-04-15 01:34:14 -04:00
+++ 1.1/sntp/libevent/WIN32-Code/evconfig-private.h	2011-04-14 15:55:06 -04:00
@@ -0,0 +1,6 @@
+#if !defined(_EVENT_EVCONFIG__PRIVATE_H) && !defined(__MINGW32__)
+#define _EVENT_EVCONFIG__PRIVATE_H
+
+/* Nothing to see here.  Move along. */
+
+#endif

==== sntp/libevent/WIN32-Code/evconfig-private.h ====
2011-04-14 19:55:06+00:00, davehart at shiny.ad.hartbrothers.com +0 -0

==== sntp/libevent/WIN32-Code/event2/event-config.h ====
2011-04-14 19:55:06+00:00, davehart at shiny.ad.hartbrothers.com +2 -2
  libevent 2.1 (prerelease git head bfdda26534ea66b847760720260a4b4d8fcefe58)

--- 1.1/sntp/libevent/WIN32-Code/event2/event-config.h	2011-01-20 03:02:54 -05:00
+++ 1.1.1.1/sntp/libevent/WIN32-Code/event2/event-config.h	2011-04-14 15:55:06 -04:00
@@ -274,7 +274,7 @@
 /* #undef _EVENT_HAVE_WORKING_KQUEUE */
 
 /* Numeric representation of the version */
-#define _EVENT_NUMERIC_VERSION 0x02000a00
+#define _EVENT_NUMERIC_VERSION 0x02010001
 
 /* Name of package */
 #define _EVENT_PACKAGE "libevent"
@@ -331,7 +331,7 @@
 #define _EVENT_TIME_WITH_SYS_TIME 1
 
 /* Version number of package */
-#define _EVENT_VERSION "2.0.10-stable"
+#define _EVENT_VERSION "2.1.0-alpha-dev"
 
 /* Define to appropriate substitue if compiler doesnt have __func__ */
 #define _EVENT___func__ __FUNCTION__

==== sntp/libevent/arc4random.c ====
2011-04-14 19:55:03+00:00, davehart at shiny.ad.hartbrothers.com +6 -1
  libevent 2.1 (prerelease git head bfdda26534ea66b847760720260a4b4d8fcefe58)

--- 1.1/sntp/libevent/arc4random.c	2011-01-20 03:02:52 -05:00
+++ 1.1.1.1/sntp/libevent/arc4random.c	2011-04-14 15:55:03 -04:00
@@ -49,6 +49,7 @@
 #endif
 
 #ifndef ARC4RANDOM_NO_INCLUDES
+#include "evconfig-private.h"
 #ifdef WIN32
 #include <wincrypt.h>
 #include <process.h>
@@ -352,7 +353,7 @@ arc4_seed(void)
 	return ok ? 0 : -1;
 }
 
-static void
+static int
 arc4_stir(void)
 {
 	int     i;
@@ -363,6 +364,8 @@ arc4_stir(void)
 	}
 
 	arc4_seed();
+	if (!arc4_seeded_ok)
+		return -1;
 
 	/*
 	 * Discard early keystream, as per recommendations in
@@ -385,6 +388,8 @@ arc4_stir(void)
 	for (i = 0; i < 12*256; i++)
 		(void)arc4_getbyte();
 	arc4_count = BYTES_BEFORE_RESEED;
+
+	return 0;
 }
 
 

==== sntp/libevent/buffer.c ====
2011-04-14 19:55:04+00:00, davehart at shiny.ad.hartbrothers.com +283 -266
  libevent 2.1 (prerelease git head bfdda26534ea66b847760720260a4b4d8fcefe58)

--- 1.1/sntp/libevent/buffer.c	2011-01-20 03:02:52 -05:00
+++ 1.2/sntp/libevent/buffer.c	2011-04-14 15:55:04 -04:00
@@ -26,6 +26,7 @@
  */
 
 #include "event2/event-config.h"
+#include "evconfig-private.h"
 
 #ifdef WIN32
 #include <winsock2.h>
@@ -34,8 +35,9 @@
 #endif
 
 #ifdef _EVENT_HAVE_VASPRINTF
-/* If we have vasprintf, we need to define this before we include stdio.h. */
-#define _GNU_SOURCE
+/* If we have vasprintf, we need to define _GNU_SOURCE before we include 
+ * stdio.h.  This comes from evconfig-private.h.
+ */
 #endif
 
 #include <sys/types.h>
@@ -63,6 +65,10 @@
 #ifdef _EVENT_HAVE_SYS_SENDFILE_H
 #include <sys/sendfile.h>
 #endif
+#ifdef _EVENT_HAVE_SYS_STAT_H
+#include <sys/stat.h>
+#endif
+
 
 #include <errno.h>
 #include <stdio.h>
@@ -83,7 +89,6 @@
 #include "event2/bufferevent_compat.h"
 #include "event2/bufferevent_struct.h"
 #include "event2/thread.h"
-#include "event2/event-config.h"
 #include "log-internal.h"
 #include "mm-internal.h"
 #include "util-internal.h"
@@ -111,14 +116,6 @@
 #define SENDFILE_IS_SOLARIS	1
 #endif
 
-#ifdef USE_SENDFILE
-static int use_sendfile = 1;
-#endif
-#ifdef _EVENT_HAVE_MMAP
-static int use_mmap = 1;
-#endif
-
-
 /* Mask of user-selectable callback flags. */
 #define EVBUFFER_CB_USER_FLAGS	    0xffff
 /* Mask of all internal-use-only flags. */
@@ -144,13 +141,6 @@ static int evbuffer_ptr_memcmp(const str
 static struct evbuffer_chain *evbuffer_expand_singlechain(struct evbuffer *buf,
     size_t datlen);
 
-#ifdef WIN32
-static int evbuffer_readfile(struct evbuffer *buf, evutil_socket_t fd,
-    ev_ssize_t howmuch);
-#else
-#define evbuffer_readfile evbuffer_read
-#endif
-
 static struct evbuffer_chain *
 evbuffer_chain_new(size_t size)
 {
@@ -187,40 +177,29 @@ evbuffer_chain_free(struct evbuffer_chai
 		chain->flags |= EVBUFFER_DANGLING;
 		return;
 	}
-	if (chain->flags & (EVBUFFER_MMAP|EVBUFFER_SENDFILE|
-		EVBUFFER_REFERENCE)) {
-		if (chain->flags & EVBUFFER_REFERENCE) {
-			struct evbuffer_chain_reference *info =
-			    EVBUFFER_CHAIN_EXTRA(
-				    struct evbuffer_chain_reference,
-				    chain);
-			if (info->cleanupfn)
-				(*info->cleanupfn)(chain->buffer,
-				    chain->buffer_len,
-				    info->extra);
-		}
-#ifdef _EVENT_HAVE_MMAP
-		if (chain->flags & EVBUFFER_MMAP) {
-			struct evbuffer_chain_fd *info =
-			    EVBUFFER_CHAIN_EXTRA(struct evbuffer_chain_fd,
-				chain);
-			if (munmap(chain->buffer, chain->buffer_len) == -1)
-				event_warn("%s: munmap failed", __func__);
-			if (close(info->fd) == -1)
-				event_warn("%s: close(%d) failed",
-				    __func__, info->fd);
-		}
+
+	if (chain->flags & EVBUFFER_REFERENCE) {
+		struct evbuffer_chain_reference *info =
+		    EVBUFFER_CHAIN_EXTRA(
+			    struct evbuffer_chain_reference,
+			    chain);
+		if (info->cleanupfn)
+			(*info->cleanupfn)(chain->buffer,
+			    chain->buffer_len,
+			    info->extra);
+	}
+	if (chain->flags & EVBUFFER_FILESEGMENT) {
+		struct evbuffer_chain_file_segment *info =
+		    EVBUFFER_CHAIN_EXTRA(
+			    struct evbuffer_chain_file_segment,
+			    chain);
+		if (info->segment) {
+#ifdef WIN32
+			if (info->segment->type == EVBUF_FS_MMAP)
+				UnmapViewOfFile(chain->buffer);
 #endif
-#ifdef USE_SENDFILE
-		if (chain->flags & EVBUFFER_SENDFILE) {
-			struct evbuffer_chain_fd *info =
-			    EVBUFFER_CHAIN_EXTRA(struct evbuffer_chain_fd,
-				chain);
-			if (close(info->fd) == -1)
-				event_warn("%s: close(%d) failed",
-				    __func__, info->fd);
+			evbuffer_file_segment_free(info->segment);
 		}
-#endif
 	}
 
 	mm_free(chain);
@@ -2124,56 +2103,6 @@ done:
 	return result;
 }
 
-#ifdef WIN32
-static int
-evbuffer_readfile(struct evbuffer *buf, evutil_socket_t fd, ev_ssize_t howmuch)
-{
-	int result;
-	int nchains, n;
-	struct evbuffer_iovec v[2];
-
-	EVBUFFER_LOCK(buf);
-
-	if (buf->freeze_end) {
-		result = -1;
-		goto done;
-	}
-
-	if (howmuch < 0)
-		howmuch = 16384;
-
-
-	/* XXX we _will_ waste some space here if there is any space left
-	 * over on buf->last. */
-	nchains = evbuffer_reserve_space(buf, howmuch, v, 2);
-	if (nchains < 1 || nchains > 2) {
-		result = -1;
-		goto done;
-	}
-	n = read((int)fd, v[0].iov_base, (unsigned int)v[0].iov_len);
-	if (n <= 0) {
-		result = n;
-		goto done;
-	}
-	v[0].iov_len = (IOV_LEN_TYPE) n; /* XXXX another problem with big n.*/
-	if (nchains > 1) {
-		n = read((int)fd, v[1].iov_base, (unsigned int)v[1].iov_len);
-		if (n <= 0) {
-			result = (unsigned long) v[0].iov_len;
-			evbuffer_commit_space(buf, v, 1);
-			goto done;
-		}
-		v[1].iov_len = n;
-	}
-	evbuffer_commit_space(buf, v, nchains);
-
-	result = n;
-done:
-	EVBUFFER_UNLOCK(buf);
-	return result;
-}
-#endif
-
 #ifdef USE_IOVEC_IMPL
 static inline int
 evbuffer_write_iovec(struct evbuffer *buffer, evutil_socket_t fd,
@@ -2225,44 +2154,46 @@ evbuffer_write_iovec(struct evbuffer *bu
 
 #ifdef USE_SENDFILE
 static inline int
-evbuffer_write_sendfile(struct evbuffer *buffer, evutil_socket_t fd,
+evbuffer_write_sendfile(struct evbuffer *buffer, evutil_socket_t dest_fd,
     ev_ssize_t howmuch)
 {
 	struct evbuffer_chain *chain = buffer->first;
-	struct evbuffer_chain_fd *info =
-	    EVBUFFER_CHAIN_EXTRA(struct evbuffer_chain_fd, chain);
+	struct evbuffer_chain_file_segment *info =
+	    EVBUFFER_CHAIN_EXTRA(struct evbuffer_chain_file_segment,
+		chain);
+	const int source_fd = info->segment->fd;
 #if defined(SENDFILE_IS_MACOSX) || defined(SENDFILE_IS_FREEBSD)
 	int res;
-	off_t len = chain->off;
+	ev_off_t len = chain->off;
 #elif defined(SENDFILE_IS_LINUX) || defined(SENDFILE_IS_SOLARIS)
 	ev_ssize_t res;
-	off_t offset = chain->misalign;
+	ev_off_t offset = chain->misalign;
 #endif
 
 	ASSERT_EVBUFFER_LOCKED(buffer);
 
 #if defined(SENDFILE_IS_MACOSX)
-	res = sendfile(info->fd, fd, chain->misalign, &len, NULL, 0);
+	res = sendfile(source_fd, dest_fd, chain->misalign, &len, NULL, 0);
 	if (res == -1 && !EVUTIL_ERR_RW_RETRIABLE(errno))
 		return (-1);
 
 	return (len);
 #elif defined(SENDFILE_IS_FREEBSD)
-	res = sendfile(info->fd, fd, chain->misalign, chain->off, NULL, &len, 0);
+	res = sendfile(source_fd, dest_fd, chain->misalign, chain->off, NULL, &len, 0);
 	if (res == -1 && !EVUTIL_ERR_RW_RETRIABLE(errno))
 		return (-1);
 
 	return (len);
 #elif defined(SENDFILE_IS_LINUX)
 	/* TODO(niels): implement splice */
-	res = sendfile(fd, info->fd, &offset, chain->off);
+	res = sendfile(dest_fd, source_fd, &offset, chain->off);
 	if (res == -1 && EVUTIL_ERR_RW_RETRIABLE(errno)) {
 		/* if this is EAGAIN or EINTR return 0; otherwise, -1 */
 		return (0);
 	}
 	return (res);
 #elif defined(SENDFILE_IS_SOLARIS)
-	res = sendfile(fd, info->fd, &offset, chain->off);
+	res = sendfile(dest_fd, source_fd, &offset, chain->off);
 	if (res == -1 && EVUTIL_ERR_RW_RETRIABLE(errno)) {
 		/* if this is EAGAIN or EINTR return 0; otherwise, -1 */
 		return (0);
@@ -2654,153 +2585,286 @@ done:
 	return result;
 }
 
-/* TODO(niels): maybe we don't want to own the fd, however, in that
- * case, we should dup it - dup is cheap.  Perhaps, we should use a
- * callback instead?
- */
 /* TODO(niels): we may want to add to automagically convert to mmap, in
  * case evbuffer_remove() or evbuffer_pullup() are being used.
  */
-int
-evbuffer_add_file(struct evbuffer *outbuf, int fd,
-    ev_off_t offset, ev_off_t length)
-{
-#if defined(USE_SENDFILE) || defined(_EVENT_HAVE_MMAP)
-	struct evbuffer_chain *chain;
-	struct evbuffer_chain_fd *info;
+struct evbuffer_file_segment *
+evbuffer_file_segment_new(
+	int fd, ev_off_t offset, ev_off_t length, unsigned flags)
+{
+	struct evbuffer_file_segment *seg =
+	    mm_calloc(sizeof(struct evbuffer_file_segment), 1);
+	if (!seg)
+		return NULL;
+	seg->refcnt = 1;
+	seg->fd = fd;
+	seg->flags = flags;
+
+#ifdef WIN32
+#define lseek _lseeki64
+#define fstat _fstat
+#define stat _stat
 #endif
-	int ok = 1;
+	if (length == -1) {
+		struct stat st;
+		if (fstat(fd, &st) < 0)
+			goto err;
+		length = st.st_size;
+	}
+	seg->length = length;
 
 #if defined(USE_SENDFILE)
-	if (use_sendfile) {
-		chain = evbuffer_chain_new(sizeof(struct evbuffer_chain_fd));
-		if (chain == NULL) {
-			event_warn("%s: out of memory", __func__);
-			return (-1);
-		}
-
-		chain->flags |= EVBUFFER_SENDFILE | EVBUFFER_IMMUTABLE;
-		chain->buffer = NULL;	/* no reading possible */
-		chain->buffer_len = length + offset;
-		chain->off = length;
-		chain->misalign = offset;
-
-		info = EVBUFFER_CHAIN_EXTRA(struct evbuffer_chain_fd, chain);
-		info->fd = fd;
-
-		EVBUFFER_LOCK(outbuf);
-		if (outbuf->freeze_end) {
-			mm_free(chain);
-			ok = 0;
-		} else {
-			outbuf->n_add_for_cb += length;
-			evbuffer_chain_insert(outbuf, chain);
-		}
-	} else
+	if (!(flags & EVBUF_FS_DISABLE_SENDFILE)) {
+		seg->offset = offset;
+		seg->type = EVBUF_FS_SENDFILE;
+		goto done;
+	}
 #endif
 #if defined(_EVENT_HAVE_MMAP)
-	if (use_mmap) {
-		void *mapped = mmap(NULL, length + offset, PROT_READ,
+	if (!(flags & EVBUF_FS_DISABLE_MMAP)) {
+		off_t offset_rounded = 0, offset_leftover = 0;
+		void *mapped;
+		if (offset) {
+			/* mmap implementations don't generally like us
+			 * to have an offset that isn't a round  */
+#ifdef SC_PAGE_SIZE
+			long page_size = sysconf(SC_PAGE_SIZE);
+#elif defined(_SC_PAGE_SIZE)
+			long page_size = sysconf(_SC_PAGE_SIZE);
+#else
+			long page_size = 1;
+#endif
+			if (page_size == -1)
+				goto err;
+			offset_leftover = offset % page_size;
+			offset_rounded = offset - offset_leftover;
+		}
+		mapped = mmap(NULL, length + offset_leftover,
+		    PROT_READ,
 #ifdef MAP_NOCACHE
-		    MAP_NOCACHE |
+		    MAP_NOCACHE | /* ??? */
 #endif
 #ifdef MAP_FILE
 		    MAP_FILE |
 #endif
 		    MAP_PRIVATE,
-		    fd, 0);
-		/* some mmap implementations require offset to be a multiple of
-		 * the page size.  most users of this api, are likely to use 0
-		 * so mapping everything is not likely to be a problem.
-		 * TODO(niels): determine page size and round offset to that
-		 * page size to avoid mapping too much memory.
-		 */
+		    fd, offset_rounded);
 		if (mapped == MAP_FAILED) {
 			event_warn("%s: mmap(%d, %d, %zu) failed",
 			    __func__, fd, 0, (size_t)(offset + length));
-			return (-1);
+		} else {
+			seg->mapping = mapped;
+			seg->contents = (char*)mapped+offset_leftover;
+			seg->offset = 0;
+			seg->type = EVBUF_FS_MMAP;
+			goto done;
 		}
-		chain = evbuffer_chain_new(sizeof(struct evbuffer_chain_fd));
-		if (chain == NULL) {
-			event_warn("%s: out of memory", __func__);
-			munmap(mapped, length);
-			return (-1);
+	}
+#endif
+#ifdef WIN32
+	if (!(flags & EVBUF_FS_DISABLE_MMAP)) {
+		long h = (long)_get_osfhandle(fd);
+		HANDLE m;
+		ev_uint64_t total_size = length+offset;
+		if (h == (long)INVALID_HANDLE_VALUE)
+			return NULL;
+		m = CreateFileMapping((HANDLE)h, NULL, PAGE_READONLY,
+		    (total_size >> 32), total_size & 0xfffffffful,
+		    NULL);
+		if (m != INVALID_HANDLE_VALUE) { /* Does h leak? */
+			seg->mapping_handle = m;
+			seg->offset = offset;
+			seg->type = EVBUF_FS_MMAP;
+			goto done;
 		}
+	}
+#endif
 
-		chain->flags |= EVBUFFER_MMAP | EVBUFFER_IMMUTABLE;
-		chain->buffer = mapped;
-		chain->buffer_len = length + offset;
-		chain->off = length + offset;
-
-		info = EVBUFFER_CHAIN_EXTRA(struct evbuffer_chain_fd, chain);
-		info->fd = fd;
-
-		EVBUFFER_LOCK(outbuf);
-		if (outbuf->freeze_end) {
-			info->fd = -1;
-			evbuffer_chain_free(chain);
-			ok = 0;
-		} else {
-			outbuf->n_add_for_cb += length;
-
-			evbuffer_chain_insert(outbuf, chain);
+	{
+		ev_off_t start_pos = lseek(fd, 0, SEEK_CUR), pos;
+		ev_off_t read_so_far = 0;
+		char *mem;
+		int e;
+		ev_ssize_t n = 0;
+		if (!(mem = mm_malloc(length)))
+			goto err;
+		if (start_pos < 0) {
+			mm_free(mem);
+			goto err;
+		}
+		if (lseek(fd, offset, SEEK_SET) < 0) {
+			mm_free(mem);
+			goto err;
+		}
+		while (read_so_far < length) {
+			n = read(fd, mem+read_so_far, length-read_so_far);
+			if (n <= 0)
+				break;
+			read_so_far += n;
+		}
 
-			/* we need to subtract whatever we don't need */
-			evbuffer_drain(outbuf, offset);
+		e = errno;
+		pos = lseek(fd, start_pos, SEEK_SET);
+		if (n < 0 || (n == 0 && length > read_so_far)) {
+			mm_free(mem);
+			errno = e;
+			goto err;
+		} else if (pos < 0) {
+			mm_free(mem);
+			goto err;
 		}
-	} else
-#endif
-	{
-		/* the default implementation */
-		struct evbuffer *tmp = evbuffer_new();
-		ev_ssize_t read;
 
-		if (tmp == NULL)
-			return (-1);
+		seg->contents = mem;
+		seg->type = EVBUF_FS_IO;
+	}
+
+done:
+	if (!(flags & EVBUF_FS_DISABLE_LOCKING)) {
+		EVTHREAD_ALLOC_LOCK(seg->lock, 0);
+	}
+	return seg;
+err:
+	mm_free(seg);
+	return NULL;
+}
+
+void
+evbuffer_file_segment_free(struct evbuffer_file_segment *seg)
+{
+	int refcnt;
+	EVLOCK_LOCK(seg->lock, 0);
+	refcnt = --seg->refcnt;
+	EVLOCK_UNLOCK(seg->lock, 0);
+	if (refcnt > 0)
+		return;
+	EVUTIL_ASSERT(refcnt == 0);
 
+	if (seg->type == EVBUF_FS_SENDFILE) {
+		;
+	} else if (seg->type == EVBUF_FS_MMAP) {
 #ifdef WIN32
-#define lseek _lseeki64
+		CloseHandle(seg->mapping_handle);
+#elif defined (_EVENT_HAVE_MMAP)
+		if (munmap(seg->mapping, seg->length) == -1)
+			event_warn("%s: munmap failed", __func__);
 #endif
-		if (lseek(fd, offset, SEEK_SET) == -1) {
-			evbuffer_free(tmp);
-			return (-1);
-		}
+	} else {
+		EVUTIL_ASSERT(seg->type == EVBUF_FS_IO);
+		mm_free(seg->contents);
+	}
 
-		/* we add everything to a temporary buffer, so that we
-		 * can abort without side effects if the read fails.
-		 */
-		while (length) {
-			read = evbuffer_readfile(tmp, fd, (ev_ssize_t)length);
-			if (read == -1) {
-				evbuffer_free(tmp);
-				return (-1);
-			}
+	if ((seg->flags & EVBUF_FS_CLOSE_ON_FREE) && seg->fd >= 0) {
+		close(seg->fd);
+	}
 
-			length -= read;
-		}
+	EVTHREAD_FREE_LOCK(seg->lock, 0);
+	mm_free(seg);
+}
 
-		EVBUFFER_LOCK(outbuf);
-		if (outbuf->freeze_end) {
-			evbuffer_free(tmp);
-			ok = 0;
-		} else {
-			evbuffer_add_buffer(outbuf, tmp);
-			evbuffer_free(tmp);
+int
+evbuffer_add_file_segment(struct evbuffer *buf,
+    struct evbuffer_file_segment *seg, ev_off_t offset, ev_off_t length)
+{
+	struct evbuffer_chain *chain;
+	struct evbuffer_chain_file_segment *extra;
+
+	EVLOCK_LOCK(seg->lock, 0);
+	++seg->refcnt;
+	EVLOCK_UNLOCK(seg->lock, 0);
+
+	EVBUFFER_LOCK(buf);
+
+	if (buf->freeze_end)
+		goto err;
+
+	if (length < 0) {
+		if (offset > seg->length)
+			goto err;
+		length = seg->length - offset;
+	}
+
+	/* Can we actually add this? */
+	if (offset+length > seg->length)
+		goto err;
 
+	chain = evbuffer_chain_new(sizeof(struct evbuffer_chain_file_segment));
+	if (!chain)
+		goto err;
+	extra = EVBUFFER_CHAIN_EXTRA(struct evbuffer_chain_file_segment, chain);
+
+	chain->flags |= EVBUFFER_IMMUTABLE|EVBUFFER_FILESEGMENT;
+	if (seg->type == EVBUF_FS_SENDFILE) {
+		chain->flags |= EVBUFFER_SENDFILE;
+		chain->misalign = seg->offset + offset;
+		chain->off = length;
+		chain->buffer_len = chain->misalign + length;
+	} else if (seg->type == EVBUF_FS_MMAP) {
 #ifdef WIN32
-#define close _close
-#endif
-			close(fd);
+		ev_uint64_t total_offset = seg->offset+offset;
+		ev_uint64_t offset_rounded=0, offset_remaining=0;
+		LPVOID data;
+		if (total_offset) {
+			SYSTEM_INFO si;
+			memset(&si, 0, sizeof(si)); /* cargo cult */
+			GetSystemInfo(&si);
+			offset_remaining = total_offset % si.dwAllocationGranularity;
+			offset_rounded = total_offset - offset_remaining;
+		}
+		data = MapViewOfFile(
+			seg->mapping_handle,
+			FILE_MAP_READ,
+			offset_rounded >> 32,
+			offset_rounded & 0xfffffffful,
+			length);
+		if (data == NULL) {
+			mm_free(chain);
+			goto err;
 		}
+		chain->buffer = (unsigned char*) data;
+		chain->buffer_len = length+offset_remaining;
+		chain->misalign = offset_remaining;
+		chain->off = length;
+#else
+		chain->buffer = (unsigned char*)(seg->contents + offset);
+		chain->buffer_len = length;
+		chain->off = length;
+#endif
+	} else {
+		EVUTIL_ASSERT(seg->type == EVBUF_FS_IO);
+		chain->buffer = (unsigned char*)(seg->contents + offset);
+		chain->buffer_len = length;
+		chain->off = length;
 	}
 
-	if (ok)
-		evbuffer_invoke_callbacks(outbuf);
-	EVBUFFER_UNLOCK(outbuf);
+	extra->segment = seg;
+	buf->n_add_for_cb += length;
+	evbuffer_chain_insert(buf, chain);
+
+	evbuffer_invoke_callbacks(buf);
+
+	EVBUFFER_UNLOCK(buf);
 
-	return ok ? 0 : -1;
+	return 0;
+err:
+	EVBUFFER_UNLOCK(buf);
+	evbuffer_file_segment_free(seg);
+	return -1;
 }
 
+int
+evbuffer_add_file(struct evbuffer *buf, int fd, ev_off_t offset, ev_off_t length)
+{
+	struct evbuffer_file_segment *seg;
+	unsigned flags = EVBUF_FS_CLOSE_ON_FREE;
+	int r;
+
+	seg = evbuffer_file_segment_new(fd, offset, length, flags);
+	if (!seg)
+		return -1;
+	r = evbuffer_add_file_segment(buf, seg, 0, length);
+	evbuffer_file_segment_free(seg);
+	return r;
+}
 
 void
 evbuffer_setcb(struct evbuffer *buffer, evbuffer_cb cb, void *cbarg)
@@ -2936,50 +3000,3 @@ evbuffer_cb_unsuspend(struct evbuffer *b
 }
 #endif
 
-/* These hooks are exposed so that the unit tests can temporarily disable
- * sendfile support in order to test mmap, or both to test linear
- * access. Don't use it; if we need to add a way to disable sendfile support
- * in the future, it will probably be via an alternate version of
- * evbuffer_add_file() with a 'flags' argument.
- */
-int _evbuffer_testing_use_sendfile(void);
-int _evbuffer_testing_use_mmap(void);
-int _evbuffer_testing_use_linear_file_access(void);
-
-int
-_evbuffer_testing_use_sendfile(void)
-{
-	int ok = 0;
-#ifdef USE_SENDFILE
-	use_sendfile = 1;
-	ok = 1;
-#endif
-#ifdef _EVENT_HAVE_MMAP
-	use_mmap = 0;
-#endif
-	return ok;
-}
-int
-_evbuffer_testing_use_mmap(void)
-{
-	int ok = 0;
-#ifdef USE_SENDFILE
-	use_sendfile = 0;
-#endif
-#ifdef _EVENT_HAVE_MMAP
-	use_mmap = 1;
-	ok = 1;
-#endif
-	return ok;
-}
-int
-_evbuffer_testing_use_linear_file_access(void)
-{
-#ifdef USE_SENDFILE
-	use_sendfile = 0;
-#endif
-#ifdef _EVENT_HAVE_MMAP
-	use_mmap = 0;
-#endif
-	return 1;
-}

==== sntp/libevent/buffer_iocp.c ====
2011-04-14 19:55:04+00:00, davehart at shiny.ad.hartbrothers.com +2 -1
  libevent 2.1 (prerelease git head bfdda26534ea66b847760720260a4b4d8fcefe58)

--- 1.1/sntp/libevent/buffer_iocp.c	2011-01-20 03:02:52 -05:00
+++ 1.2/sntp/libevent/buffer_iocp.c	2011-04-14 15:55:04 -04:00
@@ -30,12 +30,13 @@
    This module implements overlapped read and write functions for evbuffer
    objects on Windows.
 */
+#include "event2/event-config.h"
+#include "evconfig-private.h"
 
 #include "event2/buffer.h"
 #include "event2/buffer_compat.h"
 #include "event2/util.h"
 #include "event2/thread.h"
-#include "event2/event-config.h"
 #include "util-internal.h"
 #include "evthread-internal.h"
 #include "evbuffer-internal.h"

==== sntp/libevent/bufferevent-internal.h ====
2011-04-14 19:55:04+00:00, davehart at shiny.ad.hartbrothers.com +16 -0
  libevent 2.1 (prerelease git head bfdda26534ea66b847760720260a4b4d8fcefe58)

--- 1.1/sntp/libevent/bufferevent-internal.h	2011-01-20 03:02:52 -05:00
+++ 1.2/sntp/libevent/bufferevent-internal.h	2011-04-14 15:55:04 -04:00
@@ -31,11 +31,13 @@ extern "C" {
 #endif
 
 #include "event2/event-config.h"
+#include "evconfig-private.h"
 #include "event2/util.h"
 #include "defer-internal.h"
 #include "evthread-internal.h"
 #include "event2/thread.h"
 #include "ratelim-internal.h"
+#include "event2/bufferevent_struct.h"
 
 /* These flags are reasons that we might be declining to actually enable
    reading or writing on a bufferevent.
@@ -286,6 +288,20 @@ void bufferevent_unsuspend_write(struct 
 	bufferevent_suspend_read((b), BEV_SUSPEND_WM)
 #define bufferevent_wm_unsuspend_read(b) \
 	bufferevent_unsuspend_read((b), BEV_SUSPEND_WM)
+
+/*
+  Disable a bufferevent.  Equivalent to bufferevent_disable(), but
+  first resets 'connecting' flag to force EV_WRITE down for sure.
+
+  XXXX this method will go away in the future; try not to add new users.
+    See comment in evhttp_connection_reset() for discussion.
+
+  @param bufev the bufferevent to be disabled
+  @param event any combination of EV_READ | EV_WRITE.
+  @return 0 if successful, or -1 if an error occurred
+  @see bufferevent_disable()
+ */
+int bufferevent_disable_hard(struct bufferevent *bufev, short event);
 
 /** Internal: Set up locking on a bufferevent.  If lock is set, use it.
  * Otherwise, use a new lock. */

==== sntp/libevent/bufferevent.c ====
2011-04-14 19:55:04+00:00, davehart at shiny.ad.hartbrothers.com +21 -2
  libevent 2.1 (prerelease git head bfdda26534ea66b847760720260a4b4d8fcefe58)

--- 1.1/sntp/libevent/bufferevent.c	2011-01-20 03:02:52 -05:00
+++ 1.2/sntp/libevent/bufferevent.c	2011-04-14 15:55:04 -04:00
@@ -25,9 +25,10 @@
  * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
-#include <sys/types.h>
-
 #include "event2/event-config.h"
+#include "evconfig-private.h"
+
+#include <sys/types.h>
 
 #ifdef _EVENT_HAVE_SYS_TIME_H
 #include <sys/time.h>
@@ -472,6 +473,24 @@ bufferevent_settimeout(struct buffereven
 	bufferevent_set_timeouts(bufev, ptv_read, ptv_write);
 }
 
+
+int
+bufferevent_disable_hard(struct bufferevent *bufev, short event)
+{
+	int r = 0;
+	struct bufferevent_private *bufev_private =
+	    EVUTIL_UPCAST(bufev, struct bufferevent_private, bev);
+
+	BEV_LOCK(bufev);
+	bufev->enabled &= ~event;
+
+	bufev_private->connecting = 0;
+	if (bufev->be_ops->disable(bufev, event) < 0)
+		r = -1;
+
+	BEV_UNLOCK(bufev);
+	return r;
+}
 
 int
 bufferevent_disable(struct bufferevent *bufev, short event)

==== sntp/libevent/bufferevent_async.c ====
2011-04-14 19:55:04+00:00, davehart at shiny.ad.hartbrothers.com +1 -0
  libevent 2.1 (prerelease git head bfdda26534ea66b847760720260a4b4d8fcefe58)

--- 1.1/sntp/libevent/bufferevent_async.c	2011-01-20 03:02:52 -05:00
+++ 1.2/sntp/libevent/bufferevent_async.c	2011-04-14 15:55:04 -04:00
@@ -27,6 +27,7 @@
  */
 
 #include "event2/event-config.h"
+#include "evconfig-private.h"
 
 #ifdef _EVENT_HAVE_SYS_TIME_H
 #include <sys/time.h>

==== sntp/libevent/bufferevent_filter.c ====
2011-04-14 19:55:04+00:00, davehart at shiny.ad.hartbrothers.com +2 -0
  libevent 2.1 (prerelease git head bfdda26534ea66b847760720260a4b4d8fcefe58)

--- 1.1/sntp/libevent/bufferevent_filter.c	2011-01-20 03:02:52 -05:00
+++ 1.2/sntp/libevent/bufferevent_filter.c	2011-04-14 15:55:04 -04:00
@@ -26,6 +26,8 @@
  * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
+#include "evconfig-private.h"
+
 #include <sys/types.h>
 
 #include "event2/event-config.h"

==== sntp/libevent/bufferevent_openssl.c ====
2011-04-14 19:55:04+00:00, davehart at shiny.ad.hartbrothers.com +3 -2
  libevent 2.1 (prerelease git head bfdda26534ea66b847760720260a4b4d8fcefe58)

--- 1.1/sntp/libevent/bufferevent_openssl.c	2011-01-20 03:02:52 -05:00
+++ 1.2/sntp/libevent/bufferevent_openssl.c	2011-04-14 15:55:04 -04:00
@@ -24,9 +24,10 @@
  * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
-#include <sys/types.h>
-
 #include "event2/event-config.h"
+#include "evconfig-private.h"
+
+#include <sys/types.h>
 
 #ifdef _EVENT_HAVE_SYS_TIME_H
 #include <sys/time.h>

==== sntp/libevent/bufferevent_pair.c ====
2011-04-14 19:55:04+00:00, davehart at shiny.ad.hartbrothers.com +2 -2
  libevent 2.1 (prerelease git head bfdda26534ea66b847760720260a4b4d8fcefe58)

--- 1.1/sntp/libevent/bufferevent_pair.c	2011-01-20 03:02:52 -05:00
+++ 1.2/sntp/libevent/bufferevent_pair.c	2011-04-14 15:55:04 -04:00
@@ -23,14 +23,14 @@
  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
  * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
+#include "event2/event-config.h"
+#include "evconfig-private.h"
 
 #include <sys/types.h>
 
 #ifdef WIN32
 #include <winsock2.h>
 #endif
-
-#include "event2/event-config.h"
 
 #include "event2/util.h"
 #include "event2/buffer.h"

==== sntp/libevent/bufferevent_ratelim.c ====
2011-04-14 19:55:04+00:00, davehart at shiny.ad.hartbrothers.com +1 -0
  libevent 2.1 (prerelease git head bfdda26534ea66b847760720260a4b4d8fcefe58)

--- 1.1/sntp/libevent/bufferevent_ratelim.c	2011-01-20 03:02:52 -05:00
+++ 1.2/sntp/libevent/bufferevent_ratelim.c	2011-04-14 15:55:04 -04:00
@@ -25,6 +25,7 @@
  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
  * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
+#include "evconfig-private.h"
 
 #include <sys/types.h>
 #include <limits.h>

==== sntp/libevent/bufferevent_sock.c ====
2011-04-14 19:55:04+00:00, davehart at shiny.ad.hartbrothers.com +3 -2
  libevent 2.1 (prerelease git head bfdda26534ea66b847760720260a4b4d8fcefe58)

--- 1.1/sntp/libevent/bufferevent_sock.c	2011-01-20 03:02:52 -05:00
+++ 1.2/sntp/libevent/bufferevent_sock.c	2011-04-14 15:55:04 -04:00
@@ -26,9 +26,10 @@
  * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
-#include <sys/types.h>
-
 #include "event2/event-config.h"
+#include "evconfig-private.h"
+
+#include <sys/types.h>
 
 #ifdef _EVENT_HAVE_SYS_TIME_H
 #include <sys/time.h>

==== sntp/libevent/configure.in ====
2011-04-14 19:55:04+00:00, davehart at shiny.ad.hartbrothers.com +162 -17
  libevent 2.1 (prerelease git head bfdda26534ea66b847760720260a4b4d8fcefe58)

--- 1.1/sntp/libevent/configure.in	2011-01-20 03:02:53 -05:00
+++ 1.1.1.1/sntp/libevent/configure.in	2011-04-14 15:55:04 -04:00
@@ -1,24 +1,47 @@
 dnl configure.in for libevent
 dnl Dug Song <dugsong at monkey.org>
-AC_PREREQ(2.59c)
+AC_PREREQ(2.59)
 AC_INIT(event.c)
 
 AC_CONFIG_MACRO_DIR([m4])
 
-AM_INIT_AUTOMAKE(libevent,2.0.10-stable)
-AM_CONFIG_HEADER(config.h)
-AC_DEFINE(NUMERIC_VERSION, 0x02000a00, [Numeric representation of the version])
+AM_INIT_AUTOMAKE(libevent,2.1.0-alpha-dev)
+dnl AM_SILENT_RULES req. automake 1.11.  [no] defaults V=1
+m4_ifdef([AM_SILENT_RULES], [AM_SILENT_RULES([no])])
+AM_CONFIG_HEADER(config.h  evconfig-private.h:evconfig-private.h.in)
+AC_DEFINE(NUMERIC_VERSION, 0x02010001, [Numeric representation of the version])
 
 dnl Initialize prefix.
 if test "$prefix" = "NONE"; then
    prefix="/usr/local"
 fi
 
+dnl Try and get a full POSIX environment on obscure systems
+ifdef([AC_USE_SYSTEM_EXTENSIONS], [
+AC_USE_SYSTEM_EXTENSIONS
+], [
+AC_AIX
+AC_GNU_SOURCE
+AC_MINIX
+])
+
+AC_CANONICAL_BUILD
+AC_CANONICAL_HOST
+dnl the 'build' machine is where we run configure and compile
+dnl the 'host' machine is where the resulting stuff runs.
+
+#case "$host_os" in
+#
+# osf5*)
+#    CFLAGS="$CFLAGS -D_OSF_SOURCE"
+#    ;;
+#esac
+
 dnl Checks for programs.
 AC_PROG_CC
 AC_PROG_INSTALL
 AC_PROG_LN_S
-AC_PROG_MKDIR_P
+# AC_PROG_MKDIR_P - $(MKDIR_P) should be defined by AM_INIT_AUTOMAKE
 
 AC_PROG_GCC_TRADITIONAL
 
@@ -44,6 +67,16 @@ AC_ARG_ENABLE(openssl,
 AC_ARG_ENABLE(debug-mode,
      AS_HELP_STRING(--disable-debug-mode, disable support for running in debug mode),
         [], [enable_debug_mode=yes])
+AC_ARG_ENABLE([libevent-install],
+     AS_HELP_STRING([--disable-libevent-install, disable installation of libevent]),
+	[], [enable_libevent_install=yes])
+AC_ARG_ENABLE([libevent-regress],
+     AS_HELP_STRING([--disable-libevent-regress, skip regress in make check]),
+	[], [enable_libevent_regress=yes])
+AC_ARG_ENABLE([function-sections],
+     AS_HELP_STRING([--enable-function-sections, make static library allow smaller binaries with --gc-sections]),
+	[], [enable_function_sections=no])
+
 
 AC_PROG_LIBTOOL
 
@@ -53,6 +86,14 @@ dnl   the command line with --enable-sha
 dnl AC_DISABLE_SHARED
 AC_SUBST(LIBTOOL_DEPS)
 
+AM_CONDITIONAL([BUILD_REGRESS], [test "$enable_libevent_regress" = "yes"])
+if test "$enable_libevent_regress" = "yes" ; then
+    CHECK_REGRESS=regress
+else
+    CHECK_REGRESS=
+fi
+AC_SUBST([CHECK_REGRESS])
+
 dnl Checks for libraries.
 AC_SEARCH_LIBS([inet_ntoa], [nsl])
 AC_SEARCH_LIBS([socket], [socket])
@@ -60,6 +101,9 @@ AC_SEARCH_LIBS([inet_aton], [resolv])
 AC_SEARCH_LIBS([clock_gettime], [rt])
 AC_SEARCH_LIBS([sendfile], [sendfile])
 
+AC_CHECK_HEADERS([zlib.h])
+
+if test "x$ac_cv_header_zlib_h" = "xyes"; then
 dnl Determine if we have zlib for regression tests
 dnl Don't put this one in LIBS
 save_LIBS="$LIBS"
@@ -72,6 +116,7 @@ AC_SEARCH_LIBS([inflateEnd], [z],
 	AC_DEFINE(HAVE_LIBZ, 1, [Define if the system has zlib])])
 LIBS="$save_LIBS"
 AC_SUBST(ZLIB_LIBS)
+fi
 AM_CONDITIONAL(ZLIB_REGRESS, [test "$have_zlib" = "yes"])
 
 dnl See if we have openssl.  This doesn't go in LIBS either.
@@ -90,7 +135,7 @@ fi
 
 dnl Checks for header files.
 AC_HEADER_STDC
-AC_CHECK_HEADERS(fcntl.h stdarg.h inttypes.h stdint.h stddef.h poll.h unistd.h sys/epoll.h sys/time.h sys/queue.h sys/event.h sys/param.h sys/ioctl.h sys/select.h sys/devpoll.h port.h netinet/in.h netinet/in6.h sys/socket.h sys/uio.h arpa/inet.h sys/eventfd.h sys/mman.h sys/sendfile.h sys/wait.h netdb.h)
+AC_CHECK_HEADERS([fcntl.h stdarg.h inttypes.h stdint.h stddef.h poll.h unistd.h sys/epoll.h sys/time.h sys/queue.h sys/event.h sys/param.h sys/ioctl.h sys/select.h sys/devpoll.h port.h netinet/in.h netinet/in6.h sys/socket.h sys/uio.h arpa/inet.h sys/eventfd.h sys/mman.h sys/sendfile.h sys/wait.h netdb.h])
 AC_CHECK_HEADERS(sys/sysctl.h, [], [], [
 #ifdef HAVE_SYS_PARAM_H
 #include <sys/param.h>
@@ -199,8 +244,32 @@ AC_C_INLINE
 AC_HEADER_TIME
 
 dnl Checks for library functions.
-AC_CHECK_FUNCS(gettimeofday vasprintf fcntl clock_gettime strtok_r strsep getaddrinfo getnameinfo strlcpy inet_ntop inet_pton signal sigaction strtoll inet_aton pipe eventfd sendfile mmap splice arc4random arc4random_buf issetugid geteuid getegid getservbyname getprotobynumber setenv unsetenv putenv)
+AC_CHECK_FUNCS([gettimeofday vasprintf fcntl clock_gettime strtok_r strsep])
+AC_CHECK_FUNCS([getnameinfo strlcpy inet_ntop inet_pton signal sigaction strtoll inet_aton pipe eventfd sendfile mmap splice arc4random arc4random_buf issetugid geteuid getegid getprotobynumber setenv unsetenv putenv])
 
+AC_CACHE_CHECK(
+    [for getaddrinfo],
+    [libevent_cv_getaddrinfo],
+    [AC_LINK_IFELSE(
+	[AC_LANG_PROGRAM(
+	    [[
+		#ifdef HAVE_NETDB_H
+		#include <netdb.h>
+		#endif
+	    ]],
+	    [[
+		getaddrinfo;
+	    ]]
+	)],
+	[libevent_cv_getaddrinfo=yes],
+	[libevent_cv_getaddrinfo=no]
+    )]
+)
+if test "$libevent_cv_getaddrinfo" = "yes" ; then
+    AC_DEFINE([HAVE_GETADDRINFO], [1], [Do we have getaddrinfo()?])
+else
+
+AC_CHECK_FUNCS([getservbyname])
 # Check for gethostbyname_r in all its glorious incompatible versions.
 #   (This is cut-and-pasted from Tor, which based its logic on
 #   Python's configure.in.)
@@ -211,14 +280,14 @@ AC_CHECK_FUNC(gethostbyname_r, [
   AC_MSG_CHECKING([how many arguments gethostbyname_r() wants])
   OLD_CFLAGS=$CFLAGS
   CFLAGS="$CFLAGS $MY_CPPFLAGS $MY_THREAD_CPPFLAGS $MY_CFLAGS"
-  AC_COMPILE_IFELSE(AC_LANG_PROGRAM([
+  AC_COMPILE_IFELSE([AC_LANG_PROGRAM([
 #include <netdb.h>
   ], [[
     char *cp1, *cp2;
     struct hostent *h1, *h2;
     int i1, i2;
     (void)gethostbyname_r(cp1,h1,cp2,i1,&h2,&i2);
-  ]]),[
+  ]])],[
     AC_DEFINE(HAVE_GETHOSTBYNAME_R)
     AC_DEFINE(HAVE_GETHOSTBYNAME_R_6_ARG, 1,
      [Define this if gethostbyname_r takes 6 arguments])
@@ -257,6 +326,7 @@ AC_CHECK_FUNC(gethostbyname_r, [
  CFLAGS=$OLD_CFLAGS
 ])
 
+fi
 
 AC_CHECK_SIZEOF(long)
 
@@ -443,7 +513,7 @@ AC_CHECK_SIZEOF(short)
 AC_CHECK_SIZEOF(size_t)
 AC_CHECK_SIZEOF(void *)
 
-AC_CHECK_TYPES([struct in6_addr, struct sockaddr_in6, sa_family_t, struct addrinfo], , ,
+AC_CHECK_TYPES([struct in6_addr, struct sockaddr_in6, sa_family_t, struct addrinfo, struct sockaddr_storage], , ,
 [#define _GNU_SOURCE
 #include <sys/types.h>
 #ifdef HAVE_NETINET_IN_H
@@ -559,22 +629,22 @@ AM_CONDITIONAL(OPENSSL, [test "$enable_o
 
 # Add some more warnings which we use in development but not in the
 # released versions.  (Some relevant gcc versions can't handle these.)
-if test x$enable_gcc_warnings = xyes; then
+if test x$enable_gcc_warnings = xyes && test "$GCC" = "yes"; then
 
-  AC_COMPILE_IFELSE(AC_LANG_PROGRAM([], [
+  AC_COMPILE_IFELSE([AC_LANG_PROGRAM([], [
 #if !defined(__GNUC__) || (__GNUC__ < 4)
 #error
-#endif]), have_gcc4=yes, have_gcc4=no)
+#endif])], have_gcc4=yes, have_gcc4=no)
 
-  AC_COMPILE_IFELSE(AC_LANG_PROGRAM([], [
+  AC_COMPILE_IFELSE([AC_LANG_PROGRAM([], [
 #if !defined(__GNUC__) || (__GNUC__ < 4) || (__GNUC__ == 4 && __GNUC_MINOR__ < 2)
 #error
-#endif]), have_gcc42=yes, have_gcc42=no)
+#endif])], have_gcc42=yes, have_gcc42=no)
 
-  AC_COMPILE_IFELSE(AC_LANG_PROGRAM([], [
+  AC_COMPILE_IFELSE([AC_LANG_PROGRAM([], [
 #if !defined(__GNUC__) || (__GNUC__ < 4) || (__GNUC__ == 4 && __GNUC_MINOR__ < 5)
 #error
-#endif]), have_gcc45=yes, have_gcc45=no)
+#endif])], have_gcc45=yes, have_gcc45=no)
 
   CFLAGS="$CFLAGS -W -Wfloat-equal -Wundef -Wpointer-arith -Wstrict-prototypes -Wmissing-prototypes -Wwrite-strings -Wredundant-decls -Wchar-subscripts -Wcomment -Wformat -Wwrite-strings -Wmissing-declarations -Wredundant-decls -Wnested-externs -Wbad-function-cast -Wswitch-enum -Werror"
   CFLAGS="$CFLAGS -Wno-unused-parameter -Wstrict-aliasing"
@@ -598,6 +668,81 @@ if test x$enable_gcc_warnings = xyes; th
 # CFLAGS="$CFLAGS -Winline"
 
 fi
+
+LIBEVENT_GC_SECTIONS=
+if test "$GCC" = yes && test "$enable_function_sections" = yes ; then
+    AC_CACHE_CHECK(
+	[if linker supports omitting unused code and data],
+	[libevent_cv_gc_sections_runs],
+	[
+	    dnl  NetBSD will link but likely not run with --gc-sections
+	    dnl  http://bugs.ntp.org/1844
+	    dnl  http://gnats.netbsd.org/40401
+	    dnl  --gc-sections causes attempt to load as linux elf, with
+	    dnl  wrong syscalls in place.  Test a little gauntlet of
+	    dnl  simple stdio read code checking for errors, expecting
+	    dnl  enough syscall differences that the NetBSD code will
+	    dnl  fail even with Linux emulation working as designed.
+	    dnl  A shorter test could be refined by someone with access
+	    dnl  to a NetBSD host with Linux emulation working.
+	    origCFLAGS="$CFLAGS"
+	    CFLAGS="$CFLAGS -Wl,--gc-sections"
+	    AC_LINK_IFELSE(
+		[AC_LANG_PROGRAM(
+		    [[
+			#include <stdlib.h>
+			#include <stdio.h>
+		    ]],
+		    [[
+			FILE *	fpC;
+			char	buf[32];
+			size_t	cch;
+			int	read_success_once;
+
+			fpC = fopen("conftest.c", "r");
+			if (NULL == fpC)
+				exit(1);
+			do {
+				cch = fread(buf, sizeof(buf), 1, fpC);
+				read_success_once |= (0 != cch);
+			} while (0 != cch);
+			if (!read_success_once)
+				exit(2);
+			if (!feof(fpC))
+				exit(3);
+			if (0 != fclose(fpC))
+				exit(4);
+
+			exit(EXIT_SUCCESS);
+		    ]]
+		)],
+		[
+                    dnl We have to do this invocation manually so that we can
+                    dnl get the output of conftest.err to make sure it doesn't
+                    dnl mention gc-sections.
+		    if test "X$cross_compiling" = "Xyes" || grep gc-sections conftest.err ; then
+			libevent_cv_gc_sections_runs=no
+		    else
+			libevent_cv_gc_sections_runs=no
+			./conftest >/dev/null 2>&1 && libevent_cv_gc_sections_runs=yes
+		    fi
+		],
+		[libevent_cv_gc_sections_runs=no]
+	    )
+	    CFLAGS="$origCFLAGS"
+	    AS_UNSET([origCFLAGS])
+	]
+    )
+    case "$libevent_cv_gc_sections_runs" in
+     yes)
+	CFLAGS="-ffunction-sections -fdata-sections $CFLAGS"
+	LIBEVENT_GC_SECTIONS="-Wl,--gc-sections"
+	;;
+    esac
+fi
+AC_SUBST([LIBEVENT_GC_SECTIONS])
+
+AM_CONDITIONAL([INSTALL_LIBEVENT], [test "$enable_libevent_install" = "yes"])
 
 AC_CONFIG_FILES( [libevent.pc libevent_openssl.pc libevent_pthreads.pc] )
 AC_OUTPUT(Makefile include/Makefile test/Makefile sample/Makefile)

==== sntp/libevent/defer-internal.h ====
2011-04-14 19:55:04+00:00, davehart at shiny.ad.hartbrothers.com +2 -0
  libevent 2.1 (prerelease git head bfdda26534ea66b847760720260a4b4d8fcefe58)

--- 1.1/sntp/libevent/defer-internal.h	2011-01-20 03:02:53 -05:00
+++ 1.2/sntp/libevent/defer-internal.h	2011-04-14 15:55:04 -04:00
@@ -31,6 +31,8 @@ extern "C" {
 #endif
 
 #include "event2/event-config.h"
+#include "evconfig-private.h"
+
 #include <sys/queue.h>
 
 struct deferred_cb;

==== sntp/libevent/devpoll.c ====
2011-04-14 19:55:04+00:00, davehart at shiny.ad.hartbrothers.com +1 -0
  libevent 2.1 (prerelease git head bfdda26534ea66b847760720260a4b4d8fcefe58)

--- 1.1/sntp/libevent/devpoll.c	2011-01-20 03:02:53 -05:00
+++ 1.2/sntp/libevent/devpoll.c	2011-04-14 15:55:04 -04:00
@@ -25,6 +25,7 @@
  * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 #include "event2/event-config.h"
+#include "evconfig-private.h"
 
 #include <sys/types.h>
 #include <sys/resource.h>

==== sntp/libevent/epoll.c ====
2011-04-14 19:55:04+00:00, davehart at shiny.ad.hartbrothers.com +251 -140
  libevent 2.1 (prerelease git head bfdda26534ea66b847760720260a4b4d8fcefe58)

--- 1.1/sntp/libevent/epoll.c	2011-01-20 03:02:53 -05:00
+++ 1.2/sntp/libevent/epoll.c	2011-04-14 15:55:04 -04:00
@@ -25,6 +25,7 @@
  * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 #include "event2/event-config.h"
+#include "evconfig-private.h"
 
 #include <stdint.h>
 #include <sys/types.h>
@@ -167,6 +168,171 @@ epoll_op_to_string(int op)
 	    "???";
 }
 
+/*
+  Here are the values we're masking off to decide what operations to do.
+  Note that since EV_READ|EV_WRITE.
+
+  Note also that this table is a little sparse, since ADD+DEL is
+  nonsensical ("xxx" in the list below.)
+
+  Note also also that we are shifting old_events by only 3 bits, since
+  EV_READ is 2 and EV_WRITE is 4.
+
+  The table was auto-generated with a python script, according to this
+  pseudocode:
+
+      If either the read or the write change is add+del:
+	 This is impossible; Set op==-1, events=0.
+      Else, if either the read or the write change is add:
+	 Set events to 0.
+	 If the read change is add, or
+	    (the read change is not del, and ev_read is in old_events):
+	       Add EPOLLIN to events.
+	 If the write change is add, or
+	    (the write change is not del, and ev_write is in old_events):
+	       Add EPOLLOUT to events.
+
+	 If old_events is set:
+	       Set op to EPOLL_CTL_MOD [*1,*2]
+	Else:
+	       Set op to EPOLL_CTL_ADD [*3]
+
+      Else, if the read or the write change is del:
+	 Set op to EPOLL_CTL_DEL.
+	 If the read change is del:
+	     If the write change is del:
+		 Set events to EPOLLIN|EPOLLOUT
+	     Else if ev_write is in old_events:
+		 Set events to EPOLLOUT
+		Set op to EPOLL_CTL_MOD
+	     Else
+		 Set events to EPOLLIN
+	 Else:
+	     {The write change is del.}
+	    If ev_read is in old_events:
+		 Set events to EPOLLIN
+		Set op to EPOLL_CTL_MOD
+	    Else:
+		Set the events to EPOLLOUT
+
+      Else:
+	   There is no read or write change; set op to 0 and events to 0.
+
+      The logic is a little tricky, since we had no events set on the fd before,
+      we need to set op="ADD" and set events=the events we want to add.	 If we
+      had any events set on the fd before, and we want any events to remain on
+      the fd, we need to say op="MOD" and set events=the events we want to
+      remain.  But if we want to delete the last event, we say op="DEL" and
+      set events=(any non-null pointer).
+
+  [*1] This MOD is only a guess.  MOD might fail with ENOENT if the file was
+       closed and a new file was opened with the same fd.  If so, we'll retry
+       with ADD.
+
+  [*2] We can't replace this with a no-op even if old_events is the same as
+       the new events: if the file was closed and reopened, we need to retry
+       with an ADD.  (We do a MOD in this case since "no change" is more
+       common than "close and reopen", so we'll usually wind up doing 1
+       syscalls instead of 2.)
+
+  [*3] This ADD is only a guess.  There is a fun Linux kernel issue where if
+       you have two fds for the same file (via dup) and you ADD one to an
+       epfd, then close it, then re-create it with the same fd (via dup2 or an
+       unlucky dup), then try to ADD it again, you'll get an EEXIST, since the
+       struct epitem is not actually removed from the struct eventpoll until
+       the file itself is closed.
+
+  EV_CHANGE_ADD==1
+  EV_CHANGE_DEL==2
+  EV_READ      ==2
+  EV_WRITE     ==4
+  Bit 0: read change is add
+  Bit 1: read change is del
+  Bit 2: write change is add
+  Bit 3: write change is del
+  Bit 4: old events had EV_READ
+  Bit 5: old events had EV_WRITE
+*/
+
+#define INDEX(c) \
+	(   (((c)->read_change&(EV_CHANGE_ADD|EV_CHANGE_DEL))) |       \
+	    (((c)->write_change&(EV_CHANGE_ADD|EV_CHANGE_DEL)) << 2) | \
+	    (((c)->old_events&(EV_READ|EV_WRITE)) << 3) )
+
+#if EV_READ != 2 || EV_WRITE != 4 || EV_CHANGE_ADD != 1 || EV_CHANGE_DEL != 2
+#error "Libevent's internals changed!  Regenerate the op_table in epoll.c"
+#endif
+
+static const struct operation {
+	int events;
+	int op;
+} op_table[] = {
+	{ 0, 0 },                           /* old= 0, write:  0, read:  0 */
+	{ EPOLLIN, EPOLL_CTL_ADD },         /* old= 0, write:  0, read:add */
+	{ EPOLLIN, EPOLL_CTL_DEL },         /* old= 0, write:  0, read:del */
+	{ 0, -1 },                          /* old= 0, write:  0, read:xxx */
+	{ EPOLLOUT, EPOLL_CTL_ADD },        /* old= 0, write:add, read:  0 */
+	{ EPOLLIN|EPOLLOUT, EPOLL_CTL_ADD },/* old= 0, write:add, read:add */
+	{ EPOLLOUT, EPOLL_CTL_ADD },        /* old= 0, write:add, read:del */
+	{ 0, -1 },                          /* old= 0, write:add, read:xxx */
+	{ EPOLLOUT, EPOLL_CTL_DEL },        /* old= 0, write:del, read:  0 */
+	{ EPOLLIN, EPOLL_CTL_ADD },         /* old= 0, write:del, read:add */
+	{ EPOLLIN|EPOLLOUT, EPOLL_CTL_DEL },/* old= 0, write:del, read:del */
+	{ 0, -1 },                          /* old= 0, write:del, read:xxx */
+	{ 0, -1 },                          /* old= 0, write:xxx, read:  0 */
+	{ 0, -1 },                          /* old= 0, write:xxx, read:add */
+	{ 0, -1 },                          /* old= 0, write:xxx, read:del */
+	{ 0, -1 },                          /* old= 0, write:xxx, read:xxx */
+	{ 0, 0 },                           /* old= r, write:  0, read:  0 */
+	{ EPOLLIN, EPOLL_CTL_MOD },         /* old= r, write:  0, read:add */
+	{ EPOLLIN, EPOLL_CTL_DEL },         /* old= r, write:  0, read:del */
+	{ 0, -1 },                          /* old= r, write:  0, read:xxx */
+	{ EPOLLIN|EPOLLOUT, EPOLL_CTL_MOD },/* old= r, write:add, read:  0 */
+	{ EPOLLIN|EPOLLOUT, EPOLL_CTL_MOD },/* old= r, write:add, read:add */
+	{ EPOLLOUT, EPOLL_CTL_MOD },        /* old= r, write:add, read:del */
+	{ 0, -1 },                          /* old= r, write:add, read:xxx */
+	{ EPOLLIN, EPOLL_CTL_MOD },         /* old= r, write:del, read:  0 */
+	{ EPOLLIN, EPOLL_CTL_MOD },         /* old= r, write:del, read:add */
+	{ EPOLLIN|EPOLLOUT, EPOLL_CTL_DEL },/* old= r, write:del, read:del */
+	{ 0, -1 },                          /* old= r, write:del, read:xxx */
+	{ 0, -1 },                          /* old= r, write:xxx, read:  0 */
+	{ 0, -1 },                          /* old= r, write:xxx, read:add */
+	{ 0, -1 },                          /* old= r, write:xxx, read:del */
+	{ 0, -1 },                          /* old= r, write:xxx, read:xxx */
+	{ 0, 0 },                           /* old= w, write:  0, read:  0 */
+	{ EPOLLIN|EPOLLOUT, EPOLL_CTL_MOD },/* old= w, write:  0, read:add */
+	{ EPOLLOUT, EPOLL_CTL_MOD },        /* old= w, write:  0, read:del */
+	{ 0, -1 },                          /* old= w, write:  0, read:xxx */
+	{ EPOLLOUT, EPOLL_CTL_MOD },        /* old= w, write:add, read:  0 */
+	{ EPOLLIN|EPOLLOUT, EPOLL_CTL_MOD },/* old= w, write:add, read:add */
+	{ EPOLLOUT, EPOLL_CTL_MOD },        /* old= w, write:add, read:del */
+	{ 0, -1 },                          /* old= w, write:add, read:xxx */
+	{ EPOLLOUT, EPOLL_CTL_DEL },        /* old= w, write:del, read:  0 */
+	{ EPOLLIN, EPOLL_CTL_MOD },         /* old= w, write:del, read:add */
+	{ EPOLLIN|EPOLLOUT, EPOLL_CTL_DEL },/* old= w, write:del, read:del */
+	{ 0, -1 },                          /* old= w, write:del, read:xxx */
+	{ 0, -1 },                          /* old= w, write:xxx, read:  0 */
+	{ 0, -1 },                          /* old= w, write:xxx, read:add */
+	{ 0, -1 },                          /* old= w, write:xxx, read:del */
+	{ 0, -1 },                          /* old= w, write:xxx, read:xxx */
+	{ 0, 0 },                           /* old=rw, write:  0, read:  0 */
+	{ EPOLLIN|EPOLLOUT, EPOLL_CTL_MOD },/* old=rw, write:  0, read:add */
+	{ EPOLLOUT, EPOLL_CTL_MOD },        /* old=rw, write:  0, read:del */
+	{ 0, -1 },                          /* old=rw, write:  0, read:xxx */
+	{ EPOLLIN|EPOLLOUT, EPOLL_CTL_MOD },/* old=rw, write:add, read:  0 */
+	{ EPOLLIN|EPOLLOUT, EPOLL_CTL_MOD },/* old=rw, write:add, read:add */
+	{ EPOLLOUT, EPOLL_CTL_MOD },        /* old=rw, write:add, read:del */
+	{ 0, -1 },                          /* old=rw, write:add, read:xxx */
+	{ EPOLLIN, EPOLL_CTL_MOD },         /* old=rw, write:del, read:  0 */
+	{ EPOLLIN, EPOLL_CTL_MOD },         /* old=rw, write:del, read:add */
+	{ EPOLLIN|EPOLLOUT, EPOLL_CTL_DEL },/* old=rw, write:del, read:del */
+	{ 0, -1 },                          /* old=rw, write:del, read:xxx */
+	{ 0, -1 },                          /* old=rw, write:xxx, read:  0 */
+	{ 0, -1 },                          /* old=rw, write:xxx, read:add */
+	{ 0, -1 },                          /* old=rw, write:xxx, read:del */
+	{ 0, -1 },                          /* old=rw, write:xxx, read:xxx */
+};
+
 static int
 epoll_apply_one_change(struct event_base *base,
     struct epollop *epollop,
@@ -174,156 +340,101 @@ epoll_apply_one_change(struct event_base
 {
 	struct epoll_event epev;
 	int op, events = 0;
+	int idx;
 
-	if (1) {
-		/* The logic here is a little tricky.  If we had no events set
-		   on the fd before, we need to set op="ADD" and set
-		   events=the events we want to add.  If we had any events set
-		   on the fd before, and we want any events to remain on the
-		   fd, we need to say op="MOD" and set events=the events we
-		   want to remain.  But if we want to delete the last event,
-		   we say op="DEL" and set events=the remaining events.  What
-		   fun!
-		*/
-
-		/* TODO: Turn this into a switch or a table lookup. */
-
-		if ((ch->read_change & EV_CHANGE_ADD) ||
-		    (ch->write_change & EV_CHANGE_ADD)) {
-			/* If we are adding anything at all, we'll want to do
-			 * either an ADD or a MOD. */
-			events = 0;
-			op = EPOLL_CTL_ADD;
-			if (ch->read_change & EV_CHANGE_ADD) {
-				events |= EPOLLIN;
-			} else if (ch->read_change & EV_CHANGE_DEL) {
-				;
-			} else if (ch->old_events & EV_READ) {
-				events |= EPOLLIN;
-			}
-			if (ch->write_change & EV_CHANGE_ADD) {
-				events |= EPOLLOUT;
-			} else if (ch->write_change & EV_CHANGE_DEL) {
-				;
-			} else if (ch->old_events & EV_WRITE) {
-				events |= EPOLLOUT;
-			}
-			if ((ch->read_change|ch->write_change) & EV_ET)
-				events |= EPOLLET;
+	idx = INDEX(ch);
+	op = op_table[idx].op;
+	events = op_table[idx].events;
+
+	if (!events) {
+		EVUTIL_ASSERT(op == 0);
+		return 0;
+	}
 
-			if (ch->old_events) {
-				/* If MOD fails, we retry as an ADD, and if
-				 * ADD fails we will retry as a MOD.  So the
-				 * only hard part here is to guess which one
-				 * will work.  As a heuristic, we'll try
-				 * MOD first if we think there were old
-				 * events and ADD if we think there were none.
-				 *
-				 * We can be wrong about the MOD if the file
-				 * has in fact been closed and re-opened.
-				 *
-				 * We can be wrong about the ADD if the
-				 * the fd has been re-created with a dup()
-				 * of the same file that it was before.
-				 */
-				op = EPOLL_CTL_MOD;
-			}
-		} else if ((ch->read_change & EV_CHANGE_DEL) ||
-		    (ch->write_change & EV_CHANGE_DEL)) {
-			/* If we're deleting anything, we'll want to do a MOD
-			 * or a DEL. */
-			op = EPOLL_CTL_DEL;
-
-			if (ch->read_change & EV_CHANGE_DEL) {
-				if (ch->write_change & EV_CHANGE_DEL) {
-					events = EPOLLIN|EPOLLOUT;
-				} else if (ch->old_events & EV_WRITE) {
-					events = EPOLLOUT;
-					op = EPOLL_CTL_MOD;
-				} else {
-					events = EPOLLIN;
-				}
-			} else if (ch->write_change & EV_CHANGE_DEL) {
-				if (ch->old_events & EV_READ) {
-					events = EPOLLIN;
-					op = EPOLL_CTL_MOD;
-				} else {
-					events = EPOLLOUT;
-				}
-			}
-		}
+	if ((ch->read_change|ch->write_change) & EV_CHANGE_ET)
+		events |= EPOLLET;
 
-		if (!events)
-			return 0;
+	memset(&epev, 0, sizeof(epev));
+	epev.data.fd = ch->fd;
+	epev.events = events;
+	if (epoll_ctl(epollop->epfd, op, ch->fd, &epev) == 0) {
+		event_debug(("Epoll %s(%d) on fd %d okay. [old events were %d; read change was %d; write change was %d]",
+			epoll_op_to_string(op),
+			(int)epev.events,
+			(int)ch->fd,
+			ch->old_events,
+			ch->read_change,
+			ch->write_change));
+		return 0;
+	}
 
-		memset(&epev, 0, sizeof(epev));
-		epev.data.fd = ch->fd;
-		epev.events = events;
-		if (epoll_ctl(epollop->epfd, op, ch->fd, &epev) == -1) {
-			if (op == EPOLL_CTL_MOD && errno == ENOENT) {
-				/* If a MOD operation fails with ENOENT, the
-				 * fd was probably closed and re-opened.  We
-				 * should retry the operation as an ADD.
-				 */
-				if (epoll_ctl(epollop->epfd, EPOLL_CTL_ADD, ch->fd, &epev) == -1) {
-					event_warn("Epoll MOD(%d) on %d retried as ADD; that failed too",
-					    (int)epev.events, ch->fd);
-					return -1;
-				} else {
-					event_debug(("Epoll MOD(%d) on %d retried as ADD; succeeded.",
-						(int)epev.events,
-						ch->fd));
-				}
-			} else if (op == EPOLL_CTL_ADD && errno == EEXIST) {
-				/* If an ADD operation fails with EEXIST,
-				 * either the operation was redundant (as with a
-				 * precautionary add), or we ran into a fun
-				 * kernel bug where using dup*() to duplicate the
-				 * same file into the same fd gives you the same epitem
-				 * rather than a fresh one.  For the second case,
-				 * we must retry with MOD. */
-				if (epoll_ctl(epollop->epfd, EPOLL_CTL_MOD, ch->fd, &epev) == -1) {
-					event_warn("Epoll ADD(%d) on %d retried as MOD; that failed too",
-					    (int)epev.events, ch->fd);
-					return -1;
-				} else {
-					event_debug(("Epoll ADD(%d) on %d retried as MOD; succeeded.",
-						(int)epev.events,
-						ch->fd));
-				}
-			} else if (op == EPOLL_CTL_DEL &&
-			    (errno == ENOENT || errno == EBADF ||
-				errno == EPERM)) {
-				/* If a delete fails with one of these errors,
-				 * that's fine too: we closed the fd before we
-				 * got around to calling epoll_dispatch. */
-				event_debug(("Epoll DEL(%d) on fd %d gave %s: DEL was unnecessary.",
-					(int)epev.events,
-					ch->fd,
-					strerror(errno)));
+	switch (op) {
+	case EPOLL_CTL_MOD:
+		if (errno == ENOENT) {
+			/* If a MOD operation fails with ENOENT, the
+			 * fd was probably closed and re-opened.  We
+			 * should retry the operation as an ADD.
+			 */
+			if (epoll_ctl(epollop->epfd, EPOLL_CTL_ADD, ch->fd, &epev) == -1) {
+				event_warn("Epoll MOD(%d) on %d retried as ADD; that failed too",
+				    (int)epev.events, ch->fd);
+				return -1;
 			} else {
-				event_warn("Epoll %s(%d) on fd %d failed.  Old events were %d; read change was %d (%s); write change was %d (%s)",
-				    epoll_op_to_string(op),
-				    (int)epev.events,
-				    ch->fd,
-				    ch->old_events,
-				    ch->read_change,
-				    change_to_string(ch->read_change),
-				    ch->write_change,
-				    change_to_string(ch->write_change));
+				event_debug(("Epoll MOD(%d) on %d retried as ADD; succeeded.",
+					(int)epev.events,
+					ch->fd));
+				return 0;
+			}
+		}
+		break;
+	case EPOLL_CTL_ADD:
+		if (errno == EEXIST) {
+			/* If an ADD operation fails with EEXIST,
+			 * either the operation was redundant (as with a
+			 * precautionary add), or we ran into a fun
+			 * kernel bug where using dup*() to duplicate the
+			 * same file into the same fd gives you the same epitem
+			 * rather than a fresh one.  For the second case,
+			 * we must retry with MOD. */
+			if (epoll_ctl(epollop->epfd, EPOLL_CTL_MOD, ch->fd, &epev) == -1) {
+				event_warn("Epoll ADD(%d) on %d retried as MOD; that failed too",
+				    (int)epev.events, ch->fd);
 				return -1;
+			} else {
+				event_debug(("Epoll ADD(%d) on %d retried as MOD; succeeded.",
+					(int)epev.events,
+					ch->fd));
+				return 0;
 			}
-		} else {
-			event_debug(("Epoll %s(%d) on fd %d okay. [old events were %d; read change was %d; write change was %d]",
-				epoll_op_to_string(op),
+		}
+		break;
+	case EPOLL_CTL_DEL:
+		if (errno == ENOENT || errno == EBADF || errno == EPERM) {
+			/* If a delete fails with one of these errors,
+			 * that's fine too: we closed the fd before we
+			 * got around to calling epoll_dispatch. */
+			event_debug(("Epoll DEL(%d) on fd %d gave %s: DEL was unnecessary.",
 				(int)epev.events,
-				(int)ch->fd,
-				ch->old_events,
-				ch->read_change,
-				ch->write_change));
+				ch->fd,
+				strerror(errno)));
+			return 0;
 		}
+		break;
+	default:
+		break;
 	}
-	return 0;
+
+	event_warn("Epoll %s(%d) on fd %d failed.  Old events were %d; read change was %d (%s); write change was %d (%s)",
+	    epoll_op_to_string(op),
+	    (int)epev.events,
+	    ch->fd,
+	    ch->old_events,
+	    ch->read_change,
+	    change_to_string(ch->read_change),
+	    ch->write_change,
+	    change_to_string(ch->write_change));
+
+	return -1;
 }
 
 static int

==== sntp/libevent/epoll_sub.c ====
2011-04-14 19:55:04+00:00, davehart at shiny.ad.hartbrothers.com +1 -0
  libevent 2.1 (prerelease git head bfdda26534ea66b847760720260a4b4d8fcefe58)

--- 1.1/sntp/libevent/epoll_sub.c	2011-01-20 03:02:53 -05:00
+++ 1.2/sntp/libevent/epoll_sub.c	2011-04-14 15:55:04 -04:00
@@ -24,6 +24,7 @@
  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
  * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
+#include "evconfig-private.h"
 #include <stdint.h>
 
 #include <sys/param.h>

==== sntp/libevent/evbuffer-internal.h ====
2011-04-14 19:55:04+00:00, davehart at shiny.ad.hartbrothers.com +45 -12
  libevent 2.1 (prerelease git head bfdda26534ea66b847760720260a4b4d8fcefe58)

--- 1.1/sntp/libevent/evbuffer-internal.h	2011-01-20 03:02:53 -05:00
+++ 1.2/sntp/libevent/evbuffer-internal.h	2011-04-14 15:55:04 -04:00
@@ -32,6 +32,7 @@ extern "C" {
 #endif
 
 #include "event2/event-config.h"
+#include "evconfig-private.h"
 #include "event2/util.h"
 #include "util-internal.h"
 #include "defer-internal.h"
@@ -170,8 +171,8 @@ struct evbuffer_chain {
 
 	/** Set if special handling is required for this chain */
 	unsigned flags;
-#define EVBUFFER_MMAP		0x0001	/**< memory in buffer is mmaped */
-#define EVBUFFER_SENDFILE	0x0002	/**< a chain used for sendfile */
+#define EVBUFFER_FILESEGMENT	0x0001  /**< A chain used for a file segment */
+#define EVBUFFER_SENDFILE	0x0002	/**< a chain used with sendfile */
 #define EVBUFFER_REFERENCE	0x0004	/**< a chain with a mem reference */
 #define EVBUFFER_IMMUTABLE	0x0008	/**< read-only chain */
 	/** a chain that mustn't be reallocated or freed, or have its contents
@@ -192,19 +193,51 @@ struct evbuffer_chain {
 	unsigned char *buffer;
 };
 
-/* this is currently used by both mmap and sendfile */
-/* TODO(niels): something strange needs to happen for Windows here, I am not
- * sure what that is, but it needs to get looked into.
- */
-struct evbuffer_chain_fd {
-	int fd;	/**< the fd associated with this chain */
-};
-
-/** callback for a reference buffer; lets us know what to do with it when
- * we're done with it. */
+/** callback for a reference chain; lets us know what to do with it when
+ * we're done with it. Lives at the end of an evbuffer_chain with the
+ * EVBUFFER_REFERENCE flag set */
 struct evbuffer_chain_reference {
 	evbuffer_ref_cleanup_cb cleanupfn;
 	void *extra;
+};
+
+/** File segment for a file-segment chain.  Lives at the end of an
+ * evbuffer_chain with the EVBUFFER_FILESEGMENT flag set.  */
+struct evbuffer_chain_file_segment {
+	struct evbuffer_file_segment *segment;
+#ifdef WIN32
+	/** If we're using CreateFileMapping, this is the handle to the view. */
+	HANDLE view_handle;
+#endif
+};
+
+/* Declared in event2/buffer.h; defined here. */
+struct evbuffer_file_segment {
+	void *lock; /**< lock prevent concurrent access to refcnt */
+	int refcnt; /**< Reference count for this file segment */
+	unsigned flags; /**< combination of EVBUF_FS_* flags  */
+
+	/** What kind of file segment is this? */
+	enum {EVBUF_FS_MMAP, EVBUF_FS_SENDFILE, EVBUF_FS_IO} type;
+
+	/** The fd that we read the data from. */
+	int fd;
+	/** If we're using mmap, this is the raw mapped memory. */
+	void *mapping;
+#ifdef WIN32
+	/** If we're using CreateFileMapping, this is the mapping */
+	HANDLE mapping_handle;
+#endif
+	/** If we're using mmap or IO, this is the content of the file
+	 * segment. */
+	char *contents;
+	/** If we're using mmap, this is the offset within 'mapping' where
+	 * this data segment begins.  If we're using sendfile, this is the
+	 * offset within the file where this data begins.  If we're using IO,
+	 * this is 0. */
+	ev_off_t offset;
+	/** The length of this segment. */
+	ev_off_t length;
 };
 
 #define EVBUFFER_CHAIN_SIZE sizeof(struct evbuffer_chain)

==== sntp/libevent/evdns.c ====
2011-04-14 19:55:04+00:00, davehart at shiny.ad.hartbrothers.com +7 -1
  libevent 2.1 (prerelease git head bfdda26534ea66b847760720260a4b4d8fcefe58)

--- 1.1/sntp/libevent/evdns.c	2011-01-20 03:02:53 -05:00
+++ 1.1.1.1/sntp/libevent/evdns.c	2011-04-14 15:55:04 -04:00
@@ -34,8 +34,10 @@
  * Version: 0.1b
  */
 
-#include <sys/types.h>
 #include "event2/event-config.h"
+#include "evconfig-private.h"
+
+#include <sys/types.h>
 
 #ifndef _FORTIFY_SOURCE
 #define _FORTIFY_SOURCE 3
@@ -3069,6 +3071,10 @@ search_request_new(struct evdns_base *ba
 		}
 		EVUTIL_ASSERT(handle->search_origname == NULL);
 		handle->search_origname = mm_strdup(name);
+		if (handle->search_origname == NULL) {
+			/* XXX Should we dealloc req? If yes, how? */
+			return NULL;
+		}
 		handle->search_state = base->global_search_state;
 		handle->search_flags = flags;
 		base->global_search_state->refcount++;

==== sntp/libevent/event-internal.h ====
2011-04-14 19:55:05+00:00, davehart at shiny.ad.hartbrothers.com +13 -1
  libevent 2.1 (prerelease git head bfdda26534ea66b847760720260a4b4d8fcefe58)

--- 1.1/sntp/libevent/event-internal.h	2011-01-20 03:02:53 -05:00
+++ 1.1.1.1/sntp/libevent/event-internal.h	2011-04-14 15:55:05 -04:00
@@ -32,6 +32,9 @@ extern "C" {
 #endif
 
 #include "event2/event-config.h"
+#include "evconfig-private.h"
+
+#include <time.h>
 #include <sys/queue.h>
 #include "event2/event_struct.h"
 #include "minheap-internal.h"
@@ -235,8 +238,17 @@ struct event_base {
 	/** Priority queue of events with timeouts. */
 	struct min_heap timeheap;
 
-	/** Stored timeval: used to avoid calling gettimeofday too often. */
+	/** Stored timeval: used to avoid calling gettimeofday/clock_gettime
+	 * too often. */
 	struct timeval tv_cache;
+
+#if defined(_EVENT_HAVE_CLOCK_GETTIME) && defined(CLOCK_MONOTONIC)
+	/** Difference between internal time (maybe from clock_gettime) and
+	 * gettimeofday. */
+	struct timeval tv_clock_diff;
+	/** Second in which we last updated tv_clock_diff, in monotonic time. */
+	time_t last_updated_clock_diff;
+#endif
 
 #ifndef _EVENT_DISABLE_THREAD_SUPPORT
 	/* threading support */

==== sntp/libevent/event.c ====
2011-04-14 19:55:05+00:00, davehart at shiny.ad.hartbrothers.com +29 -7
  libevent 2.1 (prerelease git head bfdda26534ea66b847760720260a4b4d8fcefe58)

--- 1.1/sntp/libevent/event.c	2011-01-20 03:02:53 -05:00
+++ 1.1.1.1/sntp/libevent/event.c	2011-04-14 15:55:05 -04:00
@@ -25,6 +25,7 @@
  * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 #include "event2/event-config.h"
+#include "evconfig-private.h"
 
 #ifdef WIN32
 #include <winsock2.h>
@@ -330,6 +331,10 @@ detect_monotonic(void)
 #endif
 }
 
+/* How often (in seconds) do we check for changes in wall clock time relative
+ * to monotonic time?  Set this to -1 for 'never.' */
+#define CLOCK_SYNC_INTERVAL 5
+
 /** Set 'tp' to the current time according to 'base'.  We must hold the lock
  * on 'base'.  If there is a cached time, return it.  Otherwise, use
  * clock_gettime or gettimeofday as appropriate to find out the right time.
@@ -354,6 +359,14 @@ gettime(struct event_base *base, struct 
 
 		tp->tv_sec = ts.tv_sec;
 		tp->tv_usec = ts.tv_nsec / 1000;
+		if (base->last_updated_clock_diff + CLOCK_SYNC_INTERVAL
+		    < ts.tv_sec) {
+			struct timeval tv;
+			evutil_gettimeofday(&tv,NULL);
+			evutil_timersub(&tv, tp, &base->tv_clock_diff);
+			base->last_updated_clock_diff = ts.tv_sec;
+		}
+
 		return (0);
 	}
 #endif
@@ -372,7 +385,16 @@ event_base_gettimeofday_cached(struct ev
 	}
 
 	EVBASE_ACQUIRE_LOCK(base, th_base_lock);
-	r = gettime(base, tv);
+	if (base->tv_cache.tv_sec == 0) {
+		r = evutil_gettimeofday(tv, NULL);
+	} else {
+#if defined(_EVENT_HAVE_CLOCK_GETTIME) && defined(CLOCK_MONOTONIC)
+		evutil_timeradd(&base->tv_cache, &base->tv_clock_diff, tv);
+#else
+		*tv = base->tv_cache;
+#endif
+		r = 0;
+	}
 	EVBASE_RELEASE_LOCK(base, th_base_lock);
 	return r;
 }
@@ -1778,7 +1800,6 @@ event_priority_set(struct event *ev, int
 int
 event_pending(const struct event *ev, short event, struct timeval *tv)
 {
-	struct timeval	now, res;
 	int flags = 0;
 
 	_event_debug_assert_is_setup(ev);
@@ -1795,12 +1816,13 @@ event_pending(const struct event *ev, sh
 	/* See if there is a timeout that we should report */
 	if (tv != NULL && (flags & event & EV_TIMEOUT)) {
 		struct timeval tmp = ev->ev_timeout;
-		event_base_gettimeofday_cached(ev->ev_base, &now);
 		tmp.tv_usec &= MICROSECONDS_MASK;
-		evutil_timersub(&tmp, &now, &res);
-		/* correctly remap to real time */
-		evutil_gettimeofday(&now, NULL);
-		evutil_timeradd(&now, &res, tv);
+#if defined(_EVENT_HAVE_CLOCK_GETTIME) && defined(CLOCK_MONOTONIC)
+		/* correctly remamp to real time */
+		evutil_timeradd(&ev->ev_base->tv_clock_diff, &tmp, tv);
+#else
+		*tv = tmp;
+#endif
 	}
 
 	return (flags & event);

==== sntp/libevent/event_iocp.c ====
2011-04-14 19:55:05+00:00, davehart at shiny.ad.hartbrothers.com +1 -0
  libevent 2.1 (prerelease git head bfdda26534ea66b847760720260a4b4d8fcefe58)

--- 1.1/sntp/libevent/event_iocp.c	2011-01-20 03:02:53 -05:00
+++ 1.2/sntp/libevent/event_iocp.c	2011-04-14 15:55:05 -04:00
@@ -23,6 +23,7 @@
  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
  * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
+#include "evconfig-private.h"
 
 #include <winsock2.h>
 #include <windows.h>

==== sntp/libevent/event_tagging.c ====
2011-04-14 19:55:05+00:00, davehart at shiny.ad.hartbrothers.com +1 -0
  libevent 2.1 (prerelease git head bfdda26534ea66b847760720260a4b4d8fcefe58)

--- 1.1/sntp/libevent/event_tagging.c	2011-01-20 03:02:53 -05:00
+++ 1.2/sntp/libevent/event_tagging.c	2011-04-14 15:55:05 -04:00
@@ -26,6 +26,7 @@
  */
 
 #include "event2/event-config.h"
+#include "evconfig-private.h"
 
 #ifdef _EVENT_HAVE_SYS_TYPES_H
 #include <sys/types.h>

==== sntp/libevent/evmap.c ====
2011-04-14 19:55:05+00:00, davehart at shiny.ad.hartbrothers.com +8 -12
  libevent 2.1 (prerelease git head bfdda26534ea66b847760720260a4b4d8fcefe58)

--- 1.1/sntp/libevent/evmap.c	2011-01-20 03:02:53 -05:00
+++ 1.2/sntp/libevent/evmap.c	2011-04-14 15:55:05 -04:00
@@ -24,6 +24,7 @@
  * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 #include "event2/event-config.h"
+#include "evconfig-private.h"
 
 #ifdef WIN32
 #include <winsock2.h>
@@ -685,14 +686,11 @@ event_changelist_del(struct event_base *
 	if (!change)
 		return -1;
 
-	/* A delete removes any previous add, rather than replacing it:
-	   on those platforms where "add, delete, dispatch" is not the same
-	   as "no-op, dispatch", we want the no-op behavior.
-
-	   As well as checking the current operation we should also check
-	   the original set of events to make sure were not ignoring
-	   the case where the add operation is present on an event that
-	   was already set.
+	/* A delete on an event set that doesn't contain the event to be
+	   deleted produces a no-op.  This effectively emoves any previous
+	   uncommitted add, rather than replacing it: on those platforms where
+	   "add, delete, dispatch" is not the same as "no-op, dispatch", we
+	   want the no-op behavior.
 
 	   If we have a no-op item, we could remove it it from the list
 	   entirely, but really there's not much point: skipping the no-op
@@ -704,15 +702,13 @@ event_changelist_del(struct event_base *
 	 */
 
 	if (events & (EV_READ|EV_SIGNAL)) {
-		if (!(change->old_events & (EV_READ | EV_SIGNAL)) &&
-		    (change->read_change & EV_CHANGE_ADD))
+		if (!(change->old_events & (EV_READ | EV_SIGNAL)))
 			change->read_change = 0;
 		else
 			change->read_change = EV_CHANGE_DEL;
 	}
 	if (events & EV_WRITE) {
-		if (!(change->old_events & EV_WRITE) &&
-		    (change->write_change & EV_CHANGE_ADD))
+		if (!(change->old_events & EV_WRITE))
 			change->write_change = 0;
 		else
 			change->write_change = EV_CHANGE_DEL;

==== sntp/libevent/evport.c ====
2011-04-14 19:55:05+00:00, davehart at shiny.ad.hartbrothers.com +15 -4
  libevent 2.1 (prerelease git head bfdda26534ea66b847760720260a4b4d8fcefe58)

--- 1.1/sntp/libevent/evport.c	2011-01-20 03:02:53 -05:00
+++ 1.1.1.1/sntp/libevent/evport.c	2011-04-14 15:55:05 -04:00
@@ -51,6 +51,7 @@
  */
 
 #include "event2/event-config.h"
+#include "evconfig-private.h"
 
 #include <sys/time.h>
 #include <sys/queue.h>
@@ -336,10 +337,20 @@ evport_dispatch(struct event_base *base,
 		 * (because we have to pass this to the callback)
 		 */
 		res = 0;
-		if (pevt->portev_events & POLLIN)
-			res |= EV_READ;
-		if (pevt->portev_events & POLLOUT)
-			res |= EV_WRITE;
+		if (pevt->portev_events & (POLLERR|POLLHUP)) {
+			res = EV_READ | EV_WRITE;
+		} else {
+			if (pevt->portev_events & POLLIN)
+				res |= EV_READ;
+			if (pevt->portev_events & POLLOUT)
+				res |= EV_WRITE;
+		}
+
+		/*
+		 * Check for the error situations or a hangup situation
+		 */
+		if (pevt->portev_events & (POLLERR|POLLHUP|POLLNVAL))
+			res |= EV_READ|EV_WRITE;
 
 		EVUTIL_ASSERT(epdp->ed_nevents > fd);
 		fdi = &(epdp->ed_fds[fd]);

==== sntp/libevent/evrpc.c ====
2011-04-14 19:55:05+00:00, davehart at shiny.ad.hartbrothers.com +8 -7
  libevent 2.1 (prerelease git head bfdda26534ea66b847760720260a4b4d8fcefe58)

--- 1.1/sntp/libevent/evrpc.c	2011-01-20 03:02:53 -05:00
+++ 1.2/sntp/libevent/evrpc.c	2011-04-14 15:55:05 -04:00
@@ -25,6 +25,7 @@
  * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 #include "event2/event-config.h"
+#include "evconfig-private.h"
 
 #ifdef WIN32
 #define WIN32_LEAN_AND_MEAN
@@ -98,7 +99,7 @@ evrpc_free(struct evrpc_base *base)
 
 	while ((rpc = TAILQ_FIRST(&base->registered_rpcs)) != NULL) {
 		r = evrpc_unregister_rpc(base, rpc->uri);
-		EVUTIL_ASSERT(r);
+		EVUTIL_ASSERT(r == 0);
 	}
 	while ((pause = TAILQ_FIRST(&base->paused_requests)) != NULL) {
 		TAILQ_REMOVE(&base->paused_requests, pause, next);
@@ -263,9 +264,6 @@ evrpc_unregister_rpc(struct evrpc_base *
 	}
 	TAILQ_REMOVE(&base->registered_rpcs, rpc, next);
 
-	mm_free((char *)rpc->uri);
-	mm_free(rpc);
-
 	registered_uri = evrpc_construct_uri(name);
 
 	/* remove the http server callback */
@@ -273,6 +271,9 @@ evrpc_unregister_rpc(struct evrpc_base *
 	EVUTIL_ASSERT(r == 0);
 
 	mm_free(registered_uri);
+
+	mm_free((char *)rpc->uri);
+	mm_free(rpc);
 	return (0);
 }
 
@@ -584,8 +585,8 @@ evrpc_pool_add_connection(struct evrpc_p
 	 * unless a timeout was specifically set for a connection,
 	 * the connection inherits the timeout from the pool.
 	 */
-	if (connection->timeout == -1)
-		connection->timeout = pool->timeout;
+	if (!evutil_timerisset(&connection->timeout))
+		evhttp_connection_set_timeout(connection, pool->timeout);
 
 	/*
 	 * if we have any requests pending, schedule them with the new
@@ -612,7 +613,7 @@ evrpc_pool_set_timeout(struct evrpc_pool
 {
 	struct evhttp_connection *evcon;
 	TAILQ_FOREACH(evcon, &pool->connections, next) {
-		evcon->timeout = timeout_in_secs;
+		evhttp_connection_set_timeout(evcon, timeout_in_secs);
 	}
 	pool->timeout = timeout_in_secs;
 }

==== sntp/libevent/evthread-internal.h ====
2011-04-14 19:55:05+00:00, davehart at shiny.ad.hartbrothers.com +3 -1
  libevent 2.1 (prerelease git head bfdda26534ea66b847760720260a4b4d8fcefe58)

--- 1.1/sntp/libevent/evthread-internal.h	2011-01-20 03:02:53 -05:00
+++ 1.2/sntp/libevent/evthread-internal.h	2011-04-14 15:55:05 -04:00
@@ -30,8 +30,10 @@
 extern "C" {
 #endif
 
-#include "event2/thread.h"
 #include "event2/event-config.h"
+#include "evconfig-private.h"
+
+#include "event2/thread.h"
 #include "util-internal.h"
 
 struct event_base;

==== sntp/libevent/evthread.c ====
2011-04-14 19:55:05+00:00, davehart at shiny.ad.hartbrothers.com +13 -1
  libevent 2.1 (prerelease git head bfdda26534ea66b847760720260a4b4d8fcefe58)

--- 1.1/sntp/libevent/evthread.c	2011-01-20 03:02:53 -05:00
+++ 1.1.1.1/sntp/libevent/evthread.c	2011-04-14 15:55:05 -04:00
@@ -25,6 +25,7 @@
  */
 
 #include "event2/event-config.h"
+#include "evconfig-private.h"
 
 #ifndef _EVENT_DISABLE_THREAD_SUPPORT
 
@@ -108,7 +109,10 @@ evthread_set_condition_callbacks(const s
 	return 0;
 }
 
+#define DEBUG_LOCK_SIG	0xdeb0b10c
+
 struct debug_lock {
+	unsigned signature;
 	unsigned locktype;
 	unsigned long held_by;
 	/* XXXX if we ever use read-write locks, we will need a separate
@@ -132,6 +136,7 @@ debug_lock_alloc(unsigned locktype)
 	} else {
 		result->lock = NULL;
 	}
+	result->signature = DEBUG_LOCK_SIG;
 	result->locktype = locktype;
 	result->count = 0;
 	result->held_by = 0;
@@ -144,18 +149,21 @@ debug_lock_free(void *lock_, unsigned lo
 	struct debug_lock *lock = lock_;
 	EVUTIL_ASSERT(lock->count == 0);
 	EVUTIL_ASSERT(locktype == lock->locktype);
+	EVUTIL_ASSERT(DEBUG_LOCK_SIG == lock->signature);
 	if (_original_lock_fns.free) {
 		_original_lock_fns.free(lock->lock,
 		    lock->locktype|EVTHREAD_LOCKTYPE_RECURSIVE);
 	}
 	lock->lock = NULL;
 	lock->count = -100;
+	lock->signature = 0x12300fda;
 	mm_free(lock);
 }
 
 static void
 evthread_debug_lock_mark_locked(unsigned mode, struct debug_lock *lock)
 {
+	EVUTIL_ASSERT(DEBUG_LOCK_SIG == lock->signature);
 	++lock->count;
 	if (!(lock->locktype & EVTHREAD_LOCKTYPE_RECURSIVE))
 		EVUTIL_ASSERT(lock->count == 1);
@@ -188,12 +196,15 @@ debug_lock_lock(unsigned mode, void *loc
 static void
 evthread_debug_lock_mark_unlocked(unsigned mode, struct debug_lock *lock)
 {
+	EVUTIL_ASSERT(DEBUG_LOCK_SIG == lock->signature);
 	if (lock->locktype & EVTHREAD_LOCKTYPE_READWRITE)
 		EVUTIL_ASSERT(mode & (EVTHREAD_READ|EVTHREAD_WRITE));
 	else
 		EVUTIL_ASSERT((mode & (EVTHREAD_READ|EVTHREAD_WRITE)) == 0);
 	if (_evthread_id_fn) {
-		EVUTIL_ASSERT(lock->held_by == _evthread_id_fn());
+		unsigned long me;
+		me = _evthread_id_fn();
+		EVUTIL_ASSERT(lock->held_by == me);
 		if (lock->count == 1)
 			lock->held_by = 0;
 	}
@@ -217,6 +228,7 @@ debug_cond_wait(void *_cond, void *_lock
 {
 	int r;
 	struct debug_lock *lock = _lock;
+	EVUTIL_ASSERT(DEBUG_LOCK_SIG == lock->signature);
 	EVLOCK_ASSERT_LOCKED(_lock);
 	evthread_debug_lock_mark_unlocked(0, lock);
 	r = _original_cond_fns.wait_condition(_cond, lock->lock, tv);

==== sntp/libevent/evthread_pthread.c ====
2011-04-14 19:55:05+00:00, davehart at shiny.ad.hartbrothers.com +4 -2
  libevent 2.1 (prerelease git head bfdda26534ea66b847760720260a4b4d8fcefe58)

--- 1.1/sntp/libevent/evthread_pthread.c	2011-01-20 03:02:53 -05:00
+++ 1.1.1.1/sntp/libevent/evthread_pthread.c	2011-04-14 15:55:05 -04:00
@@ -24,9 +24,11 @@
  * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 #include "event2/event-config.h"
+#include "evconfig-private.h"
 
-/* With glibc we need to define this to get PTHREAD_MUTEX_RECURSIVE. */
-#define _GNU_SOURCE
+/* With glibc we need to define _GNU_SOURCE to get PTHREAD_MUTEX_RECURSIVE.
+ * This comes from evconfig-private.h
+ */
 #include <pthread.h>
 
 struct event_base;

==== sntp/libevent/evthread_win32.c ====
2011-04-14 19:55:05+00:00, davehart at shiny.ad.hartbrothers.com +1 -0
  libevent 2.1 (prerelease git head bfdda26534ea66b847760720260a4b4d8fcefe58)

--- 1.1/sntp/libevent/evthread_win32.c	2011-01-20 03:02:53 -05:00
+++ 1.2/sntp/libevent/evthread_win32.c	2011-04-14 15:55:05 -04:00
@@ -24,6 +24,7 @@
  * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 #include "event2/event-config.h"
+#include "evconfig-private.h"
 
 #ifdef WIN32
 #include <winsock2.h>

==== sntp/libevent/evutil.c ====
2011-04-14 19:55:05+00:00, davehart at shiny.ad.hartbrothers.com +94 -22
  libevent 2.1 (prerelease git head bfdda26534ea66b847760720260a4b4d8fcefe58)

--- 1.1/sntp/libevent/evutil.c	2011-01-20 03:02:53 -05:00
+++ 1.1.1.1/sntp/libevent/evutil.c	2011-04-14 15:55:05 -04:00
@@ -25,8 +25,7 @@
  */
 
 #include "event2/event-config.h"
-
-#define _GNU_SOURCE
+#include "evconfig-private.h"
 
 #ifdef WIN32
 #include <winsock2.h>
@@ -351,6 +350,8 @@ evutil_strtoll(const char *s, char **end
 	r = (ev_int64_t) _atoi64(s);
 	while (isspace(*s))
 		++s;
+	if (*s == '-')
+		++s;
 	while (isdigit(*s))
 		++s;
 	if (endptr)
@@ -358,32 +359,77 @@ evutil_strtoll(const char *s, char **end
 	return r;
 #elif defined(WIN32)
 	return (ev_int64_t) _strtoi64(s, endptr, base);
+#elif defined(_EVENT_SIZEOF_LONG_LONG) && _EVENT_SIZEOF_LONG_LONG == 8
+	long long r;
+	int n;
+	if (base != 10 && base != 16)
+		return 0;
+	if (base == 10) {
+		n = sscanf(s, "%lld", &r);
+	} else {
+		unsigned long long ru=0;
+		n = sscanf(s, "%llx", &ru);
+		if (ru > EV_INT64_MAX)
+			return 0;
+		r = (long long) ru;
+	}
+	if (n != 1)
+		return 0;
+	while (EVUTIL_ISSPACE(*s))
+		++s;
+	if (*s == '-')
+		++s;
+	if (base == 10) {
+		while (EVUTIL_ISDIGIT(*s))
+			++s;
+	} else {
+		while (EVUTIL_ISXDIGIT(*s))
+			++s;
+	}
+	if (endptr)
+		*endptr = (char*) s;
+	return r;
 #else
 #error "I don't know how to parse 64-bit integers."
 #endif
 }
 
 #ifndef _EVENT_HAVE_GETTIMEOFDAY
-/* No gettimeofday; this muse be windows. */
+/* No gettimeofday; this must be windows. */
 int
 evutil_gettimeofday(struct timeval *tv, struct timezone *tz)
 {
-	struct _timeb tb;
+#ifdef _MSC_VER
+#define U64_LITERAL(n) n##ui64
+#else
+#define U64_LITERAL(n) n##llu
+#endif
+
+	/* Conversion logic taken from Tor, which in turn took it
+	 * from Perl.  GetSystemTimeAsFileTime returns its value as
+	 * an unaligned (!) 64-bit value containing the number of
+	 * 100-nanosecond intervals since 1 January 1601 UTC. */
+#define EPOCH_BIAS U64_LITERAL(116444736000000000)
+#define UNITS_PER_SEC U64_LITERAL(10000000)
+#define USEC_PER_SEC U64_LITERAL(1000000)
+#define UNITS_PER_USEC U64_LITERAL(10)
+	union {
+		FILETIME ft_ft;
+		ev_uint64_t ft_64;
+	} ft;
 
 	if (tv == NULL)
 		return -1;
 
-	/* XXXX
-	 * _ftime is not the greatest interface here; GetSystemTimeAsFileTime
-	 * would give us better resolution, whereas something cobbled together
-	 * with GetTickCount could maybe give us monotonic behavior.
-	 *
-	 * Either way, I think this value might be skewed to ignore the
-	 * timezone, and just return local time.  That's not so good.
-	 */
-	_ftime(&tb);
-	tv->tv_sec = (long) tb.time;
-	tv->tv_usec = ((int) tb.millitm) * 1000;
+	GetSystemTimeAsFileTime(&ft.ft_ft);
+
+	if (EVUTIL_UNLIKELY(ft.ft_64 < EPOCH_BIAS)) {
+		/* Time before the unix epoch. */
+		return -1;
+	}
+	ft.ft_64 -= EPOCH_BIAS;
+	tv->tv_sec = (long) (ft.ft_64 / UNITS_PER_SEC);
+	tv->tv_usec = (long) ((ft.ft_64 / UNITS_PER_USEC) % USEC_PER_SEC);
 	return 0;
 }
 #endif
@@ -479,6 +525,15 @@ evutil_socket_finished_connecting(evutil
    set by evutil_check_interfaces. */
 static int have_checked_interfaces, had_ipv4_address, had_ipv6_address;
 
+/* Macro: True iff the IPv4 address 'addr', in host order, is in 127.0.0.0/8
+ */
+#define EVUTIL_V4ADDR_IS_LOCALHOST(addr) (((addr)>>24) == 127)
+
+/* Macro: True iff the IPv4 address 'addr', in host order, is a class D
+ * (multiclass) address.
+ */
+#define EVUTIL_V4ADDR_IS_CLASSD(addr) ((((addr)>>24) & 0xf0) == 0xe0)
+
 /* Test whether we have an ipv4 interface and an ipv6 interface.  Return 0 if
  * the test seemed successful. */
 static int
@@ -522,8 +577,9 @@ evutil_check_interfaces(int force_rechec
 	    getsockname(fd, (struct sockaddr*)&sin_out, &sin_out_len) == 0) {
 		/* We might have an IPv4 interface. */
 		ev_uint32_t addr = ntohl(sin_out.sin_addr.s_addr);
-		if (addr == 0 || (addr&0xff000000) == 127 ||
-		    (addr & 0xff) == 255 || (addr & 0xf0) == 14) {
+		if (addr == 0 ||
+		    EVUTIL_V4ADDR_IS_LOCALHOST(addr) ||
+		    EVUTIL_V4ADDR_IS_CLASSD(addr)) {
 			evutil_inet_ntop(AF_INET, &sin_out.sin_addr,
 			    buf, sizeof(buf));
 			/* This is a reserved, ipv4compat, ipv4map, loopback,
@@ -721,6 +777,10 @@ evutil_getaddrinfo_infer_protocols(struc
 	}
 }
 
+#if AF_UNSPEC != PF_UNSPEC
+#error "I cannot build on a system where AF_UNSPEC != PF_UNSPEC"
+#endif
+
 /** Implements the part of looking up hosts by name that's common to both
  * the blocking and nonblocking resolver:
  *   - Adjust 'hints' to have a reasonable socktype and protocol.
@@ -771,7 +831,7 @@ evutil_getaddrinfo_common(const char *no
 			memset(&sin6, 0, sizeof(sin6));
 			sin6.sin6_family = AF_INET6;
 			sin6.sin6_port = htons(port);
-			if (hints->ai_flags & AI_PASSIVE) {
+			if (hints->ai_flags & EVUTIL_AI_PASSIVE) {
 				/* Bind to :: */
 			} else {
 				/* connect to ::1 */
@@ -788,7 +848,7 @@ evutil_getaddrinfo_common(const char *no
 			memset(&sin, 0, sizeof(sin));
 			sin.sin_family = AF_INET;
 			sin.sin_port = htons(port);
-			if (hints->ai_flags & AI_PASSIVE) {
+			if (hints->ai_flags & EVUTIL_AI_PASSIVE) {
 				/* Bind to 0.0.0.0 */
 			} else {
 				/* connect to 127.0.0.1 */
@@ -958,8 +1018,13 @@ addrinfo_from_hostent(const struct hoste
 		res = evutil_addrinfo_append(res, ai);
 	}
 
-	if (res && ((hints->ai_flags & EVUTIL_AI_CANONNAME) && ent->h_name))
+	if (res && ((hints->ai_flags & EVUTIL_AI_CANONNAME) && ent->h_name)) {
 		res->ai_canonname = mm_strdup(ent->h_name);
+		if (res->ai_canonname == NULL) {
+			evutil_freeaddrinfo(res);
+			return NULL;
+		}
+	}
 
 	return res;
 }
@@ -1083,7 +1148,7 @@ apply_numeric_port_hack(int port, struct
 	}
 }
 
-static void
+static int
 apply_socktype_protocol_hack(struct evutil_addrinfo *ai)
 {
 	struct evutil_addrinfo *ai_new;
@@ -1092,6 +1157,8 @@ apply_socktype_protocol_hack(struct evut
 		if (ai->ai_socktype || ai->ai_protocol)
 			continue;
 		ai_new = mm_malloc(sizeof(*ai_new));
+		if (!ai_new)
+			return -1;
 		memcpy(ai_new, ai, sizeof(*ai_new));
 		ai->ai_socktype = SOCK_STREAM;
 		ai->ai_protocol = IPPROTO_TCP;
@@ -1101,6 +1168,7 @@ apply_socktype_protocol_hack(struct evut
 		ai_new->ai_next = ai->ai_next;
 		ai->ai_next = ai_new;
 	}
+	return 0;
 }
 #endif
 
@@ -1191,7 +1259,11 @@ evutil_getaddrinfo(const char *nodename,
 		apply_numeric_port_hack(portnum, res);
 
 	if (need_socktype_protocol_hack()) {
-		apply_socktype_protocol_hack(*res);
+		if (apply_socktype_protocol_hack(*res) < 0) {
+			evutil_freeaddrinfo(*res);
+			*res = NULL;
+			return EVUTIL_EAI_MEMORY;
+		}
 	}
 	return err;
 #else

==== sntp/libevent/evutil_rand.c ====
2011-04-14 19:55:05+00:00, davehart at shiny.ad.hartbrothers.com +1 -0
  libevent 2.1 (prerelease git head bfdda26534ea66b847760720260a4b4d8fcefe58)

--- 1.1/sntp/libevent/evutil_rand.c	2011-01-20 03:02:54 -05:00
+++ 1.2/sntp/libevent/evutil_rand.c	2011-04-14 15:55:05 -04:00
@@ -33,6 +33,7 @@
  */
 
 #include "event2/event-config.h"
+#include "evconfig-private.h"
 
 #include <limits.h>
 

==== sntp/libevent/http-internal.h ====
2011-04-14 19:55:05+00:00, davehart at shiny.ad.hartbrothers.com +2 -2
  libevent 2.1 (prerelease git head bfdda26534ea66b847760720260a4b4d8fcefe58)

--- 1.1/sntp/libevent/http-internal.h	2011-01-20 03:02:54 -05:00
+++ 1.2/sntp/libevent/http-internal.h	2011-04-14 15:55:05 -04:00
@@ -83,7 +83,7 @@ struct evhttp_connection {
 #define EVHTTP_CON_OUTGOING	0x0002  /* multiple requests possible */
 #define EVHTTP_CON_CLOSEDETECT  0x0004  /* detecting if persistent close */
 
-	int timeout;			/* timeout in seconds for events */
+	struct timeval timeout;		/* timeout for events */
 	int retry_cnt;			/* retry count */
 	int retry_max;			/* maximum number of retries */
 
@@ -152,7 +152,7 @@ struct evhttp {
 	/* NULL if this server is not a vhost */
 	char *vhost_pattern;
 
-	int timeout;
+	struct timeval timeout;
 
 	size_t default_max_headers_size;
 	ev_uint64_t default_max_body_size;

==== sntp/libevent/http.c ====
2011-04-14 19:55:05+00:00, davehart at shiny.ad.hartbrothers.com +212 -47
  libevent 2.1 (prerelease git head bfdda26534ea66b847760720260a4b4d8fcefe58)

--- 1.1/sntp/libevent/http.c	2011-01-20 03:02:54 -05:00
+++ 1.1.1.1/sntp/libevent/http.c	2011-04-14 15:55:05 -04:00
@@ -26,6 +26,7 @@
  */
 
 #include "event2/event-config.h"
+#include "evconfig-private.h"
 
 #ifdef _EVENT_HAVE_SYS_PARAM_H
 #include <sys/param.h>
@@ -56,6 +57,9 @@
 #ifdef _EVENT_HAVE_NETINET_IN_H
 #include <netinet/in.h>
 #endif
+#ifdef _EVENT_HAVE_ARPA_INET_H
+#include <arpa/inet.h>
+#endif
 #ifdef _EVENT_HAVE_NETDB_H
 #include <netdb.h>
 #endif
@@ -97,6 +101,7 @@
 #include "util-internal.h"
 #include "http-internal.h"
 #include "mm-internal.h"
+#include "bufferevent-internal.h"
 
 #ifndef _EVENT_HAVE_GETNAMEINFO
 #define NI_MAXSERV 32
@@ -948,7 +953,9 @@ evhttp_read_body(struct evhttp_connectio
 		evbuffer_remove_buffer(buf, req->input_buffer, n);
 	}
 
-	if (req->body_size > req->evcon->max_body_size) {
+	if (req->body_size > req->evcon->max_body_size ||
+	    (!req->chunked && req->ntoread >= 0 &&
+		(size_t)req->ntoread > req->evcon->max_body_size)) {
 		/* failed body length test */
 		event_debug(("Request body is too long"));
 		evhttp_connection_fail(evcon,
@@ -1015,9 +1022,22 @@ evhttp_read_cb(struct bufferevent *bufev
 	case EVCON_READING_TRAILER:
 		evhttp_read_trailer(evcon, req);
 		break;
+	case EVCON_IDLE:
+		{
+			struct evbuffer *input;
+			size_t total_len;
+
+			input = bufferevent_get_input(evcon->bufev);
+			total_len = evbuffer_get_length(input);
+			event_debug(("%s: read %d bytes in EVCON_IDLE state,"
+                                    " resetting connection",
+					__func__, (int)total_len));
+
+			evhttp_connection_reset(evcon);
+		}
+		break;
 	case EVCON_DISCONNECTED:
 	case EVCON_CONNECTING:
-	case EVCON_IDLE:
 	case EVCON_WRITING:
 	default:
 		event_errx(1, "%s: illegal connection state %d",
@@ -1110,7 +1130,7 @@ evhttp_connection_set_local_address(stru
 	if (evcon->bind_address)
 		mm_free(evcon->bind_address);
 	if ((evcon->bind_address = mm_strdup(address)) == NULL)
-		event_err(1, "%s: strdup", __func__);
+		event_warn("%s: strdup", __func__);
 }
 
 void
@@ -1151,7 +1171,18 @@ evhttp_connection_reset(struct evhttp_co
 {
 	struct evbuffer *tmp;
 
-	bufferevent_disable(evcon->bufev, EV_READ|EV_WRITE);
+	/* XXXX This is not actually an optimal fix.  Instead we ought to have
+	   an API for "stop connecting", or use bufferevent_setfd to turn off
+	   connecting.  But for Libevent 2.0, this seems like a minimal change
+	   least likely to disrupt the rest of the bufferevent and http code.
+
+	   Why is this here?  If the fd is set in the bufferevent, and the
+	   bufferevent is connecting, then you can't actually stop the
+	   bufferevent from trying to connect with bufferevent_disable().  The
+	   connect will never trigger, since we close the fd, but the timeout
+	   might.  That caused an assertion failure in evhttp_connection_fail.
+	*/
+	bufferevent_disable_hard(evcon->bufev, EV_READ|EV_WRITE);
 
 	if (evcon->fd != -1) {
 		/* inform interested parties about connection close */
@@ -1200,6 +1231,8 @@ evhttp_connection_retry(evutil_socket_t 
 static void
 evhttp_connection_cb_cleanup(struct evhttp_connection *evcon)
 {
+	struct evcon_requestq requests;
+
 	if (evcon->retry_max < 0 || evcon->retry_cnt < evcon->retry_max) {
 		evtimer_assign(&evcon->retry_ev, evcon->base, evhttp_connection_retry, evcon);
 		/* XXXX handle failure from evhttp_add_event */
@@ -1211,10 +1244,23 @@ evhttp_connection_cb_cleanup(struct evht
 	}
 	evhttp_connection_reset(evcon);
 
-	/* for now, we just signal all requests by executing their callbacks */
+	/*
+	 * User callback can do evhttp_make_request() on the same
+	 * evcon so new request will be added to evcon->requests.  To
+	 * avoid freeing it prematurely we iterate over the copy of
+	 * the queue.
+	 */
+	TAILQ_INIT(&requests);
 	while (TAILQ_FIRST(&evcon->requests) != NULL) {
 		struct evhttp_request *request = TAILQ_FIRST(&evcon->requests);
 		TAILQ_REMOVE(&evcon->requests, request, next);
+		TAILQ_INSERT_TAIL(&requests, request, next);
+	}
+
+	/* for now, we just signal all requests by executing their callbacks */
+	while (TAILQ_FIRST(&requests) != NULL) {
+		struct evhttp_request *request = TAILQ_FIRST(&requests);
+		TAILQ_REMOVE(&requests, request, next);
 		request->evcon = NULL;
 
 		/* we might want to set an error here */
@@ -1336,14 +1382,11 @@ evhttp_connection_cb(struct bufferevent 
 	    evhttp_error_cb,
 	    evcon);
 
-	if (evcon->timeout == -1)
+	if (!evutil_timerisset(&evcon->timeout)) {
 		bufferevent_settimeout(evcon->bufev,
 		    HTTP_READ_TIMEOUT, HTTP_WRITE_TIMEOUT);
-	else {
-		struct timeval tv;
-		tv.tv_sec = evcon->timeout;
-		tv.tv_usec = 0;
-		bufferevent_set_timeouts(evcon->bufev, &tv, &tv);
+	} else {
+		bufferevent_set_timeouts(evcon->bufev, &evcon->timeout, &evcon->timeout);
 	}
 
 	/* try to start requests that have queued up on this connection */
@@ -1472,7 +1515,8 @@ evhttp_parse_request_line(struct evhttp_
 		return (-1);
 	}
 
-	if ((req->uri_elems = evhttp_uri_parse(req->uri)) == NULL) {
+	if ((req->uri_elems = evhttp_uri_parse_with_flags(req->uri,
+		    EVHTTP_URI_NONCONFORMANT)) == NULL) {
 		return -1;
 	}
 
@@ -1980,7 +2024,7 @@ evhttp_connection_base_new(struct event_
 	evcon->max_headers_size = EV_SIZE_MAX;
 	evcon->max_body_size = EV_SIZE_MAX;
 
-	evcon->timeout = -1;
+	evutil_timerclear(&evcon->timeout);
 	evcon->retry_cnt = evcon->retry_max = 0;
 
 	if ((evcon->address = mm_strdup(address)) == NULL) {
@@ -2032,14 +2076,27 @@ void
 evhttp_connection_set_timeout(struct evhttp_connection *evcon,
     int timeout_in_secs)
 {
-	evcon->timeout = timeout_in_secs;
+	if (timeout_in_secs == -1)
+		evhttp_connection_set_timeout_tv(evcon, NULL);
+	else {
+		struct timeval tv;
+		tv.tv_sec = timeout_in_secs;
+		tv.tv_usec = 0;
+		evhttp_connection_set_timeout_tv(evcon, &tv);
+	}
+}
 
-	if (evcon->timeout == -1)
-		bufferevent_settimeout(evcon->bufev,
-		    HTTP_READ_TIMEOUT, HTTP_WRITE_TIMEOUT);
-	else
-		bufferevent_settimeout(evcon->bufev,
-		    evcon->timeout, evcon->timeout);
+void
+evhttp_connection_set_timeout_tv(struct evhttp_connection *evcon,
+    const struct timeval* tv)
+{
+	if (tv) {
+		evcon->timeout = *tv;
+		bufferevent_set_timeouts(evcon->bufev, &evcon->timeout, &evcon->timeout);
+	} else {
+		evutil_timerclear(&evcon->timeout);
+		bufferevent_settimeout(evcon->bufev, HTTP_READ_TIMEOUT, HTTP_WRITE_TIMEOUT);
+	}
 }
 
 void
@@ -2091,8 +2148,10 @@ evhttp_connection_connect(struct evhttp_
 	    NULL /* evhttp_write_cb */,
 	    evhttp_connection_cb,
 	    evcon);
-	bufferevent_settimeout(evcon->bufev, 0,
-	    evcon->timeout != -1 ? evcon->timeout : HTTP_CONNECT_TIMEOUT);
+	if (!evutil_timerisset(&evcon->timeout))
+		bufferevent_settimeout(evcon->bufev, 0, HTTP_CONNECT_TIMEOUT);
+	else
+		bufferevent_set_timeouts(evcon->bufev, NULL, &evcon->timeout);
 	/* make sure that we get a write callback */
 	bufferevent_enable(evcon->bufev, EV_WRITE);
 
@@ -2145,11 +2204,20 @@ evhttp_make_request(struct evhttp_connec
 	req->evcon = evcon;
 	EVUTIL_ASSERT(!(req->flags & EVHTTP_REQ_OWN_CONNECTION));
 
-	TAILQ_INSERT_TAIL(&evcon->requests, req, next);
-
 	/* If the connection object is not connected; make it so */
-	if (!evhttp_connected(evcon))
-		return (evhttp_connection_connect(evcon));
+	if (!evhttp_connected(evcon)) {
+		int res = evhttp_connection_connect(evcon);
+		/*
+		 * Enqueue the request only if we aren't going to
+		 * return failure from evhttp_make_request().
+		 */
+		if (res == 0)
+			TAILQ_INSERT_TAIL(&evcon->requests, req, next);
+
+		return res;
+	}
+
+	TAILQ_INSERT_TAIL(&evcon->requests, req, next);
 
 	/*
 	 * If it's connected already and we are the first in the queue,
@@ -2491,6 +2559,10 @@ evhttp_response_code(struct evhttp_reque
 	if (reason == NULL)
 		reason = evhttp_response_phrase_internal(code);
 	req->response_code_line = mm_strdup(reason);
+	if (req->response_code_line == NULL) {
+		event_warn("%s: strdup", __func__);
+		/* XXX what else can we do? */
+	}
 }
 
 void
@@ -3071,7 +3143,7 @@ evhttp_new_object(void)
 		return (NULL);
 	}
 
-	http->timeout = -1;
+	evutil_timerclear(&http->timeout);
 	evhttp_set_max_headers_size(http, EV_SIZE_MAX);
 	evhttp_set_max_body_size(http, EV_SIZE_MAX);
 	evhttp_set_allowed_methods(http,
@@ -3236,7 +3308,24 @@ evhttp_remove_server_alias(struct evhttp
 void
 evhttp_set_timeout(struct evhttp* http, int timeout_in_secs)
 {
-	http->timeout = timeout_in_secs;
+	if (timeout_in_secs == -1) {
+		evhttp_set_timeout_tv(http, NULL);
+	} else {
+		struct timeval tv;
+		tv.tv_sec = timeout_in_secs;
+		tv.tv_usec = 0;
+		evhttp_set_timeout_tv(http, &tv);
+	}
+}
+
+void
+evhttp_set_timeout_tv(struct evhttp* http, const struct timeval* tv)
+{
+	if (tv) {
+		http->timeout = *tv;
+	} else {
+		evutil_timerclear(&http->timeout);
+	}
 }
 
 void
@@ -3280,6 +3369,11 @@ evhttp_set_cb(struct evhttp *http, const
 	}
 
 	http_cb->what = mm_strdup(uri);
+	if (http_cb->what == NULL) {
+		event_warn("%s: strdup", __func__);
+		mm_free(http_cb);
+		return (-3);
+	}
 	http_cb->cb = cb;
 	http_cb->cbarg = cbarg;
 
@@ -3620,8 +3714,8 @@ evhttp_get_request(struct evhttp *http, 
 	}
 
 	/* the timeout can be used by the server to close idle connections */
-	if (http->timeout != -1)
-		evhttp_connection_set_timeout(evcon, http->timeout);
+	if (evutil_timerisset(&http->timeout))
+		evhttp_connection_set_timeout_tv(evcon, &http->timeout);
 
 	/*
 	 * if we want to accept more than one request on a connection,
@@ -3768,6 +3862,7 @@ bind_socket(const char *address, ev_uint
 }
 
 struct evhttp_uri {
+	unsigned flags;
 	char *scheme; /* scheme; e.g http, ftp etc */
 	char *userinfo; /* userinfo (typically username:pass), or NULL */
 	char *host; /* hostname, IP address, or NULL */
@@ -3786,7 +3881,13 @@ evhttp_uri_new(void)
 	return uri;
 }
 
-/* Return true of the string starting at s and ending immediately before eos
+void
+evhttp_uri_set_flags(struct evhttp_uri *uri, unsigned flags)
+{
+	uri->flags = flags;
+}
+
+/* Return true if the string starting at s and ending immediately before eos
  * is a valid URI scheme according to RFC3986
  */
 static int
@@ -3911,6 +4012,10 @@ parse_authority(struct evhttp_uri *uri, 
 	EVUTIL_ASSERT(eos);
 	if (eos == s) {
 		uri->host = mm_strdup("");
+		if (uri->host == NULL) {
+			event_warn("%s: strdup", __func__);
+			return -1;
+		}
 		return 0;
 	}
 
@@ -3922,6 +4027,10 @@ parse_authority(struct evhttp_uri *uri, 
 			return -1;
 		*cp++ = '\0';
 		uri->userinfo = mm_strdup(s);
+		if (uri->userinfo == NULL) {
+			event_warn("%s: strdup", __func__);
+			return -1;
+		}
 	} else {
 		cp = s;
 	}
@@ -3949,6 +4058,10 @@ parse_authority(struct evhttp_uri *uri, 
 			return -1;
 	}
 	uri->host = mm_malloc(eos-cp+1);
+	if (uri->host == NULL) {
+		event_warn("%s: malloc", __func__);
+		return -1;
+	}
 	memcpy(uri->host, cp, eos-cp);
 	uri->host[eos-cp] = '\0';
 	return 0;
@@ -3966,13 +4079,41 @@ end_of_authority(char *cp)
 	return cp;
 }
 
+enum uri_part {
+	PART_PATH,
+	PART_QUERY,
+	PART_FRAGMENT
+};
+
 /* Return the character after the longest prefix of 'cp' that matches...
  *   *pchar / "/" if allow_qchars is false, or
- *   *(pchar / "/" / "?") if allow_chars is true.
+ *   *(pchar / "/" / "?") if allow_qchars is true.
  */
 static char *
-end_of_path(char *cp, int allow_qchars)
+end_of_path(char *cp, enum uri_part part, unsigned flags)
 {
+	if (flags & EVHTTP_URI_NONCONFORMANT) {
+		/* If NONCONFORMANT:
+		 *   Path is everything up to a # or ? or nul.
+		 *   Query is everything up a # or nul
+		 *   Fragment is everything up to a nul.
+		 */
+		switch (part) {
+		case PART_PATH:
+			while (*cp && *cp != '#' && *cp != '?')
+				++cp;
+			break;
+		case PART_QUERY:
+			while (*cp && *cp != '#')
+				++cp;
+			break;
+		case PART_FRAGMENT:
+			cp += strlen(cp);
+			break;
+		};
+		return cp;
+	}
+
 	while (*cp) {
 		if (CHAR_IS_UNRESERVED(*cp) ||
 		    strchr(SUBDELIMS, *cp) ||
@@ -3981,7 +4122,7 @@ end_of_path(char *cp, int allow_qchars)
 		else if (*cp == '%' && EVUTIL_ISXDIGIT(cp[1]) &&
 		    EVUTIL_ISXDIGIT(cp[2]))
 			cp += 3;
-		else if (*cp == '?' && allow_qchars)
+		else if (*cp == '?' && part != PART_PATH)
 			++cp;
 		else
 			return cp;
@@ -4005,20 +4146,27 @@ path_matches_noscheme(const char *cp)
 struct evhttp_uri *
 evhttp_uri_parse(const char *source_uri)
 {
+	return evhttp_uri_parse_with_flags(source_uri, 0);
+}
+
+struct evhttp_uri *
+evhttp_uri_parse_with_flags(const char *source_uri, unsigned flags)
+{
 	char *readbuf = NULL, *readp = NULL, *token = NULL, *query = NULL;
 	char *path = NULL, *fragment = NULL;
 	int got_authority = 0;
 
 	struct evhttp_uri *uri = mm_calloc(1, sizeof(struct evhttp_uri));
 	if (uri == NULL) {
-		event_err(1, "%s: calloc", __func__);
+		event_warn("%s: calloc", __func__);
 		goto err;
 	}
 	uri->port = -1;
+	uri->flags = flags;
 
 	readbuf = mm_strdup(source_uri);
 	if (readbuf == NULL) {
-		event_err(1, "%s: strdup", __func__);
+		event_warn("%s: strdup", __func__);
 		goto err;
 	}
 
@@ -4031,7 +4179,6 @@ evhttp_uri_parse(const char *source_uri)
 	      URI = scheme ":" hier-part [ "?" query ] [ "#" fragment ]
 
 	      relative-ref  = relative-part [ "?" query ] [ "#" fragment ]
-
 	 */
 
 	/* 1. scheme: */
@@ -4039,7 +4186,10 @@ evhttp_uri_parse(const char *source_uri)
 	if (token && scheme_ok(readp,token)) {
 		*token = '\0';
 		uri->scheme = mm_strdup(readp);
-
+		if (uri->scheme == NULL) {
+			event_warn("%s: strdup", __func__);
+			goto err;
+		}
 		readp = token+1; /* eat : */
 	}
 
@@ -4058,21 +4208,21 @@ evhttp_uri_parse(const char *source_uri)
 	/* 3. Query: path-abempty, path-absolute, path-rootless, or path-empty
 	 */
 	path = readp;
-	readp = end_of_path(path, 0);
+	readp = end_of_path(path, PART_PATH, flags);
 
 	/* Query */
 	if (*readp == '?') {
 		*readp = '\0';
 		++readp;
 		query = readp;
-		readp = end_of_path(readp, 1);
+		readp = end_of_path(readp, PART_QUERY, flags);
 	}
 	/* fragment */
 	if (*readp == '#') {
 		*readp = '\0';
 		++readp;
 		fragment = readp;
-		readp = end_of_path(readp, 1);
+		readp = end_of_path(readp, PART_FRAGMENT, flags);
 	}
 	if (*readp != '\0') {
 		goto err;
@@ -4096,11 +4246,25 @@ evhttp_uri_parse(const char *source_uri)
 
 	EVUTIL_ASSERT(path);
 	uri->path = mm_strdup(path);
+	if (uri->path == NULL) {
+		event_warn("%s: strdup", __func__);
+		goto err;
+	}
 
-	if (query)
+	if (query) {
 		uri->query = mm_strdup(query);
-	if (fragment)
+		if (uri->query == NULL) {
+			event_warn("%s: strdup", __func__);
+			goto err;
+		}
+	}
+	if (fragment) {
 		uri->fragment = mm_strdup(fragment);
+		if (uri->fragment == NULL) {
+			event_warn("%s: strdup", __func__);
+			goto err;
+		}
+	}
 
 	mm_free(readbuf);
 
@@ -4286,12 +4450,13 @@ evhttp_uri_set_port(struct evhttp_uri *u
 	uri->port = port;
 	return 0;
 }
-#define end_of_cpath(cp,aq) ((const char*)(end_of_path(((char*)(cp)), (aq))))
+#define end_of_cpath(cp,p,f) \
+	((const char*)(end_of_path(((char*)(cp)), (p), (f))))
 
 int
 evhttp_uri_set_path(struct evhttp_uri *uri, const char *path)
 {
-	if (path && end_of_cpath(path, 0) != path+strlen(path))
+	if (path && end_of_cpath(path, PART_PATH, uri->flags) != path+strlen(path))
 		return -1;
 
 	_URI_SET_STR(path);
@@ -4300,7 +4465,7 @@ evhttp_uri_set_path(struct evhttp_uri *u
 int
 evhttp_uri_set_query(struct evhttp_uri *uri, const char *query)
 {
-	if (query && end_of_cpath(query, 1) != query+strlen(query))
+	if (query && end_of_cpath(query, PART_QUERY, uri->flags) != query+strlen(query))
 		return -1;
 	_URI_SET_STR(query);
 	return 0;
@@ -4308,7 +4473,7 @@ evhttp_uri_set_query(struct evhttp_uri *
 int
 evhttp_uri_set_fragment(struct evhttp_uri *uri, const char *fragment)
 {
-	if (fragment && end_of_cpath(fragment, 1) != fragment+strlen(fragment))
+	if (fragment && end_of_cpath(fragment, PART_FRAGMENT, uri->flags) != fragment+strlen(fragment))
 		return -1;
 	_URI_SET_STR(fragment);
 	return 0;

==== sntp/libevent/include/event2/buffer.h ====
2011-04-14 19:55:06+00:00, davehart at shiny.ad.hartbrothers.com +102 -1
  libevent 2.1 (prerelease git head bfdda26534ea66b847760720260a4b4d8fcefe58)

--- 1.1/sntp/libevent/include/event2/buffer.h	2011-01-20 03:02:54 -05:00
+++ 1.2/sntp/libevent/include/event2/buffer.h	2011-04-14 15:55:06 -04:00
@@ -368,15 +368,116 @@ int evbuffer_add_reference(struct evbuff
   The results of using evbuffer_remove() or evbuffer_pullup() are
   undefined.
 
+  For more fine-grained control, use evbuffer_add_file_segment.
+
   @param outbuf the output buffer
   @param fd the file descriptor
   @param off the offset from which to read data
-  @param length how much data to read
+  @param length how much data to read, or -1 to read as much as possible.
+    (-1 requires that 'fd' support fstat.)
   @return 0 if successful, or -1 if an error occurred
 */
 
 int evbuffer_add_file(struct evbuffer *output, int fd, ev_off_t offset,
     ev_off_t length);
+
+/**
+  An evbuffer_file_segment holds a reference to a range of a file --
+  possibly the whole file! -- for use in writing from an evbuffer to a
+  socket.  It could be implemented with mmap, sendfile, splice, or (if all
+  else fails) by just pulling all the data into RAM.  A single
+  evbuffer_file_segment can be added more than once, and to more than one
+  evbuffer.
+ */
+struct evbuffer_file_segment;
+
+/**
+    Flag for creating evbuffer_file_segment: If this flag is set, then when
+    the evbuffer_file_segment is freed and no longer in use by any
+    evbuffer, the underlying fd is closed.
+ */
+#define EVBUF_FS_CLOSE_ON_FREE    0x01
+/**
+   Flag for creating evbuffer_file_segment: Disable memory-map based
+   implementations.
+ */
+#define EVBUF_FS_DISABLE_MMAP     0x02
+/**
+   Flag for creating evbuffer_file_segment: Disable direct fd-to-fd
+   implementations (including sendfile and splice).
+
+   You might want to use this option if data needs to be taken from the
+   evbuffer by any means other than writing it to the network: the sendfile
+   backend is fast, but it only works for sending files directly to the
+   network.
+ */
+#define EVBUF_FS_DISABLE_SENDFILE 0x04
+/**
+   Flag for creating evbuffer_file_segment: Do not allocate a lock for this
+   segment.  If this option is set, then neither the segment nor any
+   evbuffer it is added to may ever be accessed from more than one thread
+   at a time.
+ */
+#define EVBUF_FS_DISABLE_LOCKING  0x08
+
+/**
+   Create and return a new evbuffer_file_segment for reading data from a
+   file and sending it out via an evbuffer.
+
+   This function avoids unnecessary data copies between userland and
+   kernel.  Where available, it uses sendfile or splice.
+
+   The file descriptor must not be closed so long as any evbuffer is using
+   this segment.
+
+   The results of using evbuffer_remove() or evbuffer_pullup() or any other
+   function that reads bytes from an evbuffer on any evbuffer containing
+   the newly returned segment are undefined, unless you pass the
+   EVBUF_FS_DISABLE_SENDFILE flag to this function.
+
+   @param fd an open file to read from.
+   @param offset an index within the file at which to start reading
+   @param length how much data to read, or -1 to read as much as possible.
+      (-1 requires that 'fd' support fstat.)
+   @param flags any number of the EVBUF_FS_* flags
+   @return a new evbuffer_file_segment, or NULL on failure.
+ **/
+struct evbuffer_file_segment *evbuffer_file_segment_new(
+	int fd, ev_off_t offset, ev_off_t length, unsigned flags);
+
+/**
+   Free an evbuffer_file_segment
+
+   It is safe to call this function even if the segment has been added to
+   one or more evbuffers.  The evbuffer_file_segment will not be freed
+   until no more references to it exist.
+ */
+void evbuffer_file_segment_free(struct evbuffer_file_segment *seg);
+
+/**
+   Insert some or all of an evbuffer_file_segment at the end of an evbuffer
+
+   Note that the offset and length parameters of this function have a
+   different meaning from those provided to evbuffer_file_segment_new: When
+   you create the segment, the offset is the offset _within the file_, and
+   the length is the length _of the segment_, whereas when you add a
+   segment to an evbuffer, the offset is _within the segment_ and the
+   length is the length of the _part of the segment you want to use.
+
+   In other words, if you have a 10 KiB file, and you create an
+   evbuffer_file_segment for it with offset 20 and length 1000, it will
+   refer to bytes 20..1019 inclusive.  If you then pass this segment to
+   evbuffer_add_file_segment and specify an offset of 20 and a length of
+   50, you will be adding bytes 40..99 inclusive.
+
+   @param buf the evbuffer to append to
+   @param seg the segment to add
+   @param offset the offset within the segment to start from
+   @param length the amount of data to add, or -1 to add it all.
+   @return 0 on success, -1 on failure.
+ */
+int evbuffer_add_file_segment(struct evbuffer *buf,
+    struct evbuffer_file_segment *seg, ev_off_t offset, ev_off_t length);
 
 /**
   Append a formatted string to the end of an evbuffer.

==== sntp/libevent/include/event2/event.h ====
2011-04-14 19:55:06+00:00, davehart at shiny.ad.hartbrothers.com +13 -3
  libevent 2.1 (prerelease git head bfdda26534ea66b847760720260a4b4d8fcefe58)

--- 1.1/sntp/libevent/include/event2/event.h	2011-01-20 03:02:55 -05:00
+++ 1.1.1.1/sntp/libevent/include/event2/event.h	2011-04-14 15:55:06 -04:00
@@ -107,6 +107,10 @@ int event_reinit(struct event_base *base
 /**
   Threadsafe event dispatching loop.
 
+  This loop will run the event base until either there are no more added
+  events, or until something calls event_base_loopbreak() or
+  evenet_base_loopexit().
+
   @param eb the event_base structure returned by event_init()
   @see event_init(), event_dispatch()
  */
@@ -322,7 +326,7 @@ void event_set_fatal_callback(event_fata
 int event_base_set(struct event_base *, struct event *);
 
 /**
- event_loop() flags
+ event_base_loop() flags
  */
 /*@{*/
 /** Block until we have an active event, then exit once all active events
@@ -338,6 +342,11 @@ int event_base_set(struct event_base *, 
 
   This is a more flexible version of event_base_dispatch().
 
+  By default, this loop will run the event base until either there are no more
+  added events, or until something calls event_base_loopbreak() or
+  evenet_base_loopexit().  You can override this behavior with the 'flags'
+  argument.
+
   @param eb the event_base structure returned by event_init()
   @param flags any combination of EVLOOP_ONCE | EVLOOP_NONBLOCK
   @return 0 if successful, -1 if an error occurred, or 1 if no events were
@@ -748,8 +757,9 @@ const struct timeval *event_base_init_co
 
  Note that all memory returned from Libevent will be allocated by the
  replacement functions rather than by malloc() and realloc().  Thus, if you
- have replaced those functions, it may not be appropriate to free() memory
- that you get from Libevent.
+ have replaced those functions, it will not be appropriate to free() memory
+ that you get from Libevent.  Instead, you must use the free_fn replacement
+ that you provided.
 
  @param malloc_fn A replacement for malloc.
  @param realloc_fn A replacement for realloc

==== sntp/libevent/include/event2/http.h ====
2011-04-14 19:55:06+00:00, davehart at shiny.ad.hartbrothers.com +45 -3
  libevent 2.1 (prerelease git head bfdda26534ea66b847760720260a4b4d8fcefe58)

--- 1.1/sntp/libevent/include/event2/http.h	2011-01-20 03:02:55 -05:00
+++ 1.2/sntp/libevent/include/event2/http.h	2011-04-14 15:55:06 -04:00
@@ -154,7 +154,10 @@ struct evconnlistener *evhttp_bound_sock
  * This may be useful when a socket has been sent via file descriptor passing
  * and is no longer needed by the current process.
  *
- * This function does not close the socket.
+ * If you created this bound socket with evhttp_bind_socket_with_handle or
+ * evhttp_accept_socket_with_handle, this function closes the fd you provided.
+ * If you created this bound socket with evhttp_bind_listener, this function
+ * frees the listener you provided.
  *
  * \a bound_socket is an invalid pointer after this call returns.
  *
@@ -292,6 +295,14 @@ int evhttp_remove_server_alias(struct ev
  */
 void evhttp_set_timeout(struct evhttp *http, int timeout_in_secs);
 
+/**
+ * Set the timeout for an HTTP request.
+ *
+ * @param http an evhttp object
+ * @param tv the timeout, or NULL
+ */
+void evhttp_set_timeout_tv(struct evhttp *http, const struct timeval* tv);
+
 /* Request/Response functionality */
 
 /**
@@ -465,10 +476,15 @@ void evhttp_connection_set_local_address
 void evhttp_connection_set_local_port(struct evhttp_connection *evcon,
     ev_uint16_t port);
 
-/** Sets the timeout for events related to this connection */
+/** Sets the timeout in seconds for events related to this connection */
 void evhttp_connection_set_timeout(struct evhttp_connection *evcon,
     int timeout_in_secs);
 
+/** Sets the timeout for events related to this connection.  Takes a struct
+ * timeval. */
+void evhttp_connection_set_timeout_tv(struct evhttp_connection *evcon,
+    const struct timeval *tv);
+
 /** Sets the retry limit for this connection - -1 repeats indefinitely */
 void evhttp_connection_set_retries(struct evhttp_connection *evcon,
     int retry_max);
@@ -707,6 +723,12 @@ char *evhttp_htmlescape(const char *html
  */
 struct evhttp_uri *evhttp_uri_new(void);
 
+/**
+ * Changes the flags set on a given URI.  See EVHTTP_URI_* for
+ * a list of flags.
+ **/
+void evhttp_uri_set_flags(struct evhttp_uri *uri, unsigned flags);
+
 /** Return the scheme of an evhttp_uri, or NULL if there is no scheme has
  * been set and the evhttp_uri contains a Relative-Ref. */
 const char *evhttp_uri_get_scheme(const struct evhttp_uri *uri);
@@ -792,9 +814,29 @@ int evhttp_uri_set_fragment(struct evhtt
  * accepts all of them as valid.
  *
  * @param source_uri the request URI
+ * @param flags Zero or more EVHTTP_URI_* flags to affect the behavior
+ *              of the parser.
  * @return uri container to hold parsed data, or NULL if there is error
  * @see evhttp_uri_free()
  */
+struct evhttp_uri *evhttp_uri_parse_with_flags(const char *source_uri,
+    unsigned flags);
+
+/** Tolerate URIs that do not conform to RFC3986.
+ *
+ * Unfortunately, some HTTP clients generate URIs that, according to RFC3986,
+ * are not conformant URIs.  If you need to support these URIs, you can
+ * do so by passing this flag to evhttp_uri_parse_with_flags.
+ *
+ * Currently, these changes are:
+ * <ul>
+ *   <li> Nonconformant URIs are allowed to contain otherwise unreasonable
+ *        characters in their path, query, and fragment components.
+ * </ul>
+ */
+#define EVHTTP_URI_NONCONFORMANT 0x01
+
+/** Alias for evhttp_uri_parse_with_flags(source_uri, 0) */
 struct evhttp_uri *evhttp_uri_parse(const char *source_uri);
 
 /**
@@ -817,7 +859,7 @@ void evhttp_uri_free(struct evhttp_uri *
  * @param buf destination buffer
  * @param limit destination buffer size
  * @return an joined uri as string or NULL on error
-   @see evhttp_uri_parse()
+ * @see evhttp_uri_parse()
  */
 char *evhttp_uri_join(struct evhttp_uri *uri, char *buf, size_t limit);
 

==== sntp/libevent/ipv6-internal.h ====
2011-04-14 19:55:05+00:00, davehart at shiny.ad.hartbrothers.com +12 -1
  libevent 2.1 (prerelease git head bfdda26534ea66b847760720260a4b4d8fcefe58)

--- 1.1/sntp/libevent/ipv6-internal.h	2011-01-20 03:02:54 -05:00
+++ 1.1.1.1/sntp/libevent/ipv6-internal.h	2011-04-14 15:55:05 -04:00
@@ -30,11 +30,13 @@
 #ifndef _EVENT_IPV6_INTERNAL_H
 #define _EVENT_IPV6_INTERNAL_H
 
+#include "event2/event-config.h"
+#include "evconfig-private.h"
+
 #include <sys/types.h>
 #ifdef _EVENT_HAVE_SYS_SOCKET_H
 #include <sys/socket.h>
 #endif
-#include "event2/event-config.h"
 #include "event2/util.h"
 
 #ifdef __cplusplus
@@ -59,10 +61,19 @@ typedef int sa_family_t;
 
 #ifndef _EVENT_HAVE_STRUCT_SOCKADDR_IN6
 struct sockaddr_in6 {
+	/* This will fail if we find a struct sockaddr that doesn't have
+	 * sa_family as the first element. */
 	sa_family_t sin6_family;
 	ev_uint16_t sin6_port;
 	struct in6_addr sin6_addr;
 };
+#endif
+
+#ifndef AF_INET6
+#define AF_INET6 3333
+#endif
+#ifndef PF_INET6
+#define PF_INET6 AF_INET6
 #endif
 
 #ifdef __cplusplus

==== sntp/libevent/kqueue.c ====
2011-04-14 19:55:05+00:00, davehart at shiny.ad.hartbrothers.com +1 -2
  libevent 2.1 (prerelease git head bfdda26534ea66b847760720260a4b4d8fcefe58)

--- 1.1/sntp/libevent/kqueue.c	2011-01-20 03:02:54 -05:00
+++ 1.2/sntp/libevent/kqueue.c	2011-04-14 15:55:05 -04:00
@@ -27,8 +27,7 @@
  * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 #include "event2/event-config.h"
-
-#define _GNU_SOURCE
+#include "evconfig-private.h"
 
 #include <sys/types.h>
 #ifdef _EVENT_HAVE_SYS_TIME_H

==== sntp/libevent/listener.c ====
2011-04-14 19:55:05+00:00, davehart at shiny.ad.hartbrothers.com +3 -2
  libevent 2.1 (prerelease git head bfdda26534ea66b847760720260a4b4d8fcefe58)

--- 1.1/sntp/libevent/listener.c	2011-01-20 03:02:54 -05:00
+++ 1.2/sntp/libevent/listener.c	2011-04-14 15:55:05 -04:00
@@ -24,9 +24,10 @@
  * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
-#include <sys/types.h>
-
 #include "event2/event-config.h"
+#include "evconfig-private.h"
+
+#include <sys/types.h>
 
 #ifdef WIN32
 #include <winsock2.h>

==== sntp/libevent/log.c ====
2011-04-14 19:55:05+00:00, davehart at shiny.ad.hartbrothers.com +1 -0
  libevent 2.1 (prerelease git head bfdda26534ea66b847760720260a4b4d8fcefe58)

--- 1.1/sntp/libevent/log.c	2011-01-20 03:02:54 -05:00
+++ 1.2/sntp/libevent/log.c	2011-04-14 15:55:05 -04:00
@@ -38,6 +38,7 @@
  */
 
 #include "event2/event-config.h"
+#include "evconfig-private.h"
 
 #ifdef WIN32
 #include <winsock2.h>

==== sntp/libevent/minheap-internal.h ====
2011-04-14 19:55:06+00:00, davehart at shiny.ad.hartbrothers.com +1 -0
  libevent 2.1 (prerelease git head bfdda26534ea66b847760720260a4b4d8fcefe58)

--- 1.1/sntp/libevent/minheap-internal.h	2011-01-20 03:02:54 -05:00
+++ 1.2/sntp/libevent/minheap-internal.h	2011-04-14 15:55:06 -04:00
@@ -29,6 +29,7 @@
 #define _MIN_HEAP_H_
 
 #include "event2/event-config.h"
+#include "evconfig-private.h"
 #include "event2/event.h"
 #include "event2/event_struct.h"
 #include "event2/util.h"

==== sntp/libevent/poll.c ====
2011-04-14 19:55:06+00:00, davehart at shiny.ad.hartbrothers.com +1 -0
  libevent 2.1 (prerelease git head bfdda26534ea66b847760720260a4b4d8fcefe58)

--- 1.1/sntp/libevent/poll.c	2011-01-20 03:02:54 -05:00
+++ 1.2/sntp/libevent/poll.c	2011-04-14 15:55:06 -04:00
@@ -27,6 +27,7 @@
  * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 #include "event2/event-config.h"
+#include "evconfig-private.h"
 
 #include <sys/types.h>
 #ifdef _EVENT_HAVE_SYS_TIME_H

==== sntp/libevent/sample/Makefile.am ====
2011-04-14 19:55:06+00:00, davehart at shiny.ad.hartbrothers.com +1 -1
  libevent 2.1 (prerelease git head bfdda26534ea66b847760720260a4b4d8fcefe58)

--- 1.1/sntp/libevent/sample/Makefile.am	2011-01-20 03:02:55 -05:00
+++ 1.1.1.1/sntp/libevent/sample/Makefile.am	2011-04-14 15:55:06 -04:00
@@ -1,6 +1,6 @@
 AUTOMAKE_OPTIONS = foreign no-dependencies
 
-LDADD = ../libevent.la
+LDADD = $(LIBEVENT_GC_SECTIONS) ../libevent.la
 AM_CFLAGS = -I$(top_srcdir) -I$(top_srcdir)/compat -I$(top_srcdir)/include -I../include
 
 noinst_PROGRAMS = event-test time-test signal-test dns-example hello-world http-server

==== sntp/libevent/sample/dns-example.c ====
2011-04-14 19:55:06+00:00, davehart at shiny.ad.hartbrothers.com +3 -0
  libevent 2.1 (prerelease git head bfdda26534ea66b847760720260a4b4d8fcefe58)

--- 1.1/sntp/libevent/sample/dns-example.c	2011-01-20 03:02:55 -05:00
+++ 1.1.1.1/sntp/libevent/sample/dns-example.c	2011-04-14 15:55:06 -04:00
@@ -7,6 +7,9 @@
 
 #include <event2/event-config.h>
 
+/* Compatibility for possible missing IPv6 declarations */
+#include "../ipv6-internal.h"
+
 #include <sys/types.h>
 
 #ifdef WIN32

==== sntp/libevent/sample/hello-world.c ====
2011-04-14 19:55:07+00:00, davehart at shiny.ad.hartbrothers.com +3 -0
  libevent 2.1 (prerelease git head bfdda26534ea66b847760720260a4b4d8fcefe58)

--- 1.1/sntp/libevent/sample/hello-world.c	2011-01-20 03:02:56 -05:00
+++ 1.1.1.1/sntp/libevent/sample/hello-world.c	2011-04-14 15:55:07 -04:00
@@ -13,6 +13,9 @@
 #include <signal.h>
 #ifndef WIN32
 #include <netinet/in.h>
+# ifdef _XOPEN_SOURCE_EXTENDED
+#  include <arpa/inet.h>
+# endif
 #include <sys/socket.h>
 #endif
 

==== sntp/libevent/sample/http-server.c ====
2011-04-14 19:55:07+00:00, davehart at shiny.ad.hartbrothers.com +6 -0
  libevent 2.1 (prerelease git head bfdda26534ea66b847760720260a4b4d8fcefe58)

--- 1.1/sntp/libevent/sample/http-server.c	2011-01-20 03:02:56 -05:00
+++ 1.1.1.1/sntp/libevent/sample/http-server.c	2011-04-14 15:55:07 -04:00
@@ -36,7 +36,13 @@
 
 #ifdef _EVENT_HAVE_NETINET_IN_H
 #include <netinet/in.h>
+# ifdef _XOPEN_SOURCE_EXTENDED
+#  include <arpa/inet.h>
+# endif
 #endif
+
+/* Compatibility for possible missing IPv6 declarations */
+#include "../util-internal.h"
 
 #ifdef WIN32
 #define stat _stat

==== sntp/libevent/select.c ====
2011-04-14 19:55:06+00:00, davehart at shiny.ad.hartbrothers.com +28 -9
  libevent 2.1 (prerelease git head bfdda26534ea66b847760720260a4b4d8fcefe58)

--- 1.1/sntp/libevent/select.c	2011-01-20 03:02:54 -05:00
+++ 1.1.1.1/sntp/libevent/select.c	2011-04-14 15:55:06 -04:00
@@ -27,6 +27,7 @@
  * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 #include "event2/event-config.h"
+#include "evconfig-private.h"
 
 #include <sys/types.h>
 #ifdef _EVENT_HAVE_SYS_TIME_H
@@ -90,6 +91,7 @@ const struct eventop selectops = {
 };
 
 static int select_resize(struct selectop *sop, int fdsz);
+static void select_free_selectop(struct selectop *sop);
 
 static void *
 select_init(struct event_base *base)
@@ -99,7 +101,10 @@ select_init(struct event_base *base)
 	if (!(sop = mm_calloc(1, sizeof(struct selectop))))
 		return (NULL);
 
-	select_resize(sop, howmany(32 + 1, NFDBITS)*sizeof(fd_mask));
+	if (select_resize(sop, howmany(32 + 1, NFDBITS)*sizeof(fd_mask))) {
+		select_free_selectop(sop);
+		return (NULL);
+	}
 
 	evsig_init(base);
 
@@ -128,11 +133,14 @@ select_dispatch(struct event_base *base,
 		size_t sz = sop->event_fdsz;
 		if (!(readset_out = mm_realloc(sop->event_readset_out, sz)))
 			return (-1);
+		sop->event_readset_out = readset_out;
 		if (!(writeset_out = mm_realloc(sop->event_writeset_out, sz))) {
-			mm_free(readset_out);
+			/* We don't free readset_out here, since it was
+			 * already successfully reallocated. The next time
+			 * we call select_dispatch, the realloc will be a
+			 * no-op. */
 			return (-1);
 		}
-		sop->event_readset_out = readset_out;
 		sop->event_writeset_out = writeset_out;
 		sop->resize_out_sets = 0;
 	}
@@ -185,7 +193,6 @@ select_dispatch(struct event_base *base,
 	return (0);
 }
 
-
 static int
 select_resize(struct selectop *sop, int fdsz)
 {
@@ -198,8 +205,15 @@ select_resize(struct selectop *sop, int 
 	if ((readset_in = mm_realloc(sop->event_readset_in, fdsz)) == NULL)
 		goto error;
 	sop->event_readset_in = readset_in;
-	if ((writeset_in = mm_realloc(sop->event_writeset_in, fdsz)) == NULL)
+	if ((writeset_in = mm_realloc(sop->event_writeset_in, fdsz)) == NULL) {
+		/* Note that this will leave event_readset_in expanded.
+		 * That's okay; we wouldn't want to free it, since that would
+		 * change the semantics of select_resize from "expand the
+		 * readset_in and writeset_in, or return -1" to "expand the
+		 * *set_in members, or trash them and return -1."
+		 */
 		goto error;
+	}
 	sop->event_writeset_in = writeset_in;
 	sop->resize_out_sets = 1;
 
@@ -292,11 +306,8 @@ select_del(struct event_base *base, int 
 }
 
 static void
-select_dealloc(struct event_base *base)
+select_free_selectop(struct selectop *sop)
 {
-	struct selectop *sop = base->evbase;
-
-	evsig_dealloc(base);
 	if (sop->event_readset_in)
 		mm_free(sop->event_readset_in);
 	if (sop->event_writeset_in)
@@ -308,4 +319,12 @@ select_dealloc(struct event_base *base)
 
 	memset(sop, 0, sizeof(struct selectop));
 	mm_free(sop);
+}
+
+static void
+select_dealloc(struct event_base *base)
+{
+	evsig_dealloc(base);
+
+	select_free_selectop(base->evbase);
 }

==== sntp/libevent/signal.c ====
2011-04-14 19:55:06+00:00, davehart at shiny.ad.hartbrothers.com +1 -0
  libevent 2.1 (prerelease git head bfdda26534ea66b847760720260a4b4d8fcefe58)

--- 1.1/sntp/libevent/signal.c	2011-01-20 03:02:54 -05:00
+++ 1.2/sntp/libevent/signal.c	2011-04-14 15:55:06 -04:00
@@ -27,6 +27,7 @@
  * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 #include "event2/event-config.h"
+#include "evconfig-private.h"
 
 #ifdef WIN32
 #define WIN32_LEAN_AND_MEAN

==== sntp/libevent/strlcpy-internal.h ====
2011-04-14 19:55:06+00:00, davehart at shiny.ad.hartbrothers.com +1 -0
  libevent 2.1 (prerelease git head bfdda26534ea66b847760720260a4b4d8fcefe58)

--- 1.1/sntp/libevent/strlcpy-internal.h	2011-01-20 03:02:54 -05:00
+++ 1.2/sntp/libevent/strlcpy-internal.h	2011-04-14 15:55:06 -04:00
@@ -6,6 +6,7 @@ extern "C" {
 #endif
 
 #include "event2/event-config.h"
+#include "evconfig-private.h"
 
 #ifndef _EVENT_HAVE_STRLCPY
 #include <string.h>

==== sntp/libevent/strlcpy.c ====
2011-04-14 19:55:06+00:00, davehart at shiny.ad.hartbrothers.com +3 -2
  libevent 2.1 (prerelease git head bfdda26534ea66b847760720260a4b4d8fcefe58)

--- 1.1/sntp/libevent/strlcpy.c	2011-01-20 03:02:54 -05:00
+++ 1.2/sntp/libevent/strlcpy.c	2011-04-14 15:55:06 -04:00
@@ -31,9 +31,10 @@
 static char *rcsid = "$OpenBSD: strlcpy.c,v 1.5 2001/05/13 15:40:16 deraadt Exp $";
 #endif /* LIBC_SCCS and not lint */
 
-#include <sys/types.h>
-
 #include "event2/event-config.h"
+#include "evconfig-private.h"
+
+#include <sys/types.h>
 
 #ifndef _EVENT_HAVE_STRLCPY
 #include "strlcpy-internal.h"

==== sntp/libevent/test/Makefile.am ====
2011-04-14 19:55:07+00:00, davehart at shiny.ad.hartbrothers.com +14 -9
  libevent 2.1 (prerelease git head bfdda26534ea66b847760720260a4b4d8fcefe58)

--- 1.1/sntp/libevent/test/Makefile.am	2011-01-20 03:02:56 -05:00
+++ 1.1.1.1/sntp/libevent/test/Makefile.am	2011-04-14 15:55:07 -04:00
@@ -1,17 +1,22 @@
 AUTOMAKE_OPTIONS = foreign
 
-AM_CFLAGS = -I$(top_srcdir) -I$(top_srcdir)/compat -I$(top_srcdir)/include -I../include -DTINYTEST_LOCAL
+AM_CPPFLAGS = -I$(top_srcdir) -I$(top_srcdir)/compat -I$(top_srcdir)/include -I../include -DTINYTEST_LOCAL
 
 EXTRA_DIST = regress.rpc regress.gen.h regress.gen.c test.sh
 
-noinst_PROGRAMS = test-init test-eof test-weof test-time regress \
+noinst_PROGRAMS = test-init test-eof test-weof test-time @CHECK_REGRESS@ \
 	bench bench_cascade bench_http bench_httpclient test-ratelim \
 	test-changelist
+EXTRA_PROGRAMS = regress
 noinst_HEADERS = tinytest.h tinytest_macros.h regress.h tinytest_local.h
 
 TESTS = $(top_srcdir)/test/test.sh
 
-BUILT_SOURCES = regress.gen.c regress.gen.h
+BUILT_SOURCES =
+if BUILD_REGRESS
+BUILT_SOURCES += regress.gen.c regress.gen.h
+endif
+
 test_init_SOURCES = test-init.c
 test_init_LDADD = ../libevent_core.la
 test_eof_SOURCES = test-eof.c
@@ -45,8 +50,8 @@ if BUILD_WIN32
 regress_SOURCES += regress_iocp.c
 endif
 
-regress_LDADD = ../libevent.la $(PTHREAD_LIBS) $(ZLIB_LIBS)
-regress_CFLAGS = -I$(top_srcdir) -I$(top_srcdir)/compat \
+regress_LDADD = $(LIBEVENT_GC_SECTIONS) ../libevent.la $(PTHREAD_LIBS) $(ZLIB_LIBS)
+regress_CPPFLAGS = -I$(top_srcdir) -I$(top_srcdir)/compat \
 	-I$(top_srcdir)/include -I../include $(PTHREAD_CFLAGS) $(ZLIB_CFLAGS)
 regress_LDFLAGS = $(PTHREAD_CFLAGS)
 
@@ -56,13 +61,13 @@ regress_LDADD += ../libevent_openssl.la 
 endif
 
 bench_SOURCES = bench.c
-bench_LDADD = ../libevent.la
+bench_LDADD = $(LIBEVENT_GC_SECTIONS) ../libevent.la
 bench_cascade_SOURCES = bench_cascade.c
-bench_cascade_LDADD = ../libevent.la
+bench_cascade_LDADD = $(LIBEVENT_GC_SECTIONS) ../libevent.la
 bench_http_SOURCES = bench_http.c
-bench_http_LDADD = ../libevent.la
+bench_http_LDADD = $(LIBEVENT_GC_SECTIONS) ../libevent.la
 bench_httpclient_SOURCES = bench_httpclient.c
-bench_httpclient_LDADD = ../libevent_core.la
+bench_httpclient_LDADD = $(LIBEVENT_GC_SECTIONS) ../libevent_core.la
 
 regress.gen.c regress.gen.h: regress.rpc $(top_srcdir)/event_rpcgen.py
 	$(top_srcdir)/event_rpcgen.py $(srcdir)/regress.rpc || echo "No Python installed"

==== sntp/libevent/test/bench_httpclient.c ====
2011-04-14 19:55:07+00:00, davehart at shiny.ad.hartbrothers.com +3 -0
  libevent 2.1 (prerelease git head bfdda26534ea66b847760720260a4b4d8fcefe58)

--- 1.1/sntp/libevent/test/bench_httpclient.c	2011-01-20 03:02:56 -05:00
+++ 1.1.1.1/sntp/libevent/test/bench_httpclient.c	2011-04-14 15:55:07 -04:00
@@ -31,6 +31,9 @@
 #else
 #include <sys/socket.h>
 #include <netinet/in.h>
+# ifdef _XOPEN_SOURCE_EXTENDED
+#  include <arpa/inet.h>
+# endif
 #endif
 #include <stdlib.h>
 #include <errno.h>

==== sntp/libevent/test/regress.h ====
2011-04-14 19:55:07+00:00, davehart at shiny.ad.hartbrothers.com +1 -1
  libevent 2.1 (prerelease git head bfdda26534ea66b847760720260a4b4d8fcefe58)

--- 1.1/sntp/libevent/test/regress.h	2011-01-20 03:02:56 -05:00
+++ 1.2/sntp/libevent/test/regress.h	2011-04-14 15:55:07 -04:00
@@ -62,7 +62,7 @@ extern int called;
 extern struct event_base *global_base;
 extern int in_legacy_test_wrapper;
 
-int regress_make_tmpfile(const void *data, size_t datalen);
+int regress_make_tmpfile(const void *data, size_t datalen, char **filename_out);
 
 struct basic_test_data {
 	struct event_base *base;

==== sntp/libevent/test/regress_buffer.c ====
2011-04-14 19:55:07+00:00, davehart at shiny.ad.hartbrothers.com +219 -46
  libevent 2.1 (prerelease git head bfdda26534ea66b847760720260a4b4d8fcefe58)

--- 1.1/sntp/libevent/test/regress_buffer.c	2011-01-20 03:02:56 -05:00
+++ 1.2/sntp/libevent/test/regress_buffer.c	2011-04-14 15:55:07 -04:00
@@ -58,6 +58,7 @@
 
 #include "evbuffer-internal.h"
 #include "log-internal.h"
+#include "util-internal.h"
 
 #include "regress.h"
 
@@ -583,41 +584,173 @@ test_evbuffer_reference(void *ptr)
 	evbuffer_free(src);
 }
 
-int _evbuffer_testing_use_sendfile(void);
-int _evbuffer_testing_use_mmap(void);
-int _evbuffer_testing_use_linear_file_access(void);
+static struct event_base *addfile_test_event_base = NULL;
+static int addfile_test_done_writing = 0;
+static int addfile_test_total_written = 0;
+static int addfile_test_total_read = 0;
+
+static void
+addfile_test_writecb(evutil_socket_t fd, short what, void *arg)
+{
+	struct evbuffer *b = arg;
+	int r;
+	evbuffer_validate(b);
+	while (evbuffer_get_length(b)) {
+		r = evbuffer_write(b, fd);
+		if (r > 0) {
+			addfile_test_total_written += r;
+			TT_BLATHER(("Wrote %d/%d bytes", r, addfile_test_total_written));
+		} else {
+			int e = evutil_socket_geterror(fd);
+			if (EVUTIL_ERR_RW_RETRIABLE(e))
+				return;
+			tt_fail_perror("write");
+			event_base_loopexit(addfile_test_event_base,NULL);
+		}
+		evbuffer_validate(b);
+	}
+	addfile_test_done_writing = 1;
+	return;
+end:
+	event_base_loopexit(addfile_test_event_base,NULL);
+}
+
+static void
+addfile_test_readcb(evutil_socket_t fd, short what, void *arg)
+{
+	struct evbuffer *b = arg;
+	int e, r = 0;
+	do {
+		int r = evbuffer_read(b, fd, 1024);
+		if (r > 0) {
+			addfile_test_total_read += r;
+			TT_BLATHER(("Read %d/%d bytes", r, addfile_test_total_read));
+		}
+	} while (r > 0);
+	if (r < 0) {
+		e = evutil_socket_geterror(fd);
+		if (! EVUTIL_ERR_RW_RETRIABLE(e)) {
+			tt_fail_perror("read");
+			event_base_loopexit(addfile_test_event_base,NULL);
+		}
+	}
+	if (addfile_test_done_writing &&
+	    addfile_test_total_read >= addfile_test_total_written) {
+		event_base_loopexit(addfile_test_event_base,NULL);
+	}
+}
 
 static void
 test_evbuffer_add_file(void *ptr)
 {
-	const char *impl = ptr;
-	struct evbuffer *src = evbuffer_new();
-	const char *data = "this is what we add as file system data.";
-	size_t datalen;
+	struct basic_test_data *testdata = ptr;
+	const char *impl = testdata->setup_data;
+	struct evbuffer *src = evbuffer_new(), *dest = evbuffer_new();
+	char *tmpfilename = NULL;
+	char *data = NULL;
+	const char *expect_data;
+	size_t datalen, expect_len;
 	const char *compare;
 	int fd = -1;
+	int want_type = 0;
+	unsigned flags = 0;
+	int use_segment = 1, use_bigfile = 0, map_from_offset = 0,
+	    view_from_offset = 0;
+	struct evbuffer_file_segment *seg = NULL;
+	ev_off_t starting_offset = 0, mapping_len = -1;
+	ev_off_t segment_offset = 0, segment_len = -1;
+	struct event *rev=NULL, *wev=NULL;
+	struct event_base *base = testdata->base;
 	evutil_socket_t pair[2] = {-1, -1};
-	int r=0, n_written=0;
-
-	/* Add a test for a big file. XXXX */
 
+	/* This test is highly parameterized based on substrings of its
+	 * argument.  The strings are: */
 	tt_assert(impl);
-	if (!strcmp(impl, "sendfile")) {
-		if (!_evbuffer_testing_use_sendfile())
-			tt_skip();
-		TT_BLATHER(("Using sendfile-based implementaion"));
-	} else if (!strcmp(impl, "mmap")) {
-		if (!_evbuffer_testing_use_mmap())
-			tt_skip();
-		TT_BLATHER(("Using mmap-based implementaion"));
-	} else if (!strcmp(impl, "linear")) {
-		if (!_evbuffer_testing_use_linear_file_access())
-			tt_skip();
-		TT_BLATHER(("Using read-based implementaion"));
+	if (strstr(impl, "nosegment")) {
+		/* If nosegment is set, use the older evbuffer_add_file
+		 * interface */
+		use_segment = 0;
+	}
+	if (strstr(impl, "bigfile")) {
+		/* If bigfile is set, use a 512K file.  Else use a smaller
+		 * one. */
+		use_bigfile = 1;
+	}
+	if (strstr(impl, "map_offset")) {
+		/* If map_offset is set, we build the file segment starting
+		 * from a point other than byte 0 and ending somewhere other
+		 * than the last byte.  Otherwise we map the whole thing */
+		map_from_offset = 1;
+	}
+	if (strstr(impl, "offset_in_segment")) {
+		/* If offset_in_segment is set, we add a subsection of the
+		 * file semgment starting from a point other than byte 0 of
+		 * the segment. */
+		view_from_offset = 1;
+	}
+	if (strstr(impl, "sendfile")) {
+		/* If sendfile is set, we try to use a sendfile/splice style
+		 * backend. */
+		flags = EVBUF_FS_DISABLE_MMAP;
+		want_type = EVBUF_FS_SENDFILE;
+	} else if (strstr(impl, "mmap")) {
+		/* If sendfile is set, we try to use a mmap/CreateFileMapping
+		 * style backend. */
+		flags = EVBUF_FS_DISABLE_SENDFILE;
+		want_type = EVBUF_FS_MMAP;
+	} else if (strstr(impl, "linear")) {
+		/* If linear is set, we try to use a read-the-whole-thing
+		 * backend. */
+		flags = EVBUF_FS_DISABLE_SENDFILE|EVBUF_FS_DISABLE_MMAP;
+		want_type = EVBUF_FS_IO;
+	} else if (strstr(impl, "default")) {
+		/* The caller doesn't care which backend we use. */
+		;
 	} else {
+		/* The caller must choose a backend. */
 		TT_DIE(("Didn't recognize the implementation"));
 	}
 
+	if (use_bigfile) {
+		unsigned int i;
+		datalen = 1024*512;
+		data = malloc(1024*512);
+		tt_assert(data);
+		for (i = 0; i < datalen; ++i)
+			data[i] = _evutil_weakrand();
+	} else {
+		data = strdup("here is a relatively small string.");
+		tt_assert(data);
+		datalen = strlen(data);
+	}
+
+	fd = regress_make_tmpfile(data, datalen, &tmpfilename);
+
+	if (map_from_offset) {
+		starting_offset = datalen/4 + 1;
+		mapping_len = datalen / 2 - 1;
+		expect_data = data + starting_offset;
+		expect_len = mapping_len;
+	} else {
+		expect_data = data;
+		expect_len = datalen;
+	}
+	if (view_from_offset) {
+		tt_assert(use_segment); /* Can't do this with add_file*/
+		segment_offset = expect_len / 3;
+		segment_len = expect_len / 2;
+		expect_data = expect_data + segment_offset;
+		expect_len = segment_len;
+	}
+
+	if (use_segment) {
+		seg = evbuffer_file_segment_new(fd, starting_offset,
+		    mapping_len, flags);
+		tt_assert(seg);
+		if ((int)seg->type != (int)want_type)
+			tt_skip();
+	}
+
 #if defined(_EVENT_HAVE_SENDFILE) && defined(__sun__) && defined(__svr4__)
 	/* We need to use a pair of AF_INET sockets, since Solaris
 	   doesn't support sendfile() over AF_UNIX. */
@@ -627,39 +760,62 @@ test_evbuffer_add_file(void *ptr)
 	if (evutil_socketpair(AF_UNIX, SOCK_STREAM, 0, pair) == -1)
 		tt_abort_msg("socketpair failed");
 #endif
-
-	datalen = strlen(data);
-	fd = regress_make_tmpfile(data, datalen);
+	evutil_make_socket_nonblocking(pair[0]);
+	evutil_make_socket_nonblocking(pair[1]);
 
 	tt_assert(fd != -1);
 
-	tt_assert(evbuffer_add_file(src, fd, 0, datalen) != -1);
+	if (use_segment) {
+		tt_assert(evbuffer_add_file_segment(src, seg,
+			segment_offset, segment_len)!=-1);
+	} else {
+		tt_assert(evbuffer_add_file(src, fd, starting_offset,
+			mapping_len) != -1);
+	}
 
 	evbuffer_validate(src);
 
-	while (evbuffer_get_length(src) &&
-	    (r = evbuffer_write(src, pair[0])) > 0) {
-		evbuffer_validate(src);
-		n_written += r;
-	}
-	tt_int_op(r, !=, -1);
-	tt_int_op(n_written, ==, datalen);
+	addfile_test_event_base = base;
+	wev = event_new(base, pair[0], EV_WRITE|EV_PERSIST,
+	    addfile_test_writecb, src);
+	rev = event_new(base, pair[1], EV_READ|EV_PERSIST,
+	    addfile_test_readcb, dest);
+
+	event_add(wev, NULL);
+	event_add(rev, NULL);
+	event_base_dispatch(base);
 
 	evbuffer_validate(src);
-	tt_int_op(evbuffer_read(src, pair[1], (int)strlen(data)), ==, datalen);
-	evbuffer_validate(src);
-	compare = (char *)evbuffer_pullup(src, datalen);
+	evbuffer_validate(dest);
+
+	tt_assert(addfile_test_done_writing);
+	tt_int_op(addfile_test_total_written, ==, expect_len);
+	tt_int_op(addfile_test_total_read, ==, expect_len);
+
+	compare = (char *)evbuffer_pullup(dest, expect_len);
 	tt_assert(compare != NULL);
-	if (memcmp(compare, data, datalen))
+	if (memcmp(compare, expect_data, expect_len)) {
 		tt_abort_msg("Data from add_file differs.");
+	}
 
-	evbuffer_validate(src);
+	evbuffer_validate(dest);
  end:
+	if (data)
+		free(data);
+	if (seg)
+		evbuffer_file_segment_free(seg);
+	if (src)
+		evbuffer_free(src);
+	if (dest)
+		evbuffer_free(dest);
 	if (pair[0] >= 0)
 		evutil_closesocket(pair[0]);
 	if (pair[1] >= 0)
 		evutil_closesocket(pair[1]);
-	evbuffer_free(src);
+	if (tmpfilename) {
+		unlink(tmpfilename);
+		free(tmpfilename);
+	}
 }
 
 #ifndef _EVENT_DISABLE_MM_REPLACEMENT
@@ -1555,13 +1711,30 @@ struct testcase_t evbuffer_testcases[] =
 	{ "peek", test_evbuffer_peek, 0, NULL, NULL },
 	{ "freeze_start", test_evbuffer_freeze, 0, &nil_setup, (void*)"start" },
 	{ "freeze_end", test_evbuffer_freeze, 0, &nil_setup, (void*)"end" },
-	/* TODO: need a temp file implementation for Windows */
-	{ "add_file_sendfile", test_evbuffer_add_file, TT_FORK, &nil_setup,
-	  (void*)"sendfile" },
-	{ "add_file_mmap", test_evbuffer_add_file, TT_FORK, &nil_setup,
-	  (void*)"mmap" },
-	{ "add_file_linear", test_evbuffer_add_file, TT_FORK, &nil_setup,
-	  (void*)"linear" },
+
+#define ADDFILE_TEST(name, parameters)					\
+	{ name, test_evbuffer_add_file, TT_FORK|TT_NEED_BASE,		\
+	  &basic_setup, (void*)(parameters) }
+
+#define ADDFILE_TEST_GROUP(name, parameters)			\
+	ADDFILE_TEST(name "_sendfile", "sendfile " parameters), \
+	ADDFILE_TEST(name "_mmap", "mmap " parameters),		\
+	ADDFILE_TEST(name "_linear", "linear " parameters)
+
+	ADDFILE_TEST_GROUP("add_file", ""),
+	ADDFILE_TEST("add_file_nosegment", "default nosegment"),
+
+	ADDFILE_TEST_GROUP("add_big_file", "bigfile"),
+	ADDFILE_TEST("add_big_file_nosegment", "default nosegment bigfile"),
+
+	ADDFILE_TEST_GROUP("add_file_offset", "bigfile map_offset"),
+	ADDFILE_TEST("add_file_offset_nosegment",
+	    "default nosegment bigfile map_offset"),
+
+	ADDFILE_TEST_GROUP("add_file_offset2", "bigfile offset_in_segment"),
+
+	ADDFILE_TEST_GROUP("add_file_offset3",
+	    "bigfile offset_in_segment map_offset"),
 
 	END_OF_TESTCASES
 };

==== sntp/libevent/test/regress_dns.c ====
2011-04-14 19:55:07+00:00, davehart at shiny.ad.hartbrothers.com +2 -0
  libevent 2.1 (prerelease git head bfdda26534ea66b847760720260a4b4d8fcefe58)

--- 1.1/sntp/libevent/test/regress_dns.c	2011-01-20 03:02:56 -05:00
+++ 1.1.1.1/sntp/libevent/test/regress_dns.c	2011-04-14 15:55:07 -04:00
@@ -71,6 +71,8 @@
 #include "regress.h"
 #include "regress_testutils.h"
 
+#include "../util-internal.h"
+
 static int dns_ok = 0;
 static int dns_got_cancel = 0;
 static int dns_err = 0;

==== sntp/libevent/test/regress_http.c ====
2011-04-14 19:55:07+00:00, davehart at shiny.ad.hartbrothers.com +62 -53
  libevent 2.1 (prerelease git head bfdda26534ea66b847760720260a4b4d8fcefe58)

--- 1.1/sntp/libevent/test/regress_http.c	2011-01-20 03:02:56 -05:00
+++ 1.1.1.1/sntp/libevent/test/regress_http.c	2011-04-14 15:55:07 -04:00
@@ -56,6 +56,7 @@
 #include "event2/http.h"
 #include "event2/buffer.h"
 #include "event2/bufferevent.h"
+#include "event2/util.h"
 #include "log-internal.h"
 #include "util-internal.h"
 #include "http-internal.h"
@@ -128,38 +129,23 @@ static evutil_socket_t
 http_connect(const char *address, u_short port)
 {
 	/* Stupid code for connecting */
-#ifdef WIN32
-	struct hostent *he;
-	struct sockaddr_in sin;
-#else
-	struct addrinfo ai, *aitop;
+	struct evutil_addrinfo ai, *aitop;
 	char strport[NI_MAXSERV];
-#endif
+
 	struct sockaddr *sa;
 	int slen;
 	evutil_socket_t fd;
 
-#ifdef WIN32
-	if (!(he = gethostbyname(address))) {
-		event_warn("gethostbyname");
-	}
-	memcpy(&sin.sin_addr, he->h_addr_list[0], he->h_length);
-	sin.sin_family = AF_INET;
-	sin.sin_port = htons(port);
-	slen = sizeof(struct sockaddr_in);
-	sa = (struct sockaddr*)&sin;
-#else
 	memset(&ai, 0, sizeof(ai));
 	ai.ai_family = AF_INET;
 	ai.ai_socktype = SOCK_STREAM;
 	evutil_snprintf(strport, sizeof(strport), "%d", port);
-	if (getaddrinfo(address, strport, &ai, &aitop) != 0) {
+	if (evutil_getaddrinfo(address, strport, &ai, &aitop) != 0) {
 		event_warn("getaddrinfo");
 		return (-1);
 	}
 	sa = aitop->ai_addr;
 	slen = aitop->ai_addrlen;
-#endif
 
 	fd = socket(AF_INET, SOCK_STREAM, 0);
 	if (fd == -1)
@@ -178,9 +164,7 @@ http_connect(const char *address, u_shor
 #endif
 	}
 
-#ifndef WIN32
-	freeaddrinfo(aitop);
-#endif
+	evutil_freeaddrinfo(aitop);
 
 	return (fd);
 }
@@ -2006,8 +1990,13 @@ end:
 static void
 http_parse_uri_test(void *ptr)
 {
+	const int nonconform = (ptr != NULL);
+	const unsigned parse_flags =
+	    nonconform ? EVHTTP_URI_NONCONFORMANT : 0;
 	struct evhttp_uri *uri = NULL;
 	char url_tmp[4096];
+#define URI_PARSE(uri) \
+	evhttp_uri_parse_with_flags((uri), parse_flags)
 
 #define TT_URI(want) do { 						\
 	char *ret = evhttp_uri_join(uri, url_tmp, sizeof(url_tmp));	\
@@ -2023,21 +2012,37 @@ http_parse_uri_test(void *ptr)
 
 	/* bad URIs: parsing */
 #define BAD(s) do {							\
-		if (evhttp_uri_parse(s) != NULL)			\
+		if (URI_PARSE(s) != NULL)				\
 			TT_FAIL(("Expected error parsing \"%s\"",s));	\
 	} while(0)
-	BAD("http://www.test.com/ why hello");
-	BAD("http://www.test.com/why-hello\x01");
-	BAD("http://www.test.com/why-hello?\x01");
-	BAD("http://www.test.com/why-hello#\x01");
+	/* Nonconformant URIs we can parse: parsing */
+#define NCF(s) do {							\
+		uri = URI_PARSE(s);					\
+		if (uri != NULL && !nonconform) {			\
+			TT_FAIL(("Expected error parsing \"%s\"",s));	\
+		} else if (uri == NULL && nonconform) {			\
+			TT_FAIL(("Couldn't parse nonconformant URI \"%s\"", \
+				s));					\
+		}							\
+		if (uri) {						\
+			tt_want(evhttp_uri_join(uri, url_tmp,		\
+				sizeof(url_tmp)));			\
+			evhttp_uri_free(uri);				\
+		}							\
+	} while(0)
+
+	NCF("http://www.test.com/ why hello");
+	NCF("http://www.test.com/why-hello\x01");
+	NCF("http://www.test.com/why-hello?\x01");
+	NCF("http://www.test.com/why-hello#\x01");
 	BAD("http://www.\x01.test.com/why-hello");
 	BAD("http://www.%7test.com/why-hello");
-	BAD("http://www.test.com/why-hell%7o");
+	NCF("http://www.test.com/why-hell%7o");
 	BAD("h%3ttp://www.test.com/why-hello");
-	BAD("http://www.test.com/why-hello%7");
-	BAD("http://www.test.com/why-hell%7o");
-	BAD("http://www.test.com/foo?ba%r");
-	BAD("http://www.test.com/foo#ba%r");
+	NCF("http://www.test.com/why-hello%7");
+	NCF("http://www.test.com/why-hell%7o");
+	NCF("http://www.test.com/foo?ba%r");
+	NCF("http://www.test.com/foo#ba%r");
 	BAD("99:99/foo");
 	BAD("http://www.test.com:999x/");
 	BAD("http://www.test.com:x/");
@@ -2073,7 +2078,7 @@ http_parse_uri_test(void *ptr)
 	tt_want(evhttp_uri_join(uri, NULL, sizeof(url_tmp))==NULL);
 	tt_want(evhttp_uri_join(uri, url_tmp, 0)==NULL);
 	evhttp_uri_free(uri);
-	uri = evhttp_uri_parse("mailto:foo at bar");
+	uri = URI_PARSE("mailto:foo at bar");
 	tt_want(uri != NULL);
 	tt_want(evhttp_uri_get_host(uri) == NULL);
 	tt_want(evhttp_uri_get_userinfo(uri) == NULL);
@@ -2125,7 +2130,7 @@ http_parse_uri_test(void *ptr)
 	evhttp_uri_free(uri);
 
 	/* Valid parsing */
-	uri = evhttp_uri_parse("http://www.test.com/?q=t%33est");
+	uri = URI_PARSE("http://www.test.com/?q=t%33est");
 	tt_want(strcmp(evhttp_uri_get_scheme(uri), "http") == 0);
 	tt_want(strcmp(evhttp_uri_get_host(uri), "www.test.com") == 0);
 	tt_want(strcmp(evhttp_uri_get_path(uri), "/") == 0);
@@ -2136,7 +2141,7 @@ http_parse_uri_test(void *ptr)
 	TT_URI("http://www.test.com/?q=t%33est");
 	evhttp_uri_free(uri);
 
-	uri = evhttp_uri_parse("http://%77ww.test.com");
+	uri = URI_PARSE("http://%77ww.test.com");
 	tt_want(strcmp(evhttp_uri_get_scheme(uri), "http") == 0);
 	tt_want(strcmp(evhttp_uri_get_host(uri), "%77ww.test.com") == 0);
 	tt_want(strcmp(evhttp_uri_get_path(uri), "") == 0);
@@ -2147,7 +2152,7 @@ http_parse_uri_test(void *ptr)
 	TT_URI("http://%77ww.test.com");
 	evhttp_uri_free(uri);
 
-	uri = evhttp_uri_parse("http://www.test.com?q=test");
+	uri = URI_PARSE("http://www.test.com?q=test");
 	tt_want(strcmp(evhttp_uri_get_scheme(uri), "http") == 0);
 	tt_want(strcmp(evhttp_uri_get_host(uri), "www.test.com") == 0);
 	tt_want(strcmp(evhttp_uri_get_path(uri), "") == 0);
@@ -2158,7 +2163,7 @@ http_parse_uri_test(void *ptr)
 	TT_URI("http://www.test.com?q=test");
 	evhttp_uri_free(uri);
 
-	uri = evhttp_uri_parse("http://www.test.com#fragment");
+	uri = URI_PARSE("http://www.test.com#fragment");
 	tt_want(strcmp(evhttp_uri_get_scheme(uri), "http") == 0);
 	tt_want(strcmp(evhttp_uri_get_host(uri), "www.test.com") == 0);
 	tt_want(strcmp(evhttp_uri_get_path(uri), "") == 0);
@@ -2169,7 +2174,7 @@ http_parse_uri_test(void *ptr)
 	TT_URI("http://www.test.com#fragment");
 	evhttp_uri_free(uri);
 
-	uri = evhttp_uri_parse("http://8000/");
+	uri = URI_PARSE("http://8000/");
 	tt_want(strcmp(evhttp_uri_get_scheme(uri), "http") == 0);
 	tt_want(strcmp(evhttp_uri_get_host(uri), "8000") == 0);
 	tt_want(strcmp(evhttp_uri_get_path(uri), "/") == 0);
@@ -2180,7 +2185,7 @@ http_parse_uri_test(void *ptr)
 	TT_URI("http://8000/");
 	evhttp_uri_free(uri);
 
-	uri = evhttp_uri_parse("http://:8000/");
+	uri = URI_PARSE("http://:8000/");
 	tt_want(strcmp(evhttp_uri_get_scheme(uri), "http") == 0);
 	tt_want(strcmp(evhttp_uri_get_host(uri), "") == 0);
 	tt_want(strcmp(evhttp_uri_get_path(uri), "/") == 0);
@@ -2191,7 +2196,7 @@ http_parse_uri_test(void *ptr)
 	TT_URI("http://:8000/");
 	evhttp_uri_free(uri);
 
-	uri = evhttp_uri_parse("http://www.test.com:/"); /* empty port */
+	uri = URI_PARSE("http://www.test.com:/"); /* empty port */
 	tt_want(strcmp(evhttp_uri_get_scheme(uri), "http") == 0);
 	tt_want(strcmp(evhttp_uri_get_host(uri), "www.test.com") == 0);
 	tt_want_str_op(evhttp_uri_get_path(uri), ==, "/");
@@ -2202,7 +2207,7 @@ http_parse_uri_test(void *ptr)
 	TT_URI("http://www.test.com/");
 	evhttp_uri_free(uri);
 
-	uri = evhttp_uri_parse("http://www.test.com:"); /* empty port 2 */
+	uri = URI_PARSE("http://www.test.com:"); /* empty port 2 */
 	tt_want(strcmp(evhttp_uri_get_scheme(uri), "http") == 0);
 	tt_want(strcmp(evhttp_uri_get_host(uri), "www.test.com") == 0);
 	tt_want(strcmp(evhttp_uri_get_path(uri), "") == 0);
@@ -2213,7 +2218,7 @@ http_parse_uri_test(void *ptr)
 	TT_URI("http://www.test.com");
 	evhttp_uri_free(uri);
 
-	uri = evhttp_uri_parse("ftp://www.test.com/?q=test");
+	uri = URI_PARSE("ftp://www.test.com/?q=test");
 	tt_want(strcmp(evhttp_uri_get_scheme(uri), "ftp") == 0);
 	tt_want(strcmp(evhttp_uri_get_host(uri), "www.test.com") == 0);
 	tt_want(strcmp(evhttp_uri_get_path(uri), "/") == 0);
@@ -2224,7 +2229,7 @@ http_parse_uri_test(void *ptr)
 	TT_URI("ftp://www.test.com/?q=test");
 	evhttp_uri_free(uri);
 
-	uri = evhttp_uri_parse("ftp://[::1]:999/?q=test");
+	uri = URI_PARSE("ftp://[::1]:999/?q=test");
 	tt_want(strcmp(evhttp_uri_get_scheme(uri), "ftp") == 0);
 	tt_want(strcmp(evhttp_uri_get_host(uri), "[::1]") == 0);
 	tt_want(strcmp(evhttp_uri_get_path(uri), "/") == 0);
@@ -2235,7 +2240,7 @@ http_parse_uri_test(void *ptr)
 	TT_URI("ftp://[::1]:999/?q=test");
 	evhttp_uri_free(uri);
 
-	uri = evhttp_uri_parse("ftp://[ff00::127.0.0.1]/?q=test");
+	uri = URI_PARSE("ftp://[ff00::127.0.0.1]/?q=test");
 	tt_want(strcmp(evhttp_uri_get_scheme(uri), "ftp") == 0);
 	tt_want(strcmp(evhttp_uri_get_host(uri), "[ff00::127.0.0.1]") == 0);
 	tt_want(strcmp(evhttp_uri_get_path(uri), "/") == 0);
@@ -2246,7 +2251,7 @@ http_parse_uri_test(void *ptr)
 	TT_URI("ftp://[ff00::127.0.0.1]/?q=test");
 	evhttp_uri_free(uri);
 
-	uri = evhttp_uri_parse("ftp://[v99.not_(any:time)_soon]/?q=test");
+	uri = URI_PARSE("ftp://[v99.not_(any:time)_soon]/?q=test");
 	tt_want(strcmp(evhttp_uri_get_scheme(uri), "ftp") == 0);
 	tt_want(strcmp(evhttp_uri_get_host(uri), "[v99.not_(any:time)_soon]") == 0);
 	tt_want(strcmp(evhttp_uri_get_path(uri), "/") == 0);
@@ -2257,7 +2262,7 @@ http_parse_uri_test(void *ptr)
 	TT_URI("ftp://[v99.not_(any:time)_soon]/?q=test");
 	evhttp_uri_free(uri);
 
-	uri = evhttp_uri_parse("scheme://user:pass@foo.com:42/?q=test&s=some+thing#fragment");
+	uri = URI_PARSE("scheme://user:pass@foo.com:42/?q=test&s=some+thing#fragment");
 	tt_want(strcmp(evhttp_uri_get_scheme(uri), "scheme") == 0);
 	tt_want(strcmp(evhttp_uri_get_userinfo(uri), "user:pass") == 0);
 	tt_want(strcmp(evhttp_uri_get_host(uri), "foo.com") == 0);
@@ -2268,7 +2273,7 @@ http_parse_uri_test(void *ptr)
 	TT_URI("scheme://user:pass@foo.com:42/?q=test&s=some+thing#fragment");
 	evhttp_uri_free(uri);
 
-	uri = evhttp_uri_parse("scheme://user@foo.com/#fragment");
+	uri = URI_PARSE("scheme://user@foo.com/#fragment");
 	tt_want(strcmp(evhttp_uri_get_scheme(uri), "scheme") == 0);
 	tt_want(strcmp(evhttp_uri_get_userinfo(uri), "user") == 0);
 	tt_want(strcmp(evhttp_uri_get_host(uri), "foo.com") == 0);
@@ -2279,7 +2284,7 @@ http_parse_uri_test(void *ptr)
 	TT_URI("scheme://user@foo.com/#fragment");
 	evhttp_uri_free(uri);
 
-	uri = evhttp_uri_parse("scheme://%75ser@foo.com/#frag@ment");
+	uri = URI_PARSE("scheme://%75ser@foo.com/#frag@ment");
 	tt_want(strcmp(evhttp_uri_get_scheme(uri), "scheme") == 0);
 	tt_want(strcmp(evhttp_uri_get_userinfo(uri), "%75ser") == 0);
 	tt_want(strcmp(evhttp_uri_get_host(uri), "foo.com") == 0);
@@ -2290,7 +2295,7 @@ http_parse_uri_test(void *ptr)
 	TT_URI("scheme://%75ser@foo.com/#frag@ment");
 	evhttp_uri_free(uri);
 
-	uri = evhttp_uri_parse("file:///some/path/to/the/file");
+	uri = URI_PARSE("file:///some/path/to/the/file");
 	tt_want(strcmp(evhttp_uri_get_scheme(uri), "file") == 0);
 	tt_want(evhttp_uri_get_userinfo(uri) == NULL);
 	tt_want(strcmp(evhttp_uri_get_host(uri), "") == 0);
@@ -2301,7 +2306,7 @@ http_parse_uri_test(void *ptr)
 	TT_URI("file:///some/path/to/the/file");
 	evhttp_uri_free(uri);
 
-	uri = evhttp_uri_parse("///some/path/to/the-file");
+	uri = URI_PARSE("///some/path/to/the-file");
 	tt_want(uri != NULL);
 	tt_want(evhttp_uri_get_scheme(uri) == NULL);
 	tt_want(evhttp_uri_get_userinfo(uri) == NULL);
@@ -2313,7 +2318,7 @@ http_parse_uri_test(void *ptr)
 	TT_URI("///some/path/to/the-file");
 	evhttp_uri_free(uri);
 
-	uri = evhttp_uri_parse("/s:ome/path/to/the-file?q=99#fred");
+	uri = URI_PARSE("/s:ome/path/to/the-file?q=99#fred");
 	tt_want(uri != NULL);
 	tt_want(evhttp_uri_get_scheme(uri) == NULL);
 	tt_want(evhttp_uri_get_userinfo(uri) == NULL);
@@ -2325,7 +2330,7 @@ http_parse_uri_test(void *ptr)
 	TT_URI("/s:ome/path/to/the-file?q=99#fred");
 	evhttp_uri_free(uri);
 
-	uri = evhttp_uri_parse("relative/path/with/co:lon");
+	uri = URI_PARSE("relative/path/with/co:lon");
 	tt_want(uri != NULL);
 	tt_want(evhttp_uri_get_scheme(uri) == NULL);
 	tt_want(evhttp_uri_get_userinfo(uri) == NULL);
@@ -2337,7 +2342,7 @@ http_parse_uri_test(void *ptr)
 	TT_URI("relative/path/with/co:lon");
 	evhttp_uri_free(uri);
 
-	uri = evhttp_uri_parse("bob?q=99&q2=q?33#fr?ed");
+	uri = URI_PARSE("bob?q=99&q2=q?33#fr?ed");
 	tt_want(uri != NULL);
 	tt_want(evhttp_uri_get_scheme(uri) == NULL);
 	tt_want(evhttp_uri_get_userinfo(uri) == NULL);
@@ -2349,7 +2354,7 @@ http_parse_uri_test(void *ptr)
 	TT_URI("bob?q=99&q2=q?33#fr?ed");
 	evhttp_uri_free(uri);
 
-	uri = evhttp_uri_parse("#fr?ed");
+	uri = URI_PARSE("#fr?ed");
 	tt_want(uri != NULL);
 	tt_want(evhttp_uri_get_scheme(uri) == NULL);
 	tt_want(evhttp_uri_get_userinfo(uri) == NULL);
@@ -2360,6 +2365,9 @@ http_parse_uri_test(void *ptr)
 	tt_want(strcmp(evhttp_uri_get_fragment(uri), "fr?ed") == 0);
 	TT_URI("#fr?ed");
 	evhttp_uri_free(uri);
+#undef URI_PARSE
+#undef TT_URI
+#undef BAD
 }
 
 static void
@@ -3505,6 +3513,7 @@ struct testcase_t http_testcases[] = {
 	{ "bad_headers", http_bad_header_test, 0, NULL, NULL },
 	{ "parse_query", http_parse_query_test, 0, NULL, NULL },
 	{ "parse_uri", http_parse_uri_test, 0, NULL, NULL },
+	{ "parse_uri_nc", http_parse_uri_test, 0, &basic_setup, (void*)"nc" },
 	{ "uriencode", http_uriencode_test, 0, NULL, NULL },
 	HTTP(basic),
 	HTTP(cancel),

==== sntp/libevent/test/regress_listener.c ====
2011-04-14 19:55:08+00:00, davehart at shiny.ad.hartbrothers.com +3 -0
  libevent 2.1 (prerelease git head bfdda26534ea66b847760720260a4b4d8fcefe58)

--- 1.1/sntp/libevent/test/regress_listener.c	2011-01-20 03:02:56 -05:00
+++ 1.1.1.1/sntp/libevent/test/regress_listener.c	2011-04-14 15:55:08 -04:00
@@ -34,6 +34,9 @@
 #ifndef WIN32
 #include <sys/socket.h>
 #include <netinet/in.h>
+# ifdef _XOPEN_SOURCE_EXTENDED
+#  include <arpa/inet.h>
+# endif
 #include <unistd.h>
 #endif
 

==== sntp/libevent/test/regress_main.c ====
2011-04-14 19:55:08+00:00, davehart at shiny.ad.hartbrothers.com +5 -2
  libevent 2.1 (prerelease git head bfdda26534ea66b847760720260a4b4d8fcefe58)

--- 1.1/sntp/libevent/test/regress_main.c	2011-01-20 03:02:56 -05:00
+++ 1.2/sntp/libevent/test/regress_main.c	2011-04-14 15:55:08 -04:00
@@ -106,13 +106,15 @@ static void dnslogcb(int w, const char *
 	TT_BLATHER(("%s", m));
 }
 
-/* creates a temporary file with the data in it */
+/* creates a temporary file with the data in it.  If *filename_out gets set,
+ * the caller should try to unlink it. */
 int
-regress_make_tmpfile(const void *data, size_t datalen)
+regress_make_tmpfile(const void *data, size_t datalen, char **filename_out)
 {
 #ifndef WIN32
 	char tmpfilename[32];
 	int fd;
+	*filename_out = NULL;
 	strcpy(tmpfilename, "/tmp/eventtmp.XXXXXX");
 	fd = mkstemp(tmpfilename);
 	if (fd == -1)
@@ -147,6 +149,7 @@ regress_make_tmpfile(const void *data, s
 	if (tries == 0)
 		return (-1);
 	written = 0;
+	*filename_out = strdup(tmpfilename);
 	WriteFile(h, data, (DWORD)datalen, &written, NULL);
 	/* Closing the fd returned by this function will indeed close h. */
 	return _open_osfhandle((intptr_t)h,_O_RDONLY);

==== sntp/libevent/test/regress_testutils.c ====
2011-04-14 19:55:08+00:00, davehart at shiny.ad.hartbrothers.com +2 -0
  libevent 2.1 (prerelease git head bfdda26534ea66b847760720260a4b4d8fcefe58)

--- 1.1/sntp/libevent/test/regress_testutils.c	2011-01-20 03:02:56 -05:00
+++ 1.1.1.1/sntp/libevent/test/regress_testutils.c	2011-04-14 15:55:08 -04:00
@@ -68,6 +68,8 @@
 #include "regress.h"
 #include "regress_testutils.h"
 
+#include "../util-internal.h"
+
 /* globals */
 static struct evdns_server_port *dns_port;
 evutil_socket_t dns_sock = -1;

==== sntp/libevent/test/test-eof.c ====
2011-04-14 19:55:08+00:00, davehart at shiny.ad.hartbrothers.com +9 -3
  libevent 2.1 (prerelease git head bfdda26534ea66b847760720260a4b4d8fcefe58)

--- 1.1/sntp/libevent/test/test-eof.c	2011-01-20 03:02:57 -05:00
+++ 1.1.1.1/sntp/libevent/test/test-eof.c	2011-04-14 15:55:08 -04:00
@@ -32,6 +32,7 @@
 
 int test_okay = 1;
 int called = 0;
+struct timeval timeout = {60, 0};
 
 static void
 read_cb(evutil_socket_t fd, short event, void *arg)
@@ -39,6 +40,11 @@ read_cb(evutil_socket_t fd, short event,
 	char buf[256];
 	int len;
 
+	if (EV_TIMEOUT & event) {
+		printf("%s: Timeout!\n", __func__);
+		exit(1);
+	}
+
 	len = recv(fd, buf, sizeof(buf), 0);
 
 	printf("%s: read %d%s\n", __func__,
@@ -46,7 +52,7 @@ read_cb(evutil_socket_t fd, short event,
 
 	if (len) {
 		if (!called)
-			event_add(arg, NULL);
+			event_add(arg, &timeout);
 	} else if (called == 1)
 		test_okay = 0;
 
@@ -85,9 +91,9 @@ main(int argc, char **argv)
 	event_init();
 
 	/* Initalize one event */
-	event_set(&ev, pair[1], EV_READ, read_cb, &ev);
+	event_set(&ev, pair[1], EV_READ | EV_TIMEOUT, read_cb, &ev);
 
-	event_add(&ev, NULL);
+	event_add(&ev, &timeout);
 
 	event_dispatch();
 

==== sntp/libevent/test/test-ratelim.c ====
2011-04-14 19:55:08+00:00, davehart at shiny.ad.hartbrothers.com +5 -0
  libevent 2.1 (prerelease git head bfdda26534ea66b847760720260a4b4d8fcefe58)

--- 1.1/sntp/libevent/test/test-ratelim.c	2011-01-20 03:02:57 -05:00
+++ 1.1.1.1/sntp/libevent/test/test-ratelim.c	2011-04-14 15:55:08 -04:00
@@ -36,6 +36,9 @@
 #else
 #include <sys/socket.h>
 #include <netinet/in.h>
+# ifdef _XOPEN_SOURCE_EXTENDED
+#  include <arpa/inet.h>
+# endif
 #endif
 #include <signal.h>
 
@@ -45,6 +48,8 @@
 #include "event2/util.h"
 #include "event2/listener.h"
 #include "event2/thread.h"
+
+#include "../util-internal.h"
 
 static int cfg_verbose = 0;
 static int cfg_help = 0;

==== sntp/libevent/test/test-ratelim.sh ====
2011-04-14 19:55:08+00:00, davehart at shiny.ad.hartbrothers.com +77 -0
  libevent 2.1 (prerelease git head bfdda26534ea66b847760720260a4b4d8fcefe58)

--- /dev/null	2011-04-15 01:34:14 -04:00
+++ 1.1/sntp/libevent/test/test-ratelim.sh	2011-04-14 15:55:08 -04:00
@@ -0,0 +1,77 @@
+#!/bin/sh
+
+FAILED=no
+
+if test "x$TEST_OUTPUT_FILE" = "x"
+then
+	TEST_OUTPUT_FILE=/dev/null
+fi
+
+# /bin/echo is a little more likely to support -n than sh's builtin echo.
+if test -x /bin/echo
+then
+	ECHO=/bin/echo
+else
+	ECHO=echo
+fi
+
+if test "$TEST_OUTPUT_FILE" != "/dev/null"
+then
+	touch "$TEST_OUTPUT_FILE" || exit 1
+fi
+
+TEST_DIR=.
+
+T=`echo "$0" | sed -e 's/test-ratelim.sh$//'`
+if test -x "$T/test-ratelim"
+then
+	TEST_DIR="$T"
+fi
+
+announce () {
+	echo $@
+	echo $@ >>"$TEST_OUTPUT_FILE"
+}
+
+announce_n () {
+	$ECHO -n $@
+	echo $@ >>"$TEST_OUTPUT_FILE"
+}
+
+
+run_tests () {
+	announce_n "  Group limits, no connection limit:"
+	if $TEST_DIR/test-ratelim -g 30000 -n 30 -t 100 --check-grouplimit 1000 --check-stddev 100 >>"$TEST_OUTPUT_FILE"
+	then
+		announce OKAY
+	else
+		announce FAILED
+		FAILED=yes
+	fi
+
+	announce_n "  Connection limit, no group limit:"
+	if $TEST_DIR/test-ratelim -c 1000 -n 30 -t 100 --check-connlimit 50 --check-stddev 50 >>"$TEST_OUTPUT_FILE"
+	then
+		announce OKAY ;
+	else
+		announce FAILED ;
+		FAILED=yes
+	fi
+
+	announce_n "  Connection limit and group limit:"
+	if $TEST_DIR/test-ratelim -c 1000 -g 30000 -n 30 -t 100 --check-grouplimit 1000 --check-connlimit 50 --check-stddev 50 >>"$TEST_OUTPUT_FILE"
+	then
+		announce OKAY ;
+	else
+		announce FAILED ;
+		FAILED=yes
+	fi
+}
+
+announce "Running rate-limiting tests:"
+
+run_tests
+
+if test "$FAILED" = "yes"; then
+	exit 1
+fi

==== sntp/libevent/test/test-ratelim.sh ====
2011-04-14 19:55:08+00:00, davehart at shiny.ad.hartbrothers.com +0 -0

==== sntp/libevent/test/test.sh ====
2011-04-14 19:55:08+00:00, davehart at shiny.ad.hartbrothers.com +12 -5
  libevent 2.1 (prerelease git head bfdda26534ea66b847760720260a4b4d8fcefe58)

--- 1.1/sntp/libevent/test/test.sh	2011-01-20 03:02:57 -05:00
+++ 1.1.1.1/sntp/libevent/test/test.sh	2011-04-14 15:55:08 -04:00
@@ -7,12 +7,18 @@ then
 	TEST_OUTPUT_FILE=/dev/null
 fi
 
-# /bin/echo is a little more likely to support -n than sh's builtin echo.
-if test -x /bin/echo
+# /bin/echo is a little more likely to support -n than sh's builtin echo,
+# printf is even more likely
+if test "`printf %s hello 2>&1`" = "hello"
 then
-	ECHO=/bin/echo
+	ECHO_N="printf %s"
 else
-	ECHO=echo
+	if test -x /bin/echo
+	then
+		ECHO_N="/bin/echo -n"
+	else
+		ECHO_N="echo -n"
+	fi
 fi
 
 if test "$TEST_OUTPUT_FILE" != "/dev/null"
@@ -45,7 +51,7 @@ announce () {
 }
 
 announce_n () {
-	$ECHO -n "$@"
+	$ECHO_N "$@"
 	echo "$@" >>"$TEST_OUTPUT_FILE"
 }
 
@@ -91,6 +97,7 @@ run_tests () {
 		announce FAILED ;
 		FAILED=yes
 	fi
+	test -x $TEST_DIR/regress || return
 	announce_n " regress: "
 	if test "$TEST_OUTPUT_FILE" = "/dev/null" ;
 	then

==== sntp/libevent/test/tinytest_demo.c ====
2011-04-14 19:55:08+00:00, davehart at shiny.ad.hartbrothers.com +215 -0
  libevent 2.1 (prerelease git head bfdda26534ea66b847760720260a4b4d8fcefe58)

--- /dev/null	2011-04-15 01:34:14 -04:00
+++ 1.1/sntp/libevent/test/tinytest_demo.c	2011-04-14 15:55:08 -04:00
@@ -0,0 +1,215 @@
+/* tinytest_demo.c -- Copyright 2009-2010 Nick Mathewson
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. The name of the author may not be used to endorse or promote products
+ *    derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+
+/* Welcome to the example file for tinytest!  I'll show you how to set up
+ * some simple and not-so-simple testcases. */
+
+/* Make sure you include these headers. */
+#include "tinytest.h"
+#include "tinytest_macros.h"
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <errno.h>
+
+/* ============================================================ */
+
+/* First, let's see if strcmp is working.  (All your test cases should be
+ * functions declared to take a single void * as) an argument. */
+void
+test_strcmp(void *data)
+{
+	(void)data; /* This testcase takes no data. */
+
+	/* Let's make sure the empty string is equal to itself */
+	if (strcmp("","")) {
+		/* This macro tells tinytest to stop the current test
+		 * and go straight to the "end" label. */
+		tt_abort_msg("The empty string was not equal to itself");
+	}
+
+	/* Pretty often, calling tt_abort_msg to indicate failure is more
+	   heavy-weight than you want.	Instead, just say: */
+	tt_assert(strcmp("testcase", "testcase") == 0);
+
+	/* Occasionally, you don't want to stop the current testcase just
+	   because a single assertion has failed.  In that case, use
+	   tt_want: */
+	tt_want(strcmp("tinytest", "testcase") > 0);
+
+	/* You can use the tt_*_op family of macros to compare values and to
+	   fail unless they have the relationship you want.  They produce
+	   more useful output than tt_assert, since they display the actual
+	   values of the failing things.
+
+	   Fail unless strcmp("abc, "abc") == 0 */
+	tt_int_op(strcmp("abc", "abc"), ==, 0);
+
+	/* Fail unless strcmp("abc, "abcd") is less than 0 */
+	tt_int_op(strcmp("abc", "abcd"), < , 0);
+
+	/* Incidentally, there's a test_str_op that uses strcmp internally. */
+	tt_str_op("abc", <, "abcd");
+
+
+	/* Every test-case function needs to finish with an "end:"
+	   label and (optionally) code to clean up local variables. */
+ end:
+	;
+}
+
+/* ============================================================ */
+
+/* Now let's mess with setup and teardown functions!  These are handy if
+   you have a bunch of tests that all need a similar environment, and you
+   want to reconstruct that environment freshly for each one. */
+
+/* First you declare a type to hold the environment info, and functions to
+   set it up and tear it down. */
+struct data_buffer {
+	/* We're just going to have couple of character buffer.	 Using
+	   setup/teardown functions is probably overkill for this case.
+
+	   You could also do file descriptors, complicated handles, temporary
+	   files, etc. */
+	char buffer1[512];
+	char buffer2[512];
+};
+/* The setup function needs to take a const struct testcase_t and return
+   void* */
+void *
+setup_data_buffer(const struct testcase_t *testcase)
+{
+	struct data_buffer *db = malloc(sizeof(struct data_buffer));
+
+	/* If you had a complicated set of setup rules, you might behave
+	   differently here depending on testcase->flags or
+	   testcase->setup_data or even or testcase->name. */
+
+	/* Returning a NULL here would mean that we couldn't set up for this
+	   test, so we don't need to test db for null. */
+	return db;
+}
+/* The clean function deallocates storage carefully and returns true on
+   success. */
+int
+clean_data_buffer(const struct testcase_t *testcase, void *ptr)
+{
+	struct data_buffer *db = ptr;
+
+	if (db) {
+		free(db);
+		return 1;
+	}
+	return 0;
+}
+/* Finally, declare a testcase_setup_t with these functions. */
+struct testcase_setup_t data_buffer_setup = {
+	setup_data_buffer, clean_data_buffer
+};
+
+
+/* Now let's write our test. */
+void
+test_memcpy(void *ptr)
+{
+	/* This time, we use the argument. */
+	struct data_buffer *db = ptr;
+
+	/* We'll also introduce a local variable that might need cleaning up. */
+	char *mem = NULL;
+
+	/* Let's make sure that memcpy does what we'd like. */
+	strcpy(db->buffer1, "String 0");
+	memcpy(db->buffer2, db->buffer1, sizeof(db->buffer1));
+	tt_str_op(db->buffer1, ==, db->buffer2);
+
+	/* Now we've allocated memory that's referenced by a local variable.
+	   The end block of the function will clean it up. */
+	mem = strdup("Hello world.");
+	tt_assert(mem);
+
+	/* Another rather trivial test. */
+	tt_str_op(db->buffer1, !=, mem);
+
+ end:
+	/* This time our end block has something to do. */
+	if (mem)
+		free(mem);
+}
+
+/* ============================================================ */
+
+/* Now we need to make sure that our tests get invoked.	  First, you take
+   a bunch of related tests and put them into an array of struct testcase_t.
+*/
+
+struct testcase_t demo_tests[] = {
+	/* Here's a really simple test: it has a name you can refer to it
+	   with, and a function to invoke it. */
+	{ "strcmp", test_strcmp, },
+
+	/* The second test has a flag, "TT_FORK", to make it run in a
+	   subprocess, and a pointer to the testcase_setup_t that configures
+	   its environment. */
+	{ "memcpy", test_memcpy, TT_FORK, &data_buffer_setup },
+
+	/* The array has to end with END_OF_TESTCASES. */
+	END_OF_TESTCASES
+};
+
+/* Next, we make an array of testgroups.  This is mandatory.  Unlike more
+   heavy-duty testing frameworks, groups can't nest. */
+struct testgroup_t groups[] = {
+
+	/* Every group has a 'prefix', and an array of tests.  That's it. */
+	{ "demo/", demo_tests },
+
+	END_OF_GROUPS
+};
+
+
+int
+main(int c, const char **v)
+{
+	/* Finally, just call tinytest_main().	It lets you specify verbose
+	   or quiet output with --verbose and --quiet.	You can list
+	   specific tests:
+
+	       tinytest-demo demo/memcpy
+
+	   or use a ..-wildcard to select multiple tests with a common
+	   prefix:
+
+	       tinytest-demo demo/..
+
+	   If you list no tests, you get them all by default, so that
+	   "tinytest-demo" and "tinytest-demo .." mean the same thing.
+
+	*/
+	return tinytest_main(c, v, groups);
+}

==== sntp/libevent/test/tinytest_demo.c ====
2011-04-14 19:55:08+00:00, davehart at shiny.ad.hartbrothers.com +0 -0

==== sntp/libevent/util-internal.h ====
2011-04-14 19:55:06+00:00, davehart at shiny.ad.hartbrothers.com +25 -2
  libevent 2.1 (prerelease git head bfdda26534ea66b847760720260a4b4d8fcefe58)

--- 1.1/sntp/libevent/util-internal.h	2011-01-20 03:02:54 -05:00
+++ 1.1.1.1/sntp/libevent/util-internal.h	2011-04-14 15:55:06 -04:00
@@ -27,6 +27,8 @@
 #define _EVENT_UTIL_INTERNAL_H
 
 #include "event2/event-config.h"
+#include "evconfig-private.h"
+
 #include <errno.h>
 
 /* For EVUTIL_ASSERT */
@@ -38,6 +40,8 @@
 #endif
 #include "event2/util.h"
 
+#include "ipv6-internal.h"
+
 #ifdef __cplusplus
 extern "C" {
 #endif
@@ -52,9 +56,13 @@ extern "C" {
 
 /* A good no-op to use in macro definitions. */
 #define _EVUTIL_NIL_STMT ((void)0)
-/* Suppresses the compiler's "unused variable" warnings for unused assert. */
+/* A no-op that tricks the compiler into thinking a condition is used while
+ * definitely not making any code for it.  Used to compile out asserts while
+ * avoiding "unused variable" warnings.  The "!" forces the compiler to
+ * do the sizeof() on an int, in case "condition" is a bitfield value.
+ */
 #define _EVUTIL_NIL_CONDITION(condition) do { \
-	(void)sizeof(condition); \
+	(void)sizeof(!(condition));  \
 } while(0)
 
 /* Internal use only: macros to match patterns of error codes in a
@@ -199,6 +207,21 @@ long _evutil_weakrand(void);
 		}							\
 	} while (0)
 #define EVUTIL_FAILURE_CHECK(cond) EVUTIL_UNLIKELY(cond)
+#endif
+
+#ifndef _EVENT_HAVE_STRUCT_SOCKADDR_STORAGE
+/* Replacement for sockaddr storage that we can use internally on platforms
+ * that lack it.  It is not space-efficient, but neither is sockaddr_storage.
+ */
+struct sockaddr_storage {
+	union {
+		struct sockaddr ss_sa;
+		struct sockaddr_in ss_sin;
+		struct sockaddr_in6 ss_sin6;
+		char ss_padding[128];
+	} ss_union;
+};
+#define ss_family ss_union.ss_sa.sa_family
 #endif
 
 /* Internal addrinfo error code.  This one is returned from only from

==== sntp/libevent/whatsnew-2.0.txt ====
2011-04-14 19:55:06+00:00, davehart at shiny.ad.hartbrothers.com +1 -1
  libevent 2.1 (prerelease git head bfdda26534ea66b847760720260a4b4d8fcefe58)

--- 1.1/sntp/libevent/whatsnew-2.0.txt	2011-01-20 03:02:54 -05:00
+++ 1.2/sntp/libevent/whatsnew-2.0.txt	2011-04-14 15:55:06 -04:00
@@ -75,7 +75,7 @@ What's New In Libevent 2.0 so far:
   evutil.h) will continue to work by including the corresponding new
   headers.  Old code should not be broken by this change.
 
-2.2. New thread-safe, binary-compatibile, harder-to-mess-up APIs
+2.2. New thread-safe, binary-compatible, harder-to-mess-up APIs
 
   Some aspects of the historical Libevent API have encouraged
   non-threadsafe code, or forced code built against one version of Libevent

==== sntp/libevent/win32select.c ====
2011-04-14 19:55:06+00:00, davehart at shiny.ad.hartbrothers.com +2 -1
  libevent 2.1 (prerelease git head bfdda26534ea66b847760720260a4b4d8fcefe58)

--- 1.1/sntp/libevent/win32select.c	2011-01-20 03:02:54 -05:00
+++ 1.2/sntp/libevent/win32select.c	2011-04-14 15:55:06 -04:00
@@ -25,6 +25,8 @@
  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
  * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
+#include "event2/event-config.h"
+#include "evconfig-private.h"
 
 #include <winsock2.h>
 #include <windows.h>
@@ -38,7 +40,6 @@
 #include <errno.h>
 
 #include "event2/util.h"
-#include "event2/event-config.h"
 #include "util-internal.h"
 #include "log-internal.h"
 #include "event2/event.h"


More information about the bk-ntp-dev-send mailing list