]> granicus.if.org Git - libevent/log
libevent
12 years agoAdd process.h include to evutil.c for _getpid
Nick Mathewson [Mon, 23 Jul 2012 20:32:43 +0000 (16:32 -0400)]
Add process.h include to evutil.c for _getpid

12 years agoFix tinytset_skip to work with new tinytest_set_flag_ signature
Nick Mathewson [Fri, 20 Jul 2012 19:36:15 +0000 (15:36 -0400)]
Fix tinytset_skip to work with new tinytest_set_flag_ signature

12 years agoFix compile error in win32 listener.c
Nick Mathewson [Fri, 20 Jul 2012 19:35:33 +0000 (15:35 -0400)]
Fix compile error in win32 listener.c

SF issue 3546388

12 years agoMerge remote-tracking branch 'origin/patches-2.0'
Nick Mathewson [Tue, 17 Jul 2012 15:10:44 +0000 (11:10 -0400)]
Merge remote-tracking branch 'origin/patches-2.0'

12 years agoFix a memory leak on error in evhttp_uriencode
Nick Mathewson [Tue, 17 Jul 2012 15:08:25 +0000 (11:08 -0400)]
Fix a memory leak on error in evhttp_uriencode

If we ran out of memory in evhttp_uriencode when allocating the
output buffer, we would neglect to call evbuffer_free() on our
temporary buffer.  Now we always free the temporary buffer.

Fixes sourceforge issue 3539887. Thanks to Andrew Cox for reporting
this one.

12 years agoMerge remote-tracking branch 'origin/patches-2.0'
Nick Mathewson [Mon, 16 Jul 2012 19:44:07 +0000 (15:44 -0400)]
Merge remote-tracking branch 'origin/patches-2.0'

Conflicts:
event.c
win32select.c

12 years agoWin32: avoid crash when waiting forever on zero fds.
Nick Mathewson [Mon, 16 Jul 2012 19:34:18 +0000 (15:34 -0400)]
Win32: avoid crash when waiting forever on zero fds.

12 years agoMake load-dependent monotonic timer tests off-by-default
Nick Mathewson [Fri, 29 Jun 2012 16:47:51 +0000 (12:47 -0400)]
Make load-dependent monotonic timer tests off-by-default

You can reenable them with @all, or say @fine_timing just to get
them.

12 years agoAvoid (unlikely) overflow in bench_httpclient.c
Nick Mathewson [Fri, 29 Jun 2012 16:47:39 +0000 (12:47 -0400)]
Avoid (unlikely) overflow in bench_httpclient.c

12 years agoCheck return value of write() in regress.c
Nick Mathewson [Fri, 29 Jun 2012 16:47:03 +0000 (12:47 -0400)]
Check return value of write() in regress.c

12 years agoMerge branch '21_nonrecursive'
Nick Mathewson [Thu, 28 Jun 2012 20:52:21 +0000 (16:52 -0400)]
Merge branch '21_nonrecursive'

12 years agoMake all tests that hit the network disabled by default
Nick Mathewson [Thu, 28 Jun 2012 17:18:28 +0000 (13:18 -0400)]
Make all tests that hit the network disabled by default

To run only these tests, run test/regress with @live_net.  To run all
tests, run test/regress with @all.

12 years agoUpdate to latest tinytest (911b4f0349377)
Nick Mathewson [Thu, 28 Jun 2012 16:58:46 +0000 (12:58 -0400)]
Update to latest tinytest (911b4f0349377)

12 years agoMake test_evutil_monotonic a little more tolerant
Nick Mathewson [Thu, 28 Jun 2012 16:57:58 +0000 (12:57 -0400)]
Make test_evutil_monotonic a little more tolerant

12 years agoMake th_base_lock nonrecursive
Nick Mathewson [Thu, 28 Jun 2012 16:00:57 +0000 (12:00 -0400)]
Make th_base_lock nonrecursive

This is necessary for making some thread libraries work with
event.c, and might get better performance with others.

