Make init_loop_data a little safer to use
This commit is contained in:
parent
c71bb877c3
commit
18dd13c872
@ -137,7 +137,7 @@ new(PyTypeObject *type, PyObject *args, PyObject UNUSED *kwds) {
|
|||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
self = (ChildMonitor *)type->tp_alloc(type, 0);
|
self = (ChildMonitor *)type->tp_alloc(type, 0);
|
||||||
if (!init_loop_data(&self->io_loop_data, 6, SIGINT, SIGHUP, SIGTERM, SIGCHLD, SIGUSR1, SIGUSR2)) return PyErr_SetFromErrno(PyExc_OSError);
|
if (!init_loop_data(&self->io_loop_data, SIGINT, SIGHUP, SIGTERM, SIGCHLD, SIGUSR1, SIGUSR2, 0)) return PyErr_SetFromErrno(PyExc_OSError);
|
||||||
self->talk_fd = talk_fd;
|
self->talk_fd = talk_fd;
|
||||||
self->listen_fd = listen_fd;
|
self->listen_fd = listen_fd;
|
||||||
if (self == NULL) return PyErr_NoMemory();
|
if (self == NULL) return PyErr_NoMemory();
|
||||||
|
|||||||
@ -33,12 +33,14 @@ handle_signal(int sig_num UNUSED, siginfo_t *si, void *ucontext UNUSED) {
|
|||||||
|
|
||||||
|
|
||||||
bool
|
bool
|
||||||
init_loop_data(LoopData *ld, size_t num_signals, ...) {
|
init_loop_data(LoopData *ld, ...) {
|
||||||
ld->num_handled_signals = num_signals;
|
ld->num_handled_signals = 0;
|
||||||
va_list valist;
|
va_list valist;
|
||||||
va_start(valist, num_signals);
|
va_start(valist, ld);
|
||||||
for (size_t i = 0; i < ld->num_handled_signals; i++) {
|
while (true) {
|
||||||
ld->handled_signals[i] = va_arg(valist, int);
|
int sig = va_arg(valist, int);
|
||||||
|
if (!sig) break;
|
||||||
|
ld->handled_signals[ld->num_handled_signals++] = sig;
|
||||||
}
|
}
|
||||||
va_end(valist);
|
va_end(valist);
|
||||||
#ifdef HAS_EVENT_FD
|
#ifdef HAS_EVENT_FD
|
||||||
|
|||||||
@ -44,7 +44,7 @@ typedef struct {
|
|||||||
} LoopData;
|
} LoopData;
|
||||||
typedef void(*handle_signal_func)(const siginfo_t* siginfo, void *data);
|
typedef void(*handle_signal_func)(const siginfo_t* siginfo, void *data);
|
||||||
|
|
||||||
bool init_loop_data(LoopData *ld, size_t num_handled_signals, ...);
|
bool init_loop_data(LoopData *ld, ...);
|
||||||
void free_loop_data(LoopData *ld);
|
void free_loop_data(LoopData *ld);
|
||||||
void wakeup_loop(LoopData *ld, bool in_signal_handler, const char*);
|
void wakeup_loop(LoopData *ld, bool in_signal_handler, const char*);
|
||||||
void read_signals(int fd, handle_signal_func callback, void *data);
|
void read_signals(int fd, handle_signal_func callback, void *data);
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user