]> granicus.if.org Git - libevent/log
libevent
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 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 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 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 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.

12 years agoMerge remote-tracking branch 'github/21_mach_time'
Nick Mathewson [Mon, 9 Apr 2012 23:49:58 +0000 (19:49 -0400)]
Merge remote-tracking branch 'github/21_mach_time'

12 years agoDo not track use_monotonic field when is no monotonic clock
Nick Mathewson [Mon, 9 Apr 2012 17:41:45 +0000 (13:41 -0400)]
Do not track use_monotonic field when is no monotonic clock

12 years agoUse mach_absolute_time() for monotonic clock support on OSX.
Nick Mathewson [Mon, 9 Apr 2012 17:39:11 +0000 (13:39 -0400)]
Use mach_absolute_time() for monotonic clock support on OSX.

12 years agoMerge pull request #50 from rosslagerwall/simplify-test
Nick Mathewson [Mon, 9 Apr 2012 15:40:45 +0000 (08:40 -0700)]
Merge pull request #50 from rosslagerwall/simplify-test

Simplify test.sh code significantly.

12 years agoMerge branch '21_weakrand'
Nick Mathewson [Mon, 9 Apr 2012 15:33:08 +0000 (11:33 -0400)]
Merge branch '21_weakrand'

12 years agoTweak the new evutil_weakrand_() code
Nick Mathewson [Mon, 9 Apr 2012 15:30:46 +0000 (11:30 -0400)]
Tweak the new evutil_weakrand_() code

Make its state actually get seeded.

Document it more thoroughly.

Turn its state into a structure.

Fix a bug in evutil_weakrand_range_() where it could return the top of
the range.

Change its return type to ev_int32_t.

Add a quick unit test to make sure that the value of
evutil_weakrand_range_() is in range.

12 years agoChange evutil_weakrand_() to avoid platform random()
Nicholas Marriott [Mon, 9 Apr 2012 14:46:32 +0000 (10:46 -0400)]
Change evutil_weakrand_() to avoid platform random()

This change allows us to avoid perturbing the platform's random(), and
to avoid hitting locks on random() in the platform's libc.

evutil_weakrand_() is, well, weak, so we choose here an algorithm that
favors speed over a number of other possibly desirable properties.
We're using a linear congruential generator, and taking our parameters
from those shared by the OpenBSD random() implementation, and
Glibc's fastest random() implementation.

The low bits of a LCG of modulus 2^32 are (notoriously) less random
than the higher bits.  So to generate a random value in a range, using
the % operator is no good; we ought to divide.  We add an
evutil_weakrand_range_() function to do that.

This code also changes the interface of evutil_weakrand_() so that it
now manipulates an explicit seed, rather than having the seed in a
static variable.  This change enables us to use existing locks to
achieve thread-safety, rather than having to rely on an additional lock.

(Patch by Nicholas Marriott; commit message by Nick Mathewson.)

12 years agoSimplify test.sh code significantly.
Ross Lagerwall [Sat, 7 Apr 2012 15:32:00 +0000 (17:32 +0200)]
Simplify test.sh code significantly.

Also make it easier to add new tests/backends.

12 years agoIncrement the version to 2.1.1-alpha-dev
Nick Mathewson [Wed, 4 Apr 2012 00:30:54 +0000 (20:30 -0400)]
Increment the version to 2.1.1-alpha-dev

12 years agoMerge remote-tracking branch 'origin/patches-2.0' release-2.1.1-alpha
Nick Mathewson [Tue, 3 Apr 2012 22:39:30 +0000 (18:39 -0400)]
Merge remote-tracking branch 'origin/patches-2.0'

12 years agoBackport: provide EVENT_LOG_* names, and deprecate _EVENT_LOG_*
Nick Mathewson [Tue, 3 Apr 2012 22:31:08 +0000 (18:31 -0400)]
Backport: provide EVENT_LOG_* names, and deprecate _EVENT_LOG_*

This is a partial backport of cb9da0bf and a backport of c9635349.

Because C doesn't like us to declare identifiers starting with an
underscore, Libevent 2.1 has renamed every such identifier.  The
only change that affects a public API is that the _EVENT_LOG_*
macros have been renamed to start with EVENT_LOG instead.  The old
names are still present, but deprecated.

I'm doing this backport because it represents the deprecation of a
Libevent 2.0 interface, and folks should have the opportunity to
write code that isn't deprecated and works with both 2.0 and 2.1.

12 years agoMerge remote-tracking branch 'origin/patches-2.0'
Nick Mathewson [Tue, 3 Apr 2012 21:27:07 +0000 (17:27 -0400)]
Merge remote-tracking branch 'origin/patches-2.0'