19 Commits

Author SHA1 Message Date
Nick Mathewson
5c142a7ee9 Merge remote-tracking branch 'origin/pr/98' 2014-01-21 14:53:47 -05:00
Diego Giagio
b1b69ac7c1 Implemented EV_CLOSED event for epoll backend (EPOLLRDHUP).
- Added new EV_CLOSED event - detects premature connection close
  by clients without the necessity of reading all the pending
  data. Does not depend on EV_READ and/or EV_WRITE.

- Added new EV_FEATURE_EARLY_CLOSED feature for epoll.
  Must be supported for listening to EV_CLOSED event.

- Added new regression test: test-closed.c

- All regression tests passed (test/regress and test/test.sh)

- strace output of test-closed using EV_CLOSED:
    socketpair(PF_LOCAL, SOCK_STREAM, 0, [6, 7]) = 0
    sendto(6, "test string\0", 12, 0, NULL, 0) = 12
    shutdown(6, SHUT_WR)                    = 0
    epoll_ctl(3, EPOLL_CTL_ADD, 7, {EPOLLRDHUP, {u32=7, u64=7}}) = 0
    epoll_wait(3, {{EPOLLRDHUP, {u32=7, u64=7}}}, 32, 3000) = 1
    epoll_ctl(3, EPOLL_CTL_MOD, 7, {EPOLLRDHUP, {u32=7, u64=7}}) = 0
    fstat(1, {st_mode=S_IFCHR|0620, st_rdev=makedev(136, 4), ...})
    mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYM...
    write(1, "closed_cb: detected connection close "..., 45) = 45
2014-01-17 23:20:42 -02:00
Joakim Soderberg
24d646666b Fix so that old nmake project still builds. 2014-01-14 17:53:47 +01:00
Nick Mathewson
8ab612e396 Whoops. It is gdi.lib, not gdi32.lib. (github issue #61) 2013-05-11 22:21:30 -04:00
Nick Mathewson
5ba8ab76e9 Fix test compilation with nmake: add the gdi.lib dependency
ACK: efekty
2013-05-10 21:38:26 -04:00
Nick Mathewson
85a40040d1 Add regress_finalize to makefile.nmake 2013-05-01 13:37:57 -04:00
Patrick Pelletier
729651260d a program to print out the error strings for winsock errors 2013-02-14 18:22:12 -08:00
Patrick Pelletier
974bfa0782 remove all exes on "make clean", not just regress.exe 2013-02-07 17:55:36 -08:00
Patrick Pelletier
eba0eb2e71 attempt to support OpenSSL in Makefile.nmake 2012-07-03 22:50:24 -07:00
Nick Mathewson
33124033fd Merge remote-tracking branch 'origin/patches-2.0' 2011-06-14 15:15:43 -04:00
Nick Mathewson
b031adf112 Don't break when building tests from git without python installed 2011-06-14 14:52:53 -04:00
Peter Rosin
d41f3ea24e Do not define WIN32 in Makefile.nmake 2011-05-25 20:04:53 -04:00
Nick Mathewson
4ebf9509f7 Fixes for MSVC compilation 2010-10-14 14:40:40 -04:00
Nick Mathewson
041989fb66 Rename regress_pthread.c to regress_thread.c 2010-08-24 12:42:24 -04:00
Nick Mathewson
4022b287f8 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.
2010-08-13 11:34:39 -04:00
Mike Smellie
cf249e7d99 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.
2010-07-19 14:55:15 +02:00
Nick Mathewson
5c7a7bca4c Fix windows and msvc build 2010-01-23 20:07:05 -05:00
Niels Provos
b8226390bc move dns utility functions into a separate file so that we can use them for http testing 2010-01-14 16:53:25 -08:00
Nick Mathewson
4ca9efeaef 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
2009-11-05 20:40:11 +00:00