mirror of
https://github.com/cuberite/libevent.git
synced 2025-09-10 13:04:23 -04:00
Add an option to disable the timeval cache.
svn:r1518
This commit is contained in:
parent
693c24ef9d
commit
ab96b5f3f5
@ -40,7 +40,7 @@ Changes in 2.0.3-alpha:
|
|||||||
o Add a new bufferevent_socket_connect_hostname() to encapsulate the resolve-then-connect operation.
|
o Add a new bufferevent_socket_connect_hostname() to encapsulate the resolve-then-connect operation.
|
||||||
o Build kqueue.c correctly on GNU/kFreeBSD platforms. Patch pulled upstream from Debian.
|
o Build kqueue.c correctly on GNU/kFreeBSD platforms. Patch pulled upstream from Debian.
|
||||||
o Alternative queue-based timeout algorithm for programs that use a large number of timeouts with the same value.
|
o Alternative queue-based timeout algorithm for programs that use a large number of timeouts with the same value.
|
||||||
|
o New event_base_config option to disable the timeval cache entirely.
|
||||||
|
|
||||||
Changes in 2.0.2-alpha:
|
Changes in 2.0.2-alpha:
|
||||||
o Add a new flag to bufferevents to make all callbacks automatically deferred.
|
o Add a new flag to bufferevents to make all callbacks automatically deferred.
|
||||||
|
@ -181,6 +181,8 @@ struct event_base {
|
|||||||
struct event_iocp_port *iocp;
|
struct event_iocp_port *iocp;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
enum event_base_config_flag flags;
|
||||||
|
|
||||||
/* Notify main thread to wake up break, etc. */
|
/* Notify main thread to wake up break, etc. */
|
||||||
int th_notify_fd[2];
|
int th_notify_fd[2];
|
||||||
struct event th_notify;
|
struct event th_notify;
|
||||||
|
28
event.c
28
event.c
@ -180,6 +180,20 @@ gettime(struct event_base *base, struct timeval *tp)
|
|||||||
return (evutil_gettimeofday(tp, NULL));
|
return (evutil_gettimeofday(tp, NULL));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static inline void
|
||||||
|
clear_time_cache(struct event_base *base)
|
||||||
|
{
|
||||||
|
base->tv_cache.tv_sec = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
static inline void
|
||||||
|
update_time_cache(struct event_base *base)
|
||||||
|
{
|
||||||
|
base->tv_cache.tv_sec = 0;
|
||||||
|
if (!(base->flags & EVENT_BASE_FLAG_NO_CACHE_TIME))
|
||||||
|
gettime(base, &base->tv_cache);
|
||||||
|
}
|
||||||
|
|
||||||
struct event_base *
|
struct event_base *
|
||||||
event_init(void)
|
event_init(void)
|
||||||
{
|
{
|
||||||
@ -281,6 +295,8 @@ event_base_new_with_config(struct event_config *cfg)
|
|||||||
event_deferred_cb_queue_init(&base->defer_queue);
|
event_deferred_cb_queue_init(&base->defer_queue);
|
||||||
base->defer_queue.notify_fn = notify_base_cbq_callback;
|
base->defer_queue.notify_fn = notify_base_cbq_callback;
|
||||||
base->defer_queue.notify_arg = base;
|
base->defer_queue.notify_arg = base;
|
||||||
|
if (cfg)
|
||||||
|
base->flags = cfg->flags;
|
||||||
|
|
||||||
evmap_io_initmap(&base->io);
|
evmap_io_initmap(&base->io);
|
||||||
evmap_signal_initmap(&base->sigmap);
|
evmap_signal_initmap(&base->sigmap);
|
||||||
@ -1054,8 +1070,7 @@ event_base_loop(struct event_base *base, int flags)
|
|||||||
* as we invoke user callbacks. */
|
* as we invoke user callbacks. */
|
||||||
EVBASE_ACQUIRE_LOCK(base, EVTHREAD_WRITE, th_base_lock);
|
EVBASE_ACQUIRE_LOCK(base, EVTHREAD_WRITE, th_base_lock);
|
||||||
|
|
||||||
/* clear time cache */
|
clear_time_cache(base);
|
||||||
base->tv_cache.tv_sec = 0;
|
|
||||||
|
|
||||||
if (base->sig.ev_signal_added)
|
if (base->sig.ev_signal_added)
|
||||||
evsig_base = base;
|
evsig_base = base;
|
||||||
@ -1099,14 +1114,14 @@ event_base_loop(struct event_base *base, int flags)
|
|||||||
/* update last old time */
|
/* update last old time */
|
||||||
gettime(base, &base->event_tv);
|
gettime(base, &base->event_tv);
|
||||||
|
|
||||||
/* clear time cache */
|
clear_time_cache(base);
|
||||||
base->tv_cache.tv_sec = 0;
|
|
||||||
|
|
||||||
res = evsel->dispatch(base, tv_p);
|
res = evsel->dispatch(base, tv_p);
|
||||||
|
|
||||||
if (res == -1)
|
if (res == -1)
|
||||||
return (-1);
|
return (-1);
|
||||||
gettime(base, &base->tv_cache);
|
|
||||||
|
update_time_cache(base);
|
||||||
|
|
||||||
timeout_process(base);
|
timeout_process(base);
|
||||||
|
|
||||||
@ -1118,8 +1133,7 @@ event_base_loop(struct event_base *base, int flags)
|
|||||||
done = 1;
|
done = 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* clear time cache */
|
clear_time_cache(base);
|
||||||
base->tv_cache.tv_sec = 0;
|
|
||||||
|
|
||||||
EVBASE_RELEASE_LOCK(base, EVTHREAD_WRITE, th_base_lock);
|
EVBASE_RELEASE_LOCK(base, EVTHREAD_WRITE, th_base_lock);
|
||||||
|
|
||||||
|
@ -167,7 +167,11 @@ enum event_base_config_flag {
|
|||||||
an event_base. */
|
an event_base. */
|
||||||
EVENT_BASE_FLAG_IGNORE_ENV = 0x02,
|
EVENT_BASE_FLAG_IGNORE_ENV = 0x02,
|
||||||
/** Windows only: enable the IOCP dispatcher at startup */
|
/** Windows only: enable the IOCP dispatcher at startup */
|
||||||
EVENT_BASE_FLAG_STARTUP_IOCP = 0x04
|
EVENT_BASE_FLAG_STARTUP_IOCP = 0x04,
|
||||||
|
/** Instead of checking the current time every time the event loop is
|
||||||
|
ready to run timeout callbacks, check after each timeout callback.
|
||||||
|
*/
|
||||||
|
EVENT_BASE_FLAG_NO_CACHE_TIME = 0x08
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
Loading…
x
Reference in New Issue
Block a user