|
fe0afabb
|
2012-01-24T10:29:31
|
|
Merge remote-tracking branch 'origin/patches-2.0'
Conflicts:
event.c
Edits required in:
evmap.c
|
|
3f18ad1b
|
2012-01-23T18:15:44
|
|
Fix a fd leak in event_reinit()
We were supposed to be closing the ev_signal_pair sockets.
|
|
6e41cdc1
|
2012-01-23T17:59:16
|
|
Fix a list corruption bug when using event_reinit() with signals present
While re-adding all the events, event_reinit() could add a signal
event, which could then cause evsig_add() to add the
base->sig.ev_signal event. Later on its merry path through
base->eventqueue, event_reinit() would find that same event and give
it to event_io_add a second time. This would make the ev_io_next
list for that fd become circular. Ouch!
|
|
27737d55
|
2012-01-21T12:55:15
|
|
Add function to check referential integrity of an event_base
|
|
d5a3fe5f
|
2012-01-09T12:00:04
|
|
Merge remote-tracking branch 'origin/patches-2.0'
|
|
f0325167
|
2012-01-09T11:33:38
|
|
Remove bogus casts of socket to int before calling ev_callback
This should make 64-bit windows act better.
Found by Mark Heily.
|
|
35c5c955
|
2011-12-07T11:49:52
|
|
Bypass event_add when using event_base_once() for a 0-sec timeout
Some people use event_base_once(EV_TIMEOUT) to make a callback get
called "immediately". But this is pretty roundabout: it uses the
timeout heap to immediately put the event onto the active queue, when
it could just use event_active. Additionally, it can lead to
surprising re-ordering behavior.
This patch changes event_base_once so it bypasses event_add() and
called event_active() directly on a pure-timeout event with an empty
timeout.
|
|
9ce5053d
|
2011-12-06T11:02:12
|
|
Merge remote-tracking branch 'origin/patches-2.0'
|
|
11f36a5f
|
2011-12-05T15:02:27
|
|
Be absolutely sure to clear pncalls before leaving event_signal_closure
I thought we'd fixed the cases where this could come up, but
apparently having an event_base_break() happen while processing
signal events could get us in trouble.
Found by Remi Gacogne. Sourceforge issue 3451433 .
|
|
f5b937e6
|
2011-11-14T18:22:08
|
|
Merge remote-tracking branch 'origin/patches-2.0'
|
|
e7874133
|
2011-11-14T17:33:02
|
|
Don't try to make notifiable event_base when no threading fns are configured
|
|
4e797f38
|
2011-11-14T17:32:22
|
|
Warn when unable to construct base because of failing make_base_notifiable
|
|
0cb70e33
|
2011-10-26T10:17:21
|
|
Merge remote-tracking branch 'origin/patches-2.0'
|
|
3c824bd3
|
2011-10-24T13:18:09
|
|
Update copyright dates to 2011.
|
|
212533e4
|
2011-10-21T19:53:32
|
|
New event_base_update_cache_time() to set cached_tv to current time
This function is particularly useful for selectively increasing
the accuracy of the cached time value in 'base' during callbacks
that take a long time to execute.
This function has no effect if the base is currently not in its
event loop or if timeval caching is disabled via EVENT_BASE_FLAG_NO_CACHE_TIME.
|
|
c8953d1b
|
2011-10-14T17:16:03
|
|
Add argument checks to some memory functions in `event.c'.
Add a zero check to the function `event_mm_malloc_',
i.e. simply return NULL if the sz argument is zero.
On failure, set errno to ENOMEM and return NULL.
Add a zero check to the function `event_mm_calloc_',
i.e. simply return NULL if either argument is zero.
Also add an unsigned integer multiplication check, and if an integer
overflow would occur, set errno to ENOMEM and return NULL.
On failure, set errno to ENOMEM and return NULL.
Add a NULL check to the function `event_mm_strdup_',
i.e. set errno to EINVAL and return NULL.
Also add an unsigned integer addition check, and if an integer
overflow would occur, set errno to ENOMEM and return NULL.
If a memory allocation error occurs, again set errno to ENOMEM
and return NULL.
Add unit tests to `test/regress_util.c'.
|
|
128c8d6c
|
2011-10-19T22:44:33
|
|
Merge remote-tracking branch 'origin/patches-2.0'
|
|
9e6a4efa
|
2011-10-19T17:44:17
|
|
More detailed message in case of libevent self-debugging failure.
|
|
3c55b5ee
|
2011-10-11T09:50:57
|
|
Make evbase_priority_init() and evbase_get_npriorities() threadsafe
|
|
ee3a4ee8
|
2011-10-11T11:12:34
|
|
Add event_base_get_npriorities() function.
|
|
084e68f3
|
2010-12-01T21:53:08
|
|
New EVLOOP_NO_EXIT_ON_EMPTY option to keep looping even when no events are pending
This can be useful if you want to start an event loop and then add or
remove events to it from another thread.
|
|
1ebe7955
|
2011-09-26T11:11:30
|
|
Merge remote-tracking branch 'origin/patches-2.0'
|
|
4e8eb6a5
|
2011-09-09T20:53:30
|
|
When a signal callback is activated to run multiple times, allow event_base_loopbreak to work even before they all have run.
Found by Abilio Marques.
|
|
2cbe115c
|
2011-08-24T16:17:56
|
|
Merge remote-tracking branch 'origin/patches-2.0'
|
|
5b18f130
|
2011-08-24T16:17:05
|
|
Make rate limiting work with common_timeout logic
|
|
3c63edd1
|
2011-08-11T12:47:21
|
|
Make the priority inversion code use gettime(), not evutil_gettimeofday()
Since we're computing the time after each callback, we might as well
update the time cache (if we're using it) and use monotonic time (if
we've got that).
|
|
a37a0c0e
|
2011-08-11T12:38:47
|
|
Make max_dispatch_interval able to apply only to low-priority events
Suggested by Alexander Drozdov
|
|
a9866aa8
|
2011-07-22T12:29:07
|
|
Optimization in event_process_active(): ignore maxcb & endtime for highest priority events.
|
|
9fa56bdf
|
2011-08-11T11:59:23
|
|
Make sure max_dispatch_callbacks is never negative
Suggested by Alexander Drozdov.
|
|
fd4de1e7
|
2010-12-01T20:44:05
|
|
Add event_config function to limit time/callbacks between calls to dispatch
|
|
67275433
|
2011-08-11T16:53:01
|
|
more event dbg updates
|
|
4b7d2984
|
2011-08-11T13:25:24
|
|
added timeout debug logs to include event ptr.
|
|
3baab0dc
|
2011-08-11T12:06:54
|
|
Added usec debug in another area for debug
|
|
ac43ce04
|
2011-08-11T11:56:26
|
|
Debug addition for printing usec on TIMEOUT debugging.
|
|
e91d57f1
|
2011-08-08T16:20:53
|
|
Merge remote-tracking branch 'github/21_split_functions'
Conflicts:
event.c
The conflicts were with the 21_faster_timeout_adj branch, which
added a "reinsert" function that needed to get renamed to
"reinsert_timeout". Also, some of the code that 21_split_functions
changes got removed by 21_faster_timeout_adj.
|
|
24e24805
|
2011-08-08T16:17:18
|
|
Merge remote-tracking branch 'github/21_faster_timeout_adj'
|
|
78fb99ce
|
2011-07-04T12:22:54
|
|
Merge remote-tracking branch 'origin/patches-2.0'
|
|
e7fe9270
|
2011-07-04T12:16:08
|
|
Merge remote-tracking branch 'github/20_global_locks_init' into patches-2.0
|
|
5099d858
|
2011-06-08T14:29:36
|
|
Merge remote-tracking branch 'origin/patches-2.0'
|
|
09fe97da
|
2011-06-08T14:24:45
|
|
Replace an assertion for event_base_free(NULL) with a check-and-warn
event_base_free(NULL) means "free the current event base".
Previously, it would assert if there was no 'current' base. Now it
just warns and returns.
Reported by Gilad Benjamini
|
|
e40bafe7
|
2011-06-04T21:40:55
|
|
Merge remote-tracking branch 'origin/patches-2.0'
Conflicts:
Makefile.am
WIN32-Code/event2/event-config.h
configure.in
test/regress_ssl.c
|
|
27ce38b6
|
2011-06-01T17:27:28
|
|
Avoid a segfault when all methods are disabled or broken
|
|
94b8e676
|
2011-05-27T22:54:16
|
|
Allow base-notification functions to exist without setting an fd
The kqueue and evport backends can make good use of this.
|
|
9f560bfa
|
2011-05-25T19:50:56
|
|
Use "_WIN32", not WIN32: it's standard and we don't need to fake it
This patch was automatically generated with perl.
Based on a patch by Peter Rosin.
|
|
b683cae3
|
2011-04-22T12:01:25
|
|
Avoid race-condition when initializing global locks
Previously, we did stuff like
if (!lock)
EVTHREAD_ALLOC_LOCK(lock,0);
for the evsig base global lock, the arc4random lock, and the debug_map
lock. But that's potentially racy! Instead, we move the
responisiblity for global lock initialization to the functions where
we set up the lock callbacks.
(Rationale: We already require that you set up the locking callbacks
before you create any event_base, and that you do so exatly once.)
|
|
2a83ecc8
|
2011-03-07T23:01:54
|
|
In the 2.1 branch, let's try out lazy gettimeofday/clock_gettime comparison
For now, we'll only check for gettimeofday jumps once every 5 seconds.
Let's see how that works.
This reverts commit 5209fadfd07af3f3379ac607582c37933b33e044.
|
|
4560b31b
|
2011-03-07T23:00:45
|
|
Merge remote branch 'origin/patches-2.0'
Conflicts:
event-internal.h
|
|
5209fadf
|
2011-03-07T22:59:19
|
|
Disable lazy gettimeofday/clock_gettime comparison for now
|
|
a459ef70
|
2011-03-03T15:34:22
|
|
Have event_base_gettimeofday_cached() always return wall-clock time
Based on code by Dave Hart
|
|
d1cee3b1
|
2011-02-23T01:08:54
|
|
Make event_count maintainance branchless at the expense of an extra shift. Needs benchmarking
|
|
efc4dc50
|
2011-02-23T00:59:20
|
|
possible optimization: split event_queue_insert/remove into separate functions. needs testing
|
|
77a96fd9
|
2011-02-02T20:09:16
|
|
Remove a needless base-notify when rescheduling the first timeout
We don't need to wake up the base when rescheduling the timeout that
will expire first: the base will already wake up, see that nothing is
ready, and go back to sleep.
|
|
e47042fe
|
2011-02-02T20:05:41
|
|
Optimize the case where we reinsert an existing timeout
|
|
0915ca0a
|
2011-01-02T08:43:45
|
|
Include evconfig-private.h in internal files for great good.
|
|
5beeec9d
|
2010-12-01T21:28:03
|
|
Correctly notify the main thread when activating an event from a subthread
|
|
2e5a175b
|
2010-11-25T23:03:46
|
|
Merge remote branch 'github/20_once_fixes'
|
|
652024b6
|
2010-11-23T13:08:07
|
|
Remove _event_initialized(); make event_initialized() a function(); make it consistent on windows and non-windows
|
|
3ab578f8
|
2010-11-20T01:41:34
|
|
Make sure the CLOEXEC flag is set on fds we open for base notification
|
|
2d5e1bd0
|
2010-11-14T19:32:13
|
|
Do not let EVLOOP_ONCE exit the loop until all deferred callbacks have run
|
|
0617a818
|
2010-11-14T19:25:54
|
|
Make EVLOOP_ONCE ignore internal events
Merely getting an internal notification event from having an event
added or deleted from another thread should not cause
event_base_loop(base, EVLOOP_ONCE) to exit; previously, it did.
|
|
b81217f7
|
2010-10-27T17:37:32
|
|
Fix signal handler types for win64.
|
|
19c71e74
|
2010-10-27T10:36:08
|
|
Fix som event_warns that should have been event_warnx
|
|
e56ff65a
|
2010-10-26T11:01:58
|
|
Fix a minor syntax error that most compilers didn't care about
|
|
7ad90f6a
|
2010-10-09T00:02:31
|
|
Merge branch '20_internal_prio'
|
|
e1198997
|
2010-09-21T22:44:39
|
|
Make event.c debugging messages report fds
|
|
90651b32
|
2010-09-17T00:24:50
|
|
Put internal events at highest priority
(If we allow user events to starve internal events, then internal events
never actually happen, signals don't get acked, etc)
|
|
720bd933
|
2010-09-15T01:08:39
|
|
Warn when using the error-prone EV_SIGNAL interface in an error-prone way. Also, fix a couple of race conditions in signal.c
When using the signal.c signal backend, Libevent currently only allows
one event_base to actually receive signals at a time. (This has been
the behavior since at least 1.4 and probably much earlier.) Now, we
detect and warn if you're likely to be racing about which signal goes
to which thread.
We also add a lock to control modifications of the evsig_base field,
to avoid race conditions like those found by Jason Toffaletti.
Also, more comments. Comments are good.
|
|
d98511c0
|
2010-09-09T14:36:45
|
|
Make event_base_virtual_del() notify the base if needed
|
|
71b68014
|
2010-09-08T20:33:21
|
|
Don't decrement virutal event count twice in connect_complete.
|
|
3658b169
|
2010-09-08T14:12:12
|
|
Merge remote branch 'chrisd/iocp-fixes4'
Conflicts:
test/regress_thread.c
|
|
4632b78e
|
2010-09-08T13:22:55
|
|
Minimize calls to base_notify implementation functions, thereby avoiding needless syscalls
The trick here is that if we already told the base to wake up, and it
hasn't woken up yet, we don't need to tell it to wake up again. This
should help lots with inherently multithreaded code like IOCP.
|
|
c7a06bfa
|
2010-09-08T13:02:58
|
|
Avoid needlessly calling evthread_notify_base() when the loop is not running
Also make sure that we always hold the base lock when calling evthread_notify_base.
|
|
17a14f1a
|
2010-09-01T11:04:57
|
|
Only process up to MAX_DEFERRED deferred_cbs at a time.
If threads queue callbacks while event_process_deferred_callbacks is
running, the loop may spin long enough to significantly skew timers.
A unit test stressing this behavior is also in this commit.
|
|
2447fe88
|
2010-08-28T04:07:48
|
|
Add event_config_set_num_cpus_hint for tuning thread pools, etc.
|
|
76f7e7ae
|
2010-08-17T05:02:00
|
|
Some IOCP bufferevent tweaks.
- Increment reference count of bufferevents before initiating overlapped
operations to prevent the destructor from being called while operations
are pending. The only portable way of canceling overlapped ops is to
close the socket.
- Translate error codes to WSA* codes.
- Better handling of errors.
- Add an interface to add and del "virtual" events. Because IOCP
bufferevents don't register any events with the base, the event loop
has no way of knowing they exist. This causes the loop to terminate
prematurely. event_base_{add,del}_virtual increment/decrement base's
event count so the loop runs while there are any enabled IOCP
bufferevents.
|
|
d844242f
|
2010-08-28T02:08:27
|
|
Stop IOCP when freeing the event_base.
|
|
495ed667
|
2010-09-01T16:36:30
|
|
Close th_notify_fds and open a new pair on reinit
After a fork, you want subthreads to wake up the event_base in the
child process, not to have the child process and the main process
fight over who wakes up whom.
Related to a problem found by Nicholas Marriott while debugging
3048812.
|
|
d61b2f33
|
2010-08-26T15:09:58
|
|
Fix an issue with forking and signal socketpairs in select/poll backends
Nicholas Marriott identifies an issue where a signal socketpair
doesn't get recreated if the event backend doesn't set event_reinit.
See bug 3048812
There may be a similar issue with respect to th_notify_fd
|
|
f1074b77
|
2010-08-23T12:01:45
|
|
Detect events with no ev_base; warn instead of crashing
|
|
e0972c21
|
2010-08-17T13:18:18
|
|
Use conditions instead of current_event_lock to fix a deadlock.
Avi Bab correctly noted as bug 3044479 the fact that any thread
blocking on current_event_lock will do so while holding
th_base_lock, making it impossible for the currently running event's
callback to call any other functions that require th_base_lock.
This patch switches the current_event_lock code to instead use a
condition variable that we wait on if we're trying to mess with
a currently-executing event, and that we signal when we're done
executing a callback if anybody is waiting on it.
|
|
ec347b92
|
2010-07-07T16:45:03
|
|
Move event-config.h to include/event2
This change means that all required include files are in event2, and
all files not in event2/* are optional.
|
|
42a8c711
|
2010-07-31T17:10:04
|
|
Build more cleanly with NetBSDs that dislike toupper(char)
To be fair, when char can be signed, if toupper doesn't take negative
characters, toupper(char) is a very bad idea. So let's just use the
nice safe EVUTIL_TOUPPER instead. (It explicitly only upcases ASCII,
but we only use it for identifiers that we know to be ASCII anyway).
|
|
fc5e0a23
|
2010-07-05T14:39:39
|
|
Don't race when calling event_active/event_add on a running signal event
There was previously no lock protecting the signal event's
ev_ncalls/ev_pncalls fields, which were accessed by all of
event_signal_closure, event_add_internal, event_del_internal, and
event_active_nolock. This patch fixes this race by using the
current_event_lock in the same way it's used to prevent
event_del_internal from touching an event that's currently running.
|
|
61e1eeec
|
2010-07-05T13:24:45
|
|
Tidy up the code in evthread_make_base_notifiable a little
Previously, we had a few conditional statements with the "if (...)"
inside an #ifdef and the body outside. That kind of thing is hard to
read.
|
|
a5bc15b2
|
2010-07-05T13:24:12
|
|
Drain th_notify_fd[0] more bytes at a time.
|
|
17522d2a
|
2010-07-05T13:17:47
|
|
Fix a deadlock related to event-base notification. Diagnosed by Zhou Li, Avi Bab, and Scott Lamb.
The problem was that the thread doing the notification could block on
write in evthread_notify_base_default while holding the th_base_lock.
The main thread would never drain th_notify_fd[0], since it would need
th_base_lock to actually trigger events.
|
|
6d195109
|
2010-05-13T14:59:33
|
|
Avoid event_del on uninitialized event in event_base_free
This was mostly harmless, since the event was cleared with calloc, but
still it's not a correct thing to do.
|
|
c16e6844
|
2010-05-04T13:27:36
|
|
Rename current_base symbol to event_global_current_base_
The "current_base" symbol was never actually declared in an exported
header; it's hideously deprecated, and it was the one remaining
exported symbol (fwict) that was prefixed with neither ev nor
bufferevent nor _ev nor _bufferevent.
codesearch.google.com turns up no actual attempts to use our
current_base from outside libevent.
|
|
99e50e90
|
2010-05-04T12:57:40
|
|
Fix symbol conflict between mm_*() macros and libmm
Our mm_malloc, mm_calloc, etc functions were all exported, since C
hasn't got a nice portable way to say "we want to use this function
inside our library but not export it to others". But they apparently
conflict with anything else that calls its symbols mm_*, as libmm does.
This patch renames the mm_*() functions to event_mm_*_(, and defines
maros in mm_internal so that all the code we have that uses mm_*()
will still work. New code should also prefer the mm_*() macro names.
Reported by Gernot Tenchio. Fixes sf bug 2996541
|
|
71afc525
|
2010-05-03T11:37:16
|
|
Fix nonstandard TAILQ_FOREACH_REVERSE() definition
Every current BSD system providing TAILQ_* macros define
TAILQ_FOREACH_REVERSE in this order:
TAILQ_FOREACH_REVERSE(var, head, field, headname)
However, libevent defines it in another order:
TAILQ_FOREACH_REVERSE(var, head, headname, field)
Here's a trivial patch to have libevent compatible with stock queue.h headers.
-Frank.
[From sourceforge patch 2995179. codesearch.google.com confirms that
the only people defining TAILQ_FOREACH_REVERSE our way are people
using it in a compatibility header like us. Did we copy this from
OpenSSH or something?]
-Nick
|
|
9ecf0d48
|
2010-04-28T12:03:08
|
|
Catch attempts to enable debug_mode too late
Debug mode needs to be enabled before any event is setup or any
event_base is created. Otherwise, we will not have recorded when events
were first setup or added, and so it will look like a bug later when we
delete or free them.
I have already confused myself because of this requirement, so let's
make Libevent catch it for the next poor forgetful developer like me.
|
|
06a4443a
|
2010-04-09T15:28:26
|
|
Unit-test every evbuffer_add_file() implementation.
Previously, we'd only test the default one, even if the others were still
compiled in.
|
|
b557b175
|
2010-03-21T13:28:48
|
|
Detect and refuse reentrant event_base_loop() calls
Calling event_base_loop on a base from inside a callback invoked by
that same base, or from two threads at once, has long been a way to
get exceedingly hard-to-diagnose errors. This patch adds code to
detect such reentrant invocatinos, and exit quickly with a warning
that should explain what went wrong.
|
|
70a44b61
|
2010-03-12T18:35:15
|
|
Avoid a spurious close(-1) on Linux
On Linux, we use only one fd to do main-thread signaling (since we have
eventfd()), so we don't need to close th_notify_fd[1] as we would if we were
using a socketpair.
|
|
cdd4c490
|
2010-03-11T00:38:46
|
|
Try to comment some of the event code more
|
|
2c2618d8
|
2010-03-05T13:00:15
|
|
more whitespace normalization
|
|
c7cf6f00
|
2010-03-05T12:47:46
|
|
Replace users of "int fd" with "evutil_socket_t fd" in portable code
Remeber, win32 has a socket type that's actually a handle, so if
there's a chance that code is run on win32, we can't use "int" as the
socket type.
This isn't a blind search-and-replace: sometimes an fd is really in
fact for a file, and not a socket at all.
|
|
17efc1cd
|
2010-03-04T01:25:51
|
|
Update all our copyright notices to say "2010"
|
|
ad85908a
|
2010-02-28T12:52:39
|
|
Fix compilation with --disable-debug-mode
|
|
38ec0a77
|
2010-02-23T14:24:10
|
|
Fix a bug in resetting timeouts on persistent events when IO triggers.
When we fixed persistent timeouts to make them reset themselves
based on the previous scheduled time rather than the current
time... we made them do so regardless of whether the event was
triggering because of a timeout or not!
This was of course bogus. When a _timeout_ triggers, we should
schedule the event for N seconds based on the last
_schedule_ time... but when IO triggers, we should reset the
timeout for N seconds after now.
|