Nick Mathewson [Mon, 2 Nov 2009 19:30:25 +0000 (19:30 +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
Nick Mathewson [Mon, 2 Nov 2009 17:42:16 +0000 (17:42 +0000)]
Add more IOCP tests. They might not pass yet.
svn:r1487
Nick Mathewson [Mon, 2 Nov 2009 17:42:09 +0000 (17:42 +0000)]
More refactoring for IOCP listener code
svn:r1486
Nick Mathewson [Mon, 2 Nov 2009 16:31:13 +0000 (16:31 +0000)]
Call the bufferevent_flush_mode variable "mode" more consistently in the documentation. Spotted by Alex.
svn:r1485
Nick Mathewson [Mon, 2 Nov 2009 16:17:06 +0000 (16:17 +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
Nick Mathewson [Fri, 30 Oct 2009 22:43:53 +0000 (22:43 +0000)]
Remove some duplicate code in kqueue.c and fix a small memory leak.
svn:r1483
Nick Mathewson [Fri, 30 Oct 2009 22:43:30 +0000 (22:43 +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
Nick Mathewson [Fri, 30 Oct 2009 21:08:29 +0000 (21:08 +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
Nick Mathewson [Thu, 29 Oct 2009 19:25:33 +0000 (19:25 +0000)]
Refactor evconnlistener to allow multiple implementations; add an (incomplete, not-yet-integrated) IOCP implementation.
svn:r1480
Nick Mathewson [Thu, 29 Oct 2009 18:30:43 +0000 (18:30 +0000)]
Extract XP-only functions when initializing the IOCP port
svn:r1479
Nick Mathewson [Thu, 29 Oct 2009 17:11:12 +0000 (17:11 +0000)]
reformat weird indentation in dns tests
svn:r1478
Nick Mathewson [Thu, 29 Oct 2009 17:10:36 +0000 (17:10 +0000)]
Unit test for reverse ipv6 lookup
svn:r1477
Nick Mathewson [Thu, 29 Oct 2009 16:35:20 +0000 (16:35 +0000)]
More documentation and unit tests for event_tagging.
svn:r1476
Nick Mathewson [Thu, 29 Oct 2009 16:35:15 +0000 (16:35 +0000)]
Actually use the logic in select.c designed to make the out_sets threadsafe.
svn:r1475
Nick Mathewson [Thu, 29 Oct 2009 16:35:09 +0000 (16:35 +0000)]
Unit test for strlcpy
svn:r1474
Nick Mathewson [Tue, 27 Oct 2009 18:25:19 +0000 (18:25 +0000)]
Fix from Chris Davis: get error-logging to be happy on win32.
svn:r1473
Nick Mathewson [Tue, 27 Oct 2009 06:47:25 +0000 (06:47 +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
Nick Mathewson [Tue, 27 Oct 2009 05:16:32 +0000 (05:16 +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
Nick Mathewson [Tue, 27 Oct 2009 05:16:23 +0000 (05:16 +0000)]
Refactor event_assing even more to avoid unnecessary calls
svn:r1470
Nick Mathewson [Tue, 27 Oct 2009 04:25:45 +0000 (04:25 +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
Nick Mathewson [Tue, 27 Oct 2009 04:04:07 +0000 (04:04 +0000)]
Do not add a newline to the end of log statements.
svn:r1468
Nick Mathewson [Tue, 27 Oct 2009 04:03:58 +0000 (04:03 +0000)]
Refactor kq_init error handling.
svn:r1467
Nick Mathewson [Tue, 27 Oct 2009 04:03:50 +0000 (04:03 +0000)]
New test flag to suppress logging for one test.
svn:r1466
Nick Mathewson [Mon, 26 Oct 2009 20:07:06 +0000 (20:07 +0000)]
Note assert-related change in changelog
svn:r1465
Nick Mathewson [Mon, 26 Oct 2009 20:00:43 +0000 (20:00 +0000)]
Use EVUTIL_ASSERT() consistently instead of assert.
svn:r1464
Nick Mathewson [Mon, 26 Oct 2009 20:00:08 +0000 (20:00 +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
Nick Mathewson [Mon, 26 Oct 2009 19:59:51 +0000 (19:59 +0000)]
API to replace all calls to exit() with a user-supplied fatal-error handler.
Also, add unit tests for logging.
svn:r1462
Nick Mathewson [Fri, 23 Oct 2009 22:38:35 +0000 (22:38 +0000)]
Tweaks to IOCP interface.
svn:r1461
Nick Mathewson [Fri, 23 Oct 2009 22:07:05 +0000 (22:07 +0000)]
Fix my fix for the bufferevent_connect_fail() test.
svn:r1460
Nick Mathewson [Fri, 23 Oct 2009 22:00:29 +0000 (22:00 +0000)]
Expose a narrow window to the IOCP code.
svn:r1459
Nick Mathewson [Fri, 23 Oct 2009 17:40:00 +0000 (17:40 +0000)]
Improve the behavior of le-proxy in a few cases.
svn:r1458
Nick Mathewson [Wed, 21 Oct 2009 19:21:05 +0000 (19:21 +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
Nick Mathewson [Wed, 21 Oct 2009 18:48:22 +0000 (18:48 +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
Nick Mathewson [Wed, 21 Oct 2009 07:00:19 +0000 (07:00 +0000)]
Test failing case of bufferevent_connect().
Code by Chris Davis.
svn:r1455
Nick Mathewson [Wed, 21 Oct 2009 07:00:14 +0000 (07:00 +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
Nick Mathewson [Wed, 21 Oct 2009 06:03:00 +0000 (06:03 +0000)]
OSX compilation issues
svn:r1453
Nick Mathewson [Wed, 21 Oct 2009 05:36:27 +0000 (05:36 +0000)]
Remove an EVBASE_RELEASE_LOCK that I missed.
svn:r1452
Nick Mathewson [Wed, 21 Oct 2009 04:45:59 +0000 (04:45 +0000)]
Fix win32 compilation.
svn:r1451
Nick Mathewson [Wed, 21 Oct 2009 03:54:00 +0000 (03:54 +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
Nick Mathewson [Wed, 21 Oct 2009 02:14:16 +0000 (02:14 +0000)]
Fix windows compilation warnings.
svn:r1449
Niels Provos [Mon, 19 Oct 2009 16:20:12 +0000 (16:20 +0000)]
Fix compilation for listener.h for C++ - missing extern "C". Patch from Ferenc Szalai.
svn:r1448
Nick Mathewson [Fri, 16 Oct 2009 13:20:16 +0000 (13:20 +0000)]
Add a note that we should change previous_to_last to last_with_space
svn:r1447
Nick Mathewson [Fri, 16 Oct 2009 13:20:09 +0000 (13:20 +0000)]
Correct the signatures for the evmap_io_* functions to use evutil_socket_t.
svn:r1446
Nick Mathewson [Fri, 16 Oct 2009 13:19:57 +0000 (13:19 +0000)]
Spelling fixes in comments and strings.
svn:r1445
Nick Mathewson [Wed, 14 Oct 2009 00:46:47 +0000 (00:46 +0000)]
When a bufferevent_connect() call fails, give the client an error callback.
Patch from Christopher Davis.
svn:r1444
Nick Mathewson [Wed, 14 Oct 2009 00:46:40 +0000 (00:46 +0000)]
Fix some crash bugs when initializing evdns
svn:r1443
Nick Mathewson [Mon, 12 Oct 2009 21:06:30 +0000 (21:06 +0000)]
Declare struct timezone in util.h so that borken mingw versions do not complain
svn:r1441
Nick Mathewson [Fri, 2 Oct 2009 03:07:29 +0000 (03:07 +0000)]
Add changelog for last commit
svn:r1440
Nick Mathewson [Fri, 2 Oct 2009 03:03:58 +0000 (03:03 +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
Nick Mathewson [Thu, 1 Oct 2009 15:29:08 +0000 (15:29 +0000)]
Apply Ka-Hing Cheung's event_base_got_[break|exit] patch, with locking and whitespace fixes.
svn:r1438
Niels Provos [Thu, 24 Sep 2009 22:18:19 +0000 (22:18 +0000)]
Do not drop data from evbuffer when out of memory; reported by Jacek Masiulaniec
svn:r1436
Nick Mathewson [Wed, 23 Sep 2009 23:51:26 +0000 (23:51 +0000)]
Forward-port: fix android compilation
svn:r1435
Nick Mathewson [Wed, 16 Sep 2009 17:17:57 +0000 (17:17 +0000)]
Fix the assert I added to epoll.c: spotted by Dmitry Novikov
svn:r1432
Nick Mathewson [Fri, 11 Sep 2009 21:02:19 +0000 (21:02 +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
Nick Mathewson [Fri, 11 Sep 2009 18:47:35 +0000 (18:47 +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
Nick Mathewson [Fri, 11 Sep 2009 18:21:57 +0000 (18:21 +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
Nick Mathewson [Fri, 11 Sep 2009 18:21:37 +0000 (18:21 +0000)]
Treat a negative number of bytes to read as the kernel saying "I don't know."
svn:r1426
Nick Mathewson [Wed, 19 Aug 2009 20:55:25 +0000 (20:55 +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
Nick Mathewson [Sun, 16 Aug 2009 19:22:15 +0000 (19:22 +0000)]
Fix build warnings and add changelog entry for evhttp patches.
svn:r1424
Nick Mathewson [Sun, 16 Aug 2009 19:22:10 +0000 (19:22 +0000)]
Define evhttp_del_accept_socket
[Patch from David Reiss]
svn:r1423
Nick Mathewson [Sun, 16 Aug 2009 19:22:04 +0000 (19:22 +0000)]
Define evhttp_{bind,accept}_socket_with_handle
[Patch from David Reiss]
svn:r1422
Nick Mathewson [Sun, 16 Aug 2009 19:21:57 +0000 (19:21 +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
Nick Mathewson [Sun, 16 Aug 2009 19:21:50 +0000 (19:21 +0000)]
Minor documentation fixes
[Patch from David Reiss]
svn:r1420
Nick Mathewson [Sun, 16 Aug 2009 16:40:42 +0000 (16:40 +0000)]
Support sendfile on solaris: patch from Caitlin Mercer.
svn:r1419
Nick Mathewson [Fri, 14 Aug 2009 20:07:35 +0000 (20:07 +0000)]
New function to put an SSL bufferevent into a renegotiating state.
svn:r1418
Nick Mathewson [Fri, 14 Aug 2009 20:07:17 +0000 (20:07 +0000)]
Disable whichever struct event we don't want during ssl handshaking.
svn:r1417
Nick Mathewson [Fri, 14 Aug 2009 20:07:09 +0000 (20:07 +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
Nick Mathewson [Fri, 14 Aug 2009 20:07:01 +0000 (20:07 +0000)]
Remove an extraneous puts().
svn:r1415
Nick Mathewson [Fri, 14 Aug 2009 20:06:48 +0000 (20:06 +0000)]
tab/whitespace fixes in bufferevent_sock.c
Also note that write() doesn't usually say 0.
svn:r1414
Nick Mathewson [Tue, 11 Aug 2009 19:47:46 +0000 (19:47 +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
Nick Mathewson [Sun, 9 Aug 2009 20:18:00 +0000 (20:18 +0000)]
Add a few missing changelog entries
svn:r1412
Nick Mathewson [Sun, 9 Aug 2009 20:17:29 +0000 (20:17 +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
Nick Mathewson [Fri, 7 Aug 2009 17:16:52 +0000 (17:16 +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
Nick Mathewson [Mon, 3 Aug 2009 20:50:56 +0000 (20:50 +0000)]
Add a couple more evdns tests. Libevent is now, for me, at 80.02% coverage.
svn:r1409
Nick Mathewson [Mon, 3 Aug 2009 20:15:45 +0000 (20:15 +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
Nick Mathewson [Mon, 3 Aug 2009 20:15:39 +0000 (20:15 +0000)]
why say fprintf(stdout, X) when you can say printf?
svn:r1407
Nick Mathewson [Mon, 3 Aug 2009 20:15:32 +0000 (20:15 +0000)]
Fix an annoying evdns crash bug, and add more unit tests for evdns.
svn:r1406
Nick Mathewson [Mon, 3 Aug 2009 16:15:57 +0000 (16:15 +0000)]
Unit tests for DNS search.
svn:r1405
Nick Mathewson [Fri, 31 Jul 2009 17:35:42 +0000 (17:35 +0000)]
Refactor evbuffer_readln() into a search-for-eol function and an extract-line function.
svn:r1404
Nick Mathewson [Fri, 31 Jul 2009 17:34:47 +0000 (17:34 +0000)]
Refactor evbuffer_readln to use evbuffer_ptr; remove old evbuffer_iterator.
svn:r1403
Nick Mathewson [Fri, 31 Jul 2009 17:34:18 +0000 (17:34 +0000)]
Improved coverage for evbuffer_readln()
svn:r1402
Nick Mathewson [Fri, 31 Jul 2009 14:41:45 +0000 (14:41 +0000)]
New function to expose bufferevent.enabled
svn:r1401
Nick Mathewson [Thu, 30 Jul 2009 22:11:23 +0000 (22:11 +0000)]
Export sockaddr comparison functionality.
svn:r1400
Nick Mathewson [Thu, 30 Jul 2009 20:41:41 +0000 (20:41 +0000)]
More unit tests for Openssl, including initializing with no socket. Up to 75% coverage.
svn:r1399
Nick Mathewson [Thu, 30 Jul 2009 20:41:31 +0000 (20:41 +0000)]
Fix some bugs in bufferevent_socket_connect
svn:r1398
Nick Mathewson [Thu, 30 Jul 2009 20:41:21 +0000 (20:41 +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
Nick Mathewson [Thu, 30 Jul 2009 20:41:12 +0000 (20:41 +0000)]
Always retry SSL_write() with the same number you told it last time.
svn:r1396
Nick Mathewson [Thu, 30 Jul 2009 20:41:00 +0000 (20:41 +0000)]
Add a function to extract the SSL object from a bufferevent_openssl.
svn:r1395
Nick Mathewson [Thu, 30 Jul 2009 20:40:50 +0000 (20:40 +0000)]
Set the SSL_MODE_ACCEPT_MOVING_WRITE_BUFFER flag, and explain why.
svn:r1394
Nick Mathewson [Thu, 30 Jul 2009 20:40:40 +0000 (20:40 +0000)]
Use SSL_do_handshake in place of SSL_connect/SSL_accept
svn:r1393
Nick Mathewson [Thu, 30 Jul 2009 17:01:38 +0000 (17:01 +0000)]
More evconnlistener unit tests: bump its coverage from 71% to 83%.
svn:r1392
Nick Mathewson [Thu, 30 Jul 2009 17:01:21 +0000 (17:01 +0000)]
Export an ev_socklen_t.
svn:r1391
Nick Mathewson [Thu, 30 Jul 2009 17:00:56 +0000 (17:00 +0000)]
Accessor function to get a listener's associated fd
svn:r1390
Nick Mathewson [Thu, 30 Jul 2009 17:00:46 +0000 (17:00 +0000)]
Add unit test for parsing addresses with bad ports.
svn:r1389
Nick Mathewson [Tue, 28 Jul 2009 19:45:54 +0000 (19:45 +0000)]
Changelog entry for msvc fixes.
svn:r1388
Nick Mathewson [Tue, 28 Jul 2009 19:41:57 +0000 (19:41 +0000)]
Export evutil_str[n]casecmp as evutil_ascii_str[n]casecmp.
svn:r1387
Nick Mathewson [Tue, 28 Jul 2009 19:41:48 +0000 (19:41 +0000)]
Some tweaks to Brodie Thesfield's MSVC patch.
svn:r1386
Nick Mathewson [Tue, 28 Jul 2009 19:41:39 +0000 (19:41 +0000)]
Various MSVC cleanups from Brodie Thiesfield.
svn:r1385
Nick Mathewson [Tue, 28 Jul 2009 17:11:03 +0000 (17:11 +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
Nick Mathewson [Tue, 28 Jul 2009 05:09:06 +0000 (05:09 +0000)]
Fix a dumb bug where we would allocate too little memory in event_get_supported_methods().
svn:r1383