mirror of
https://github.com/cuberite/libevent.git
synced 2025-09-13 06:16:10 -04:00
Re-add event_siglcb; some old code _was_ still using it. :(
Such code really needs to migrate to use signal events instead. This reverts commit 072ae5887e8064da500adbd2d24050bb96fbe75d.
This commit is contained in:
parent
4fd2dd9d83
commit
bd03d0682c
21
event.c
21
event.c
@ -109,6 +109,10 @@ struct event_base *current_base = NULL;
|
|||||||
extern struct event_base *evsignal_base;
|
extern struct event_base *evsignal_base;
|
||||||
static int use_monotonic;
|
static int use_monotonic;
|
||||||
|
|
||||||
|
/* Handle signals - This is a deprecated interface */
|
||||||
|
int (*event_sigcb)(void); /* Signal callback when gotsig is set */
|
||||||
|
volatile sig_atomic_t event_gotsig; /* Set in signal handler */
|
||||||
|
|
||||||
/* Prototypes */
|
/* Prototypes */
|
||||||
static void event_queue_insert(struct event_base *, struct event *, int);
|
static void event_queue_insert(struct event_base *, struct event *, int);
|
||||||
static void event_queue_remove(struct event_base *, struct event *, int);
|
static void event_queue_remove(struct event_base *, struct event *, int);
|
||||||
@ -175,6 +179,9 @@ event_base_new(void)
|
|||||||
if ((base = calloc(1, sizeof(struct event_base))) == NULL)
|
if ((base = calloc(1, sizeof(struct event_base))) == NULL)
|
||||||
event_err(1, "%s: calloc", __func__);
|
event_err(1, "%s: calloc", __func__);
|
||||||
|
|
||||||
|
event_sigcb = NULL;
|
||||||
|
event_gotsig = 0;
|
||||||
|
|
||||||
detect_monotonic();
|
detect_monotonic();
|
||||||
gettime(base, &base->event_tv);
|
gettime(base, &base->event_tv);
|
||||||
|
|
||||||
@ -383,7 +390,7 @@ event_process_active(struct event_base *base)
|
|||||||
ncalls--;
|
ncalls--;
|
||||||
ev->ev_ncalls = ncalls;
|
ev->ev_ncalls = ncalls;
|
||||||
(*ev->ev_callback)((int)ev->ev_fd, ev->ev_res, ev->ev_arg);
|
(*ev->ev_callback)((int)ev->ev_fd, ev->ev_res, ev->ev_arg);
|
||||||
if (base->event_break)
|
if (event_gotsig || base->event_break)
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -488,6 +495,18 @@ event_base_loop(struct event_base *base, int flags)
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* You cannot use this interface for multi-threaded apps */
|
||||||
|
while (event_gotsig) {
|
||||||
|
event_gotsig = 0;
|
||||||
|
if (event_sigcb) {
|
||||||
|
res = (*event_sigcb)();
|
||||||
|
if (res == -1) {
|
||||||
|
errno = EINTR;
|
||||||
|
return (-1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
timeout_correct(base, &tv);
|
timeout_correct(base, &tv);
|
||||||
|
|
||||||
tv_p = &tv;
|
tv_p = &tv;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user