The biggest change required here was that we needed to make some
internal code that had previously called event_add and event_del
call the nolock variants.

12 years agoMerge branch 'master' of ssh://github.com/libevent/libevent
Nick Mathewson [Thu, 28 Jun 2012 15:42:25 +0000 (11:42 -0400)]
Merge branch 'master' of ssh://github.com/libevent/libevent

12 years agoremove a now-unused var in thread_deferred_cb_skew test
Nick Mathewson [Thu, 28 Jun 2012 15:37:45 +0000 (11:37 -0400)]
remove a now-unused var in thread_deferred_cb_skew test

12 years agoMerge branch '21_event_callback_v3'
Nick Mathewson [Thu, 28 Jun 2012 15:36:52 +0000 (11:36 -0400)]
Merge branch '21_event_callback_v3'

12 years agoAvoid a resource leak on error in http client benchmark
Nick Mathewson [Mon, 25 Jun 2012 17:55:45 +0000 (13:55 -0400)]
Avoid a resource leak on error in http client benchmark

12 years agoSimplify and correct evutil_open_closeonexec_
Nick Mathewson [Mon, 25 Jun 2012 16:19:26 +0000 (12:19 -0400)]
Simplify and correct evutil_open_closeonexec_

The original code needlessly called open in its two- or three-
argument format depending on the O_CREAT flag; this should not be
needed.

The code also leaked an fd if fcntl() failed.

Reported by Dave Hart.

12 years agoAvoid giving a spurious warning when timerfd support is unavailable
Dave Hart [Mon, 18 Jun 2012 14:31:38 +0000 (10:31 -0400)]
Avoid giving a spurious warning when timerfd support is unavailable

We forgot to do the obligatory "Check if there is no syscall there"
dance when calling timerfd_create().

(Commit message by Nick)

12 years agoMake event_pending() threadsafe.
Simon Liu [Thu, 14 Jun 2012 17:01:05 +0000 (01:01 +0800)]
Make event_pending() threadsafe.

(Commit message by Nick)

12 years agoAdd GCC annotations so that the vsprintf functions get checked properly
Nick Mathewson [Thu, 14 Jun 2012 17:25:10 +0000 (13:25 -0400)]
Add GCC annotations so that the vsprintf functions get checked properly

12 years agoMake the Makefile.nmake warning slightly less dire
Nick Mathewson [Fri, 8 Jun 2012 20:50:25 +0000 (16:50 -0400)]
Make the Makefile.nmake warning slightly less dire

12 years agoAdd evutil_time.obj to Makefile.nmake
Nick Mathewson [Fri, 8 Jun 2012 20:45:01 +0000 (16:45 -0400)]
Add evutil_time.obj to Makefile.nmake

12 years agoMerge pull request #57 from rosslagerwall/memleak
Nick Mathewson [Wed, 6 Jun 2012 21:10:11 +0000 (14:10 -0700)]
Merge pull request #57 from rosslagerwall/memleak

Fix a couple of memory leaks (found with Valgrind).

12 years agoMerge remote-tracking branch 'origin/patches-2.0'
Nick Mathewson [Wed, 6 Jun 2012 21:06:57 +0000 (17:06 -0400)]
Merge remote-tracking branch 'origin/patches-2.0'

12 years agoFix a couple of memory leaks (found with Valgrind).
Ross Lagerwall [Wed, 6 Jun 2012 19:57:12 +0000 (21:57 +0200)]
Fix a couple of memory leaks (found with Valgrind).

12 years agoMerge pull request #56 from rosslagerwall/fix-comment
Nick Mathewson [Mon, 4 Jun 2012 21:16:02 +0000 (14:16 -0700)]
Merge pull request #56 from rosslagerwall/fix-comment

Fix a comment in test-fdleak after 077c7e949.

12 years agoFix a comment in test-fdleak after 077c7e949.
Ross Lagerwall [Sun, 3 Jun 2012 13:19:53 +0000 (15:19 +0200)]
Fix a comment in test-fdleak after 077c7e949.

