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:
Nick Mathewson 2010-01-14 18:22:00 -05:00
parent 4fd2dd9d83
commit bd03d0682c

21
event.c
View File

@ -109,6 +109,10 @@ struct event_base *current_base = NULL;
extern struct event_base *evsignal_base;
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 */
static void event_queue_insert(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)
event_err(1, "%s: calloc", __func__);
event_sigcb = NULL;
event_gotsig = 0;
detect_monotonic();
gettime(base, &base->event_tv);
@ -383,7 +390,7 @@ event_process_active(struct event_base *base)
ncalls--;
ev->ev_ncalls = ncalls;
(*ev->ev_callback)((int)ev->ev_fd, ev->ev_res, ev->ev_arg);
if (base->event_break)
if (event_gotsig || base->event_break)
return;
}
}
@ -488,6 +495,18 @@ event_base_loop(struct event_base *base, int flags)
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);
tv_p = &tv;