825 Commits

Author SHA1 Message Date
Nick Mathewson
52a0039ba1 Fix tinytset_skip to work with new tinytest_set_flag_ signature 2012-07-20 15:36:15 -04:00
Nick Mathewson
2b6fe8bb7f Make load-dependent monotonic timer tests off-by-default
You can reenable them with @all, or say @fine_timing just to get
them.
2012-06-29 12:47:51 -04:00
Nick Mathewson
5671033752 Avoid (unlikely) overflow in bench_httpclient.c 2012-06-29 12:47:39 -04:00
Nick Mathewson
c8009d2985 Check return value of write() in regress.c 2012-06-29 12:47:03 -04:00
Nick Mathewson
f2cea873bb 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.
2012-06-28 13:18:28 -04:00
Nick Mathewson
ef7c4f7956 Update to latest tinytest (911b4f0349377) 2012-06-28 12:58:46 -04:00
Nick Mathewson
def3b83419 Make test_evutil_monotonic a little more tolerant 2012-06-28 12:57:58 -04:00
Nick Mathewson
108896abcc Merge branch 'master' of ssh://github.com/libevent/libevent 2012-06-28 11:42:25 -04:00
Nick Mathewson
e2d7d98d9d remove a now-unused var in thread_deferred_cb_skew test 2012-06-28 11:37:45 -04:00
Nick Mathewson
8a739b3492 Merge branch '21_event_callback_v3' 2012-06-28 11:36:52 -04:00
Nick Mathewson
ea92fba36c Avoid a resource leak on error in http client benchmark 2012-06-25 13:55:45 -04:00
Nick Mathewson
90daab6184 Merge remote-tracking branch 'origin/patches-2.0' 2012-06-06 17:06:57 -04:00
Ross Lagerwall
3b2529acf2 Fix a couple of memory leaks (found with Valgrind). 2012-06-06 21:57:12 +02:00
Ross Lagerwall
3881d8fdf6 Fix a comment in test-fdleak after 077c7e949. 2012-06-03 15:19:53 +02:00
Nick Mathewson
c0e425abdc 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.
2012-05-09 12:06:00 -04:00
Nick Mathewson
a4079aa88a Replace more deferred_cb names with event_callback 2012-05-09 12:05:59 -04:00
Nick Mathewson
ae2b84b257 Replace deferred_cbs with event_callback-based implementation. 2012-05-09 12:05:53 -04:00
Nick Mathewson
745a63dba3 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.
2012-05-09 12:05:53 -04:00
Nick Mathewson
e0aa08666e Merge remote-tracking branch 'github/patches-2.0'
Conflicts:
	test/regress.c
2012-05-03 12:21:57 -04:00
Nick Mathewson
e06206ebd8 Oops; fix the *right* windows compile issue 2012-05-03 12:15:11 -04:00
Nick Mathewson
be7a0be816 Fix win32 build issues: sleep, pid_t 2012-05-03 12:05:52 -04:00
Nick Mathewson
a163026099 Merge branch '21_robust_monotonic' 2012-05-01 13:22:56 -04:00
Nick Mathewson
2e882a071b Merge remote-tracking branch 'origin/patches-2.0'
Conflicts:
	event.c
2012-04-30 22:00:05 -04:00
Nick Mathewson
30f0671526 Merge remote-tracking branch 'github/20_active_prio_inv' into patches-2.0 2012-04-30 21:45:43 -04:00
Nick Mathewson
b3887cdf3b 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)
2012-04-30 21:17:26 -04:00
Nick Mathewson
2bfda4012c If a higher-priority event becomes active, don't continue running events of the current priority.
Bug found by Ralph Castain.
2012-04-30 17:30:48 -04:00
Nick Mathewson
26c75828b7 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.
2012-04-26 16:42:21 -04:00
Nick Mathewson
7428c78a95 Improve the monotonic-time unit test: make it check the step size 2012-04-26 16:42:21 -04:00
Nick Mathewson
630f077c29 Simple unit tests for monotonic timers 2012-04-26 16:42:21 -04:00
Nick Mathewson
71bca50f12 Split out time-related prototypes into time-internal.h 2012-04-20 12:27:12 -04:00
Nick Mathewson
2711cda300 Split long lists in Makefile.am into one-item-per-line 2012-04-20 12:14:20 -04:00
Nick Mathewson
21205b8376 Shave 700 msec off the persistent_timeout_jump test 2012-04-20 11:53:32 -04:00
Nick Mathewson
d992d911a6 Merge remote-tracking branch 'origin/patches-2.0' 2012-04-20 11:51:33 -04:00
Nick Mathewson
dfd808cbad 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.
2012-04-19 18:25:59 -04:00
Nick Mathewson
b62b31f1f1 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/
2012-04-11 21:33:51 -04:00
Nick Mathewson
a969f7e706 Merge pull request #50 from rosslagerwall/simplify-test
Simplify test.sh code significantly.
2012-04-09 08:40:45 -07:00
Nick Mathewson
3aa44159c5 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.
2012-04-09 11:30:46 -04:00
Nicholas Marriott
e86af4b7e5 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.)
2012-04-09 10:46:32 -04:00
Ross Lagerwall
9b856fd594 Simplify test.sh code significantly.
Also make it easier to add new tests/backends.
2012-04-07 17:32:00 +02:00
Nick Mathewson
2449e0c508 Fix some compilation warnings with msvc 2012-04-03 16:15:49 -04:00
Nick Mathewson
6c95c6c8a2 Decrease MAX_REQUESTS in test-fdleak
We've got to do this because doing otherwise seems to freak out
windows XP.
2012-04-03 15:44:21 -04:00
Nick Mathewson
14eb28a312 Include util-internal.h earlier in test-dumpevents to fix solaris build
See 95e2455cdbf840b for rationale.
2012-04-03 15:41:12 -04:00
Nick Mathewson
e78baf4a01 Fix compilation with mm-replacement disabled. 2012-04-03 14:54:39 -04:00
Nick Mathewson
55e8dc1ba2 Make check-dumpevents work with out-of-tree builds 2012-04-03 14:51:51 -04:00
Nick Mathewson
f7b8200ca7 Make check-dumpevents.py actually get included in the tarballs 2012-04-03 12:36:51 -04:00
Nick Mathewson
fc23af45d1 Increase duration and tolerance on http/connection_retry test
This takes its runtime back up a little again, but not so high as it
was before.  It appears to address the heisenbug issues of github
nmathewson/libevent issue #49.  So far.
2012-04-01 00:21:55 -04:00
Ross Lagerwall
029a3db354 Require at least Python 2.4 for check-dumpevents.py. 2012-03-26 20:12:45 +02:00
Nick Mathewson
c24f91ad97 Test more bufferevent_ratelim features 2012-03-25 18:55:31 -04:00
Nick Mathewson
c5732fddb0 Add event_base_get_running_event() to get the event* whose cb we are in 2012-03-25 18:54:40 -04:00
Nick Mathewson
5626092c58 More coverage on reinsert_timeout tests 2012-03-23 19:30:02 -04:00