12 years agoMerge remote-tracking branch 'origin/patches-2.0'
Nick Mathewson [Fri, 1 Jun 2012 13:50:07 +0000 (09:50 -0400)]
Merge remote-tracking branch 'origin/patches-2.0'

12 years agoCorrectly check for arc4random_buf
Sebastian Hahn [Fri, 1 Jun 2012 03:23:29 +0000 (05:23 +0200)]
Correctly check for arc4random_buf

Apparently it's necssary to do an explicit comparison with NULL here.
This also gets rid of a compile warning

12 years agoMerge remote-tracking branch 'origin/patches-2.0'
Nick Mathewson [Thu, 31 May 2012 06:52:37 +0000 (02:52 -0400)]
Merge remote-tracking branch 'origin/patches-2.0'

Conflicts:
evutil_rand.c

Had conflicts with _EVENT_ -> EVENT__ change.

12 years agocheck for arc4random_buf at runtime, on OS X
Greg Hazel [Tue, 29 May 2012 19:39:12 +0000 (12:39 -0700)]
check for arc4random_buf at runtime, on OS X

(Tweaked by nickm: Fix up the arcr4andom_buf OSX hack so that the
fallback case isn't compiled into the code when we have
arc4random_buf() and we are not on OSX.  Also add a comment
explaining what's up.)

12 years agoMerge pull request #54 from rosslagerwall/configure-dup
Nick Mathewson [Mon, 21 May 2012 17:59:20 +0000 (10:59 -0700)]
Merge pull request #54 from rosslagerwall/configure-dup

Remove unnecessary code in configure.in.

12 years agoMake it more clear that NOLOCK means "I promise, no multithreading"
Nick Mathewson [Mon, 14 May 2012 15:10:51 +0000 (11:10 -0400)]
Make it more clear that NOLOCK means "I promise, no multithreading"

12 years agoAdd caveat to docs about bufferevent_free() with data in outbuf
Nick Mathewson [Mon, 14 May 2012 14:58:01 +0000 (10:58 -0400)]
Add caveat to docs about bufferevent_free() with data in outbuf

Based on libevent-users thread wtih Alexander Klauer

12 years agoBe more clear that LEV_OPT_DEFERRED_ACCEPT has tricky prereqs
Nick Mathewson [Mon, 14 May 2012 14:55:27 +0000 (10:55 -0400)]
Be more clear that LEV_OPT_DEFERRED_ACCEPT has tricky prereqs

12 years agoRemove unnecessary code in configure.in.
Ross Lagerwall [Sat, 12 May 2012 06:38:19 +0000 (08:38 +0200)]
Remove unnecessary code in configure.in.

12 years agoAdd an event_base_loopcontinue() to tell libevent to rescan right away
Nick Mathewson [Wed, 9 May 2012 16:05:07 +0000 (12:05 -0400)]
Add an event_base_loopcontinue() to tell libevent to rescan right away

12 years agoRestore our priority-inversion-prevention code with deferreds
Nick Mathewson [Wed, 9 May 2012 15:06:06 +0000 (11:06 -0400)]
Restore our priority-inversion-prevention code with deferreds

Back when deferred_cb stuff had its own queue, the queue was always
executed, but we never ran more than 16 callbacks per iteration.
That made for two problems:

1: Because deferred_cb stuff would always run, and had no priority,
it could cause priority inversion.

2: It doesn't respect the max_dispatch_interval code.

Then, when I refactored deferred_cb to be a special case of
event_callback, that solved the above issues, but made for two more
issues:

3: Because deferred_cb stuff would always get the default priority,
it could could low-priority bufferevents to get too much priority.

4: With code like bufferevent_pair, it's easy to get into a
situation where two deferreds keep adding one another, preventing
the event loop from ever actually scanning for more events.

This commit fixes the above by giving deferreds a better notion of
priorities, and by limiting the number of deferreds that can be
added to the _current_ loop iteration's active queues.  (Extra
deferreds are put into the active_later state.)

