mirror of
https://github.com/cuberite/libevent.git
synced 2025-09-08 11:53:00 -04:00
Merge remote-tracking branch 'origin/patches-2.0'
This commit is contained in:
commit
5099d858b1
@ -151,6 +151,8 @@ evbuffer_overlapped_new(evutil_socket_t fd)
|
||||
struct evbuffer_overlapped *evo;
|
||||
|
||||
evo = mm_calloc(1, sizeof(struct evbuffer_overlapped));
|
||||
if (!evo)
|
||||
return NULL;
|
||||
|
||||
TAILQ_INIT(&evo->buffer.callbacks);
|
||||
evo->buffer.refcnt = 1;
|
||||
|
10
event.c
10
event.c
@ -682,13 +682,19 @@ event_base_free(struct event_base *base)
|
||||
/* XXXX grab the lock? If there is contention when one thread frees
|
||||
* the base, then the contending thread will be very sad soon. */
|
||||
|
||||
/* event_base_free(NULL) is how to free the current_base if we
|
||||
* made it with event_init and forgot to hold a reference to it. */
|
||||
if (base == NULL && current_base)
|
||||
base = current_base;
|
||||
/* If we're freeing current_base, there won't be a current_base. */
|
||||
if (base == current_base)
|
||||
current_base = NULL;
|
||||
|
||||
/* Don't actually free NULL. */
|
||||
if (base == NULL) {
|
||||
event_warnx("%s: no base to free", __func__);
|
||||
return;
|
||||
}
|
||||
/* XXX(niels) - check for internal events first */
|
||||
EVUTIL_ASSERT(base);
|
||||
|
||||
#ifdef _WIN32
|
||||
event_base_stop_iocp(base);
|
||||
|
9
evmap.c
9
evmap.c
@ -128,7 +128,8 @@ HT_GENERATE(event_io_map, event_map_entry, map_node, hashsocket, eqsocket,
|
||||
}, \
|
||||
{ \
|
||||
_ent = mm_calloc(1,sizeof(struct event_map_entry)+fdinfo_len); \
|
||||
EVUTIL_ASSERT(_ent); \
|
||||
if (EVUTIL_UNLIKELY(_ent == NULL)) \
|
||||
return (-1); \
|
||||
_ent->fd = slot; \
|
||||
(ctor)(&_ent->ent.type); \
|
||||
_HT_FOI_INSERT(map_node, map, &_key, _ent, ptr) \
|
||||
@ -160,14 +161,16 @@ void evmap_io_clear(struct event_io_map *ctx)
|
||||
(x) = (struct type *)((map)->entries[slot])
|
||||
/* As GET_SLOT, but construct the entry for 'slot' if it is not present,
|
||||
by allocating enough memory for a 'struct type', and initializing the new
|
||||
value by calling the function 'ctor' on it.
|
||||
value by calling the function 'ctor' on it. Makes the function
|
||||
return -1 on allocation failure.
|
||||
*/
|
||||
#define GET_SIGNAL_SLOT_AND_CTOR(x, map, slot, type, ctor, fdinfo_len) \
|
||||
do { \
|
||||
if ((map)->entries[slot] == NULL) { \
|
||||
(map)->entries[slot] = \
|
||||
mm_calloc(1,sizeof(struct type)+fdinfo_len); \
|
||||
EVUTIL_ASSERT((map)->entries[slot] != NULL); \
|
||||
if (EVUTIL_UNLIKELY((map)->entries[slot] == NULL)) \
|
||||
return (-1); \
|
||||
(ctor)((struct type *)(map)->entries[slot]); \
|
||||
} \
|
||||
(x) = (struct type *)((map)->entries[slot]); \
|
||||
|
Loading…
x
Reference in New Issue
Block a user