That isn't an all-purpose priority inversion solution, of course: for
that, you may need to mess around with max_dispatch_interval.

12 years agoGive event_base_process_active a single exit path
Nick Mathewson [Wed, 9 May 2012 14:50:07 +0000 (10:50 -0400)]
Give event_base_process_active a single exit path

12 years agoMake event_base_getnpriorities work with old "implicit base" code
Nick Mathewson [Wed, 9 May 2012 14:49:28 +0000 (10:49 -0400)]
Make event_base_getnpriorities work with old "implicit base" code

12 years agoAdd a bufferevent_get_priority() function
Nick Mathewson [Tue, 8 May 2012 22:04:19 +0000 (18:04 -0400)]
Add a bufferevent_get_priority() function

12 years agoNew event_get_priority() function to return an event's priority
Nick Mathewson [Tue, 8 May 2012 21:46:46 +0000 (17:46 -0400)]
New event_get_priority() function to return an event's priority

12 years agoReplace more deferred_cb names with event_callback
Nick Mathewson [Fri, 6 Apr 2012 15:05:35 +0000 (11:05 -0400)]
Replace more deferred_cb names with event_callback

12 years agoReplace deferred_cbs with event_callback-based implementation.
Nick Mathewson [Fri, 6 Apr 2012 08:33:19 +0000 (04:33 -0400)]
Replace deferred_cbs with event_callback-based implementation.

12 years agoevent_base_assert_ok: check value of event_active_count for correctness
Nick Mathewson [Fri, 6 Apr 2012 07:15:50 +0000 (03:15 -0400)]
event_base_assert_ok: check value of event_active_count for correctness

12 years agoAdd "active later" event_callbacks to supersede deferred
Nick Mathewson [Fri, 6 Apr 2012 07:00:40 +0000 (03:00 -0400)]
Add "active later" event_callbacks to supersede deferred

An event or event callback can now be in an additional state: "active
later".  When an event is in this state, it will become active the
next time we run through the event loop.  This lets us do what we
wanted to with deferred callbacks: make a type of active thing that
avoids infinite circular regress in a way that starves other events or
exhausts the stack.  It improves on deferred callbacks by respecting
priorities, and by having a non-kludgy way to avoid event starvation.

12 years agoRemove the unused bits from EVLIST_ALL
Nick Mathewson [Thu, 5 Apr 2012 16:56:07 +0000 (12:56 -0400)]
Remove the unused bits from EVLIST_ALL

12 years agoRefactor the callback part of an event into its own event_callback type
Nick Mathewson [Thu, 5 Apr 2012 16:38:18 +0000 (12:38 -0400)]
Refactor the callback part of an event into its own event_callback type

This shouldn't have any visible effect, but it's necessary or
advisible for a few changes and cleanups I would like to make,
including:
   * Replacing the deferred queue with a type that works more as if it
     were an event.
   * Introducing a useful "activate this on the next round through the
     event loop" state for events and deferreds.
   * Adding an "on until further notice" status for events, to allow a
     saner win32-hybrid approach.
   * Eventually, making all user callbacks first-class things with
     event-like semantics.

12 years agoMerge remote-tracking branch 'origin/patches-2.0'
Nick Mathewson [Thu, 3 May 2012 20:37:39 +0000 (16:37 -0400)]
Merge remote-tracking branch 'origin/patches-2.0'

12 years agoBump version to 2.0.19-stable-dev
Nick Mathewson [Thu, 3 May 2012 20:34:29 +0000 (16:34 -0400)]
Bump version to 2.0.19-stable-dev

12 years agoIncrement version to 2.0.19-stable release-2.0.19-stable
Nick Mathewson [Thu, 3 May 2012 16:33:36 +0000 (12:33 -0400)]
Increment version to 2.0.19-stable

12 years agoMerge remote-tracking branch 'github/patches-2.0'
Nick Mathewson [Thu, 3 May 2012 16:21:57 +0000 (12:21 -0400)]
Merge remote-tracking branch 'github/patches-2.0'

Conflicts:
test/regress.c

12 years agoOops; fix the *right* windows compile issue
Nick Mathewson [Thu, 3 May 2012 16:15:11 +0000 (12:15 -0400)]
Oops; fix the *right* windows compile issue

12 years agoFix win32 build issues: sleep, pid_t
Nick Mathewson [Thu, 3 May 2012 16:05:52 +0000 (12:05 -0400)]
Fix win32 build issues: sleep, pid_t

12 years agoMerge remote-tracking branch 'origin/patches-2.0'
Nick Mathewson [Wed, 2 May 2012 21:12:23 +0000 (17:12 -0400)]
Merge remote-tracking branch 'origin/patches-2.0'

Conflicts:
ChangeLog
README
evdns.c
sample/dns-example.c

12 years agoStart changelog for 2.0.19-stable
Nick Mathewson [Wed, 2 May 2012 21:09:11 +0000 (17:09 -0400)]
Start changelog for 2.0.19-stable

12 years agoFix evdns build with threads disabled
Nick Mathewson [Wed, 2 May 2012 20:52:27 +0000 (16:52 -0400)]
Fix evdns build with threads disabled

The last evdns change apparently broke it, by using a "base"
variable that we were only declaring with threads turned on.

12 years agoWhen retransmitting a timed-out DNS request, pick a fresh nameserver.
Nick Mathewson [Tue, 1 May 2012 23:52:55 +0000 (19:52 -0400)]
When retransmitting a timed-out DNS request, pick a fresh nameserver.

Otherwise, requests initially sent to a failing nameserver would
stay there indefinitely, even if other nameservers would work.

Fix for sourceforge bug 3518439

12 years agoMake some evdns.c debug logs more verbose
Nick Mathewson [Tue, 1 May 2012 23:52:49 +0000 (19:52 -0400)]
Make some evdns.c debug logs more verbose

12 years agodns-example.c can now take a resolv.conf file on the commandline
Nick Mathewson [Tue, 1 May 2012 21:07:50 +0000 (17:07 -0400)]
dns-example.c can now take a resolv.conf file on the commandline

12 years agoCorrectly handle running on a system where accept4 doesn't work.
Nick Mathewson [Tue, 1 May 2012 17:03:33 +0000 (13:03 -0400)]
Correctly handle running on a system where accept4 doesn't work.

Previously, we treated EINVAL as the only errno that indicated a
broken accept4.  But EINVAL only appears when one of the SOCK_*
options isn't supported.  If the accept4 syscall itself isn't there,
we'll get an ENOSYS.

Reported by Azat Khuzhin.

12 years agoMerge branch '21_robust_monotonic'
Nick Mathewson [Tue, 1 May 2012 17:22:56 +0000 (13:22 -0400)]
Merge branch '21_robust_monotonic'

12 years agoMerge remote-tracking branch 'origin/patches-2.0'
Nick Mathewson [Tue, 1 May 2012 02:00:05 +0000 (22:00 -0400)]
Merge remote-tracking branch 'origin/patches-2.0'

Conflicts:
event.c

12 years agoMerge remote-tracking branch 'github/20_active_prio_inv' into patches-2.0
Nick Mathewson [Tue, 1 May 2012 01:45:43 +0000 (21:45 -0400)]
Merge remote-tracking branch 'github/20_active_prio_inv' into patches-2.0

12 years agoMerge remote-tracking branch 'origin/patches-2.0'
Nick Mathewson [Tue, 1 May 2012 01:33:56 +0000 (21:33 -0400)]
Merge remote-tracking branch 'origin/patches-2.0'

Conflicts:
bufferevent_openssl.c

12 years agoWork-around a stupid gcov-breaking bug in OSX 10.6
Nick Mathewson [Thu, 12 Apr 2012 01:33:27 +0000 (21:33 -0400)]
Work-around a stupid gcov-breaking bug in OSX 10.6

This only affects the unit tests.

Fix found at http://rachelbythebay.com/w/2011/07/12/forkcrash/

(Backport from 2.1)

12 years agoFixed potential double-readcb execution with openssl bufferevents.
Mark Ellzey [Fri, 30 Mar 2012 19:08:40 +0000 (15:08 -0400)]
Fixed potential double-readcb execution with openssl bufferevents.

the function do_read() will call SSL_read(), and if successful, will
call _bufferevent_run_readcb() before returning to consider_reading().

consider_reading() will then check SSL_pending() to make sure all
pending data has also been read. If it does not, do_read() is called
again.

The issue with this is the possibility that the function that is
executed by _bufferevent_run_readcb() called
bufferevent_disable(ssl_bev, EV_READ) before the second do_read(); In
this case, the users read callback is executed a second time. This is
potentially bad for applications that expect the bufferevent to stay
disabled until further notice. (this is why running openssl bufferevents
without DEFER_CALLBACKS has always been troublesome).

12 years agoIf a higher-priority event becomes active, don't continue running events of the curre...
Nick Mathewson [Mon, 30 Apr 2012 21:30:48 +0000 (17:30 -0400)]
If a higher-priority event becomes active, don't continue running events of the current priority.

Bug found by Ralph Castain.

12 years agoGenerate event-config.h with a single sed script
Zack Weinberg [Fri, 27 Apr 2012 13:32:51 +0000 (09:32 -0400)]
Generate event-config.h with a single sed script

This approach should make the creation of the file more atomic, to
fix a bug reported by Dinh.

This patch has one change from Zack's original version: it avoids
$<, since Dave Hart tells me he thinks that's not so portable.

(commit message by nickm)

12 years agoMerge remote-tracking branch 'origin/patches-2.0'
Nick Mathewson [Fri, 27 Apr 2012 13:36:13 +0000 (09:36 -0400)]
Merge remote-tracking branch 'origin/patches-2.0'

12 years agoGenerate event-config.h with a single sed script
Zack Weinberg [Fri, 27 Apr 2012 13:32:51 +0000 (09:32 -0400)]
Generate event-config.h with a single sed script

This approach should make the creation of the file more atomic, to
fix a bug reported by Dinh.

This patch has one change from Zack's original version: it avoids
$<, since Dave Hart tells me he thinks that's not so portable.

(commit message by nickm)

12 years agoWhen PRECISE_TIMERS is set with epoll, use timerfd for microsecond precision
Nick Mathewson [Thu, 26 Apr 2012 20:22:03 +0000 (16:22 -0400)]
When PRECISE_TIMERS is set with epoll, use timerfd for microsecond precision

The epoll interface ordinarily gives us one-millisecond
precision, so on Linux it makes perfect sense to use the
CLOCK_MONOTONIC_COARSE timer.  But when the user has set the new
PRECISE_TIMER flag for an event_base (either by the
EVENT_BASE_FLAG_PRECISE_TIMER flag, or by the EVENT_PRECISE_TIMER
environment variable), they presumably want finer granularity.

On not-too-old Linuxes, we can achieve this using the Timerfd
mechanism, which accepts nanosecond granularity and understands
posix clocks.  It's a little more expensive than just calling
epoll_wait(), so we won't do it by default.

12 years agoImprove the monotonic-time unit test: make it check the step size
Nick Mathewson [Thu, 26 Apr 2012 18:35:18 +0000 (14:35 -0400)]
Improve the monotonic-time unit test: make it check the step size

12 years agoSimple unit tests for monotonic timers
Nick Mathewson [Thu, 26 Apr 2012 15:56:59 +0000 (11:56 -0400)]
Simple unit tests for monotonic timers

12 years agoImplement fast/precise monotonic clocks on Windows
Nick Mathewson [Mon, 23 Apr 2012 17:33:25 +0000 (13:33 -0400)]
Implement fast/precise monotonic clocks on Windows

This uses code from libutp, which was released under the MIT
license; see evutil_time.c and LICENSE changes.

12 years agoAdd EVENT_PRECISE_TIMER environment var for selecting precise-but-slow timer
Nick Mathewson [Mon, 23 Apr 2012 17:56:00 +0000 (13:56 -0400)]
Add EVENT_PRECISE_TIMER environment var for selecting precise-but-slow timer

12 years agoRefactor monotonic timer handling into a new type and set of functions; add a gettime...
Nick Mathewson [Fri, 20 Apr 2012 17:14:10 +0000 (13:14 -0400)]
Refactor monotonic timer handling into a new type and set of functions; add a gettimeofday-based ratcheting implementation

Now, event.c can always assume that we have a monotonic timer; this
makes event.c easier to write.

12 years agoSplit out time-related prototypes into time-internal.h
Nick Mathewson [Fri, 20 Apr 2012 16:27:12 +0000 (12:27 -0400)]
Split out time-related prototypes into time-internal.h

12 years agoSplit out time-related evutil functions into a new evutil_time.c
Nick Mathewson [Fri, 20 Apr 2012 16:19:03 +0000 (12:19 -0400)]
Split out time-related evutil functions into a new evutil_time.c

12 years agoSplit long lists in Makefile.am into one-item-per-line
Nick Mathewson [Fri, 20 Apr 2012 16:14:20 +0000 (12:14 -0400)]
Split long lists in Makefile.am into one-item-per-line

12 years agoShave 700 msec off the persistent_timeout_jump test
Nick Mathewson [Fri, 20 Apr 2012 15:53:32 +0000 (11:53 -0400)]
Shave 700 msec off the persistent_timeout_jump test

12 years agoMerge remote-tracking branch 'origin/patches-2.0'
Nick Mathewson [Fri, 20 Apr 2012 15:51:33 +0000 (11:51 -0400)]
Merge remote-tracking branch 'origin/patches-2.0'

12 years agoMerge branch '20_periodic_event_overload_v2' into patches-2.0
Nick Mathewson [Fri, 20 Apr 2012 15:51:13 +0000 (11:51 -0400)]
Merge branch '20_periodic_event_overload_v2' into patches-2.0

12 years agoIf time has jumped so we'd reschedule a periodic event in the past, schedule it for...
Nick Mathewson [Thu, 19 Apr 2012 04:25:12 +0000 (00:25 -0400)]
If time has jumped so we'd reschedule a periodic event in the past, schedule it for the future instead

Fixes an issue reported on libevent-users in the thread "a dead
looping bug when changing system time backward". Previously, if time
jumped forward 1 hour[*] and we had a one-second periodic timer event,
that event would get invoked 3600 times.  That's almost certainly not
what anybody wants.

In a future version of Libevent, we should expose the amount of time
that the callbac kwould have been invoked somehow.

[*] Forward time jumps can happen with nonmonotonic clocks, or with
clocks that jump on suspend/resume.  It can also happen from
Libevent's point of view if the user exits from event_base_loop() and
doesn't call it again for a while.

12 years agoRefactor event_persist_closure: raise and extract some common logic
Nick Mathewson [Thu, 19 Apr 2012 22:15:12 +0000 (18:15 -0400)]
Refactor event_persist_closure: raise and extract some common logic

12 years agoMerge remote-tracking branch 'origin/patches-2.0'
Nick Mathewson [Thu, 19 Apr 2012 15:14:58 +0000 (11:14 -0400)]
Merge remote-tracking branch 'origin/patches-2.0'

12 years agoMerge pull request #52 from ghazel/20_evdns_probe
Nick Mathewson [Thu, 19 Apr 2012 15:11:05 +0000 (08:11 -0700)]
Merge pull request #52 from ghazel/20_evdns_probe

cancel the probe request when the server is freed, and ignore cancelled probe callbacks

12 years agoremove redundant DNS_ERR_CANCEL check, move comment
Greg Hazel [Thu, 19 Apr 2012 04:41:48 +0000 (21:41 -0700)]
remove redundant DNS_ERR_CANCEL check, move comment

12 years agocancel the probe request when the server is freed, and ignore cancelled probe callbacks
Greg Hazel [Thu, 19 Apr 2012 04:29:21 +0000 (21:29 -0700)]
cancel the probe request when the server is freed, and ignore cancelled probe callbacks

12 years agoNote that make_base_notifiable should not be necessary
Nick Mathewson [Wed, 18 Apr 2012 16:24:19 +0000 (12:24 -0400)]
Note that make_base_notifiable should not be necessary

12 years agoMerge branch '21_choose_monotonic'
Nick Mathewson [Tue, 17 Apr 2012 21:54:26 +0000 (17:54 -0400)]
Merge branch '21_choose_monotonic'

12 years agoImplement a GetTickCount-based monotonic timer for Windows
Nick Mathewson [Tue, 17 Apr 2012 19:16:08 +0000 (15:16 -0400)]
Implement a GetTickCount-based monotonic timer for Windows

12 years agoOn Linux, use CLOCK_MONOTONIC_COARSE by default
Nick Mathewson [Tue, 17 Apr 2012 17:09:49 +0000 (13:09 -0400)]
On Linux, use CLOCK_MONOTONIC_COARSE by default

You can make it use CLOCK_MONOTONIC again by setting the
EVENT_BASE_FLAG_PRECISE_TIMER flag in the event_config.

12 years agoEVENT_BASE_FLAG_PRECISE_TIMER indicates we want fine timer precision
Nick Mathewson [Tue, 17 Apr 2012 17:04:02 +0000 (13:04 -0400)]
EVENT_BASE_FLAG_PRECISE_TIMER indicates we want fine timer precision

There are a bunch of backends that can give us a reasonably good
monotonic timer quickly, or a very precise monotonic timer less
quickly.  For example, Linux has CLOCK_MONOTONIC_COARSE (1msec
precision), which is over twice as fast as CLOCK_MONOTONIC.  Since
epoll only lets you wait with 1msec precision,
CLOCK_MONOTONIC_COARSE is a clear win.

On Windows, you've got GetTickCount{,64}() which is fast, and
QueryPerformanceCounter, which is precise but slow.

Note that even in the cases where the underlying timer claims to
have nanosecond resolution, we're still not exposing that via
Libevent.

Note also that "Precision" isn't the same as "Resolution" or
"Accuracy".  A timer's precision is the smallest change that the
clock will register; a timer's resolution is the fineness of its
underlying representation; a timer's accuracy is how much it drifts
with respect to "Real Time", whatever that means.  (Terms and
definitions from PEP 418.)

12 years agoMove use_monotonic and friends into event_base
Nick Mathewson [Tue, 17 Apr 2012 16:44:39 +0000 (12:44 -0400)]
Move use_monotonic and friends into event_base

The use_monotonic field used to be a static field set up at library
setup.  Unfortunately, this makes it hard to give the user a way to
make speed/accuracy tradeoffs about time.  Moving it into event_base
should let the clock implementation become configurable.

12 years agoWork-around a stupid gcov-breaking bug in OSX 10.6
Nick Mathewson [Thu, 12 Apr 2012 01:33:27 +0000 (21:33 -0400)]
Work-around a stupid gcov-breaking bug in OSX 10.6

This only affects the unit tests.

Fix found at http://rachelbythebay.com/w/2011/07/12/forkcrash/

12 years agoReplace pipe-based notification with EVFILT_USER where possible
Nick Mathewson [Fri, 17 Sep 2010 04:34:13 +0000 (00:34 -0400)]
Replace pipe-based notification with EVFILT_USER where possible

Sufficiently recent kqueue implementations have an EVFILT_USER filter
that we can use to wake up an event base from another thread.  When
it's supported, we now use this mechanism rather than our old
(pipe-based) mechanism.  This should save some time and complications
on newer OSX and freebsds.