diff options
Diffstat (limited to 'libevent/WIN32-Code')
| -rw-r--r-- | libevent/WIN32-Code/config.h | 231 | ||||
| -rw-r--r-- | libevent/WIN32-Code/misc.c | 91 | ||||
| -rw-r--r-- | libevent/WIN32-Code/misc.h | 11 | ||||
| -rw-r--r-- | libevent/WIN32-Code/win32.c | 437 |
4 files changed, 0 insertions, 770 deletions
diff --git a/libevent/WIN32-Code/config.h b/libevent/WIN32-Code/config.h deleted file mode 100644 index aed9774..0000000 --- a/libevent/WIN32-Code/config.h +++ /dev/null @@ -1,231 +0,0 @@ -/* config.h.in. Generated automatically from configure.in by autoheader. */ -/* Define if kqueue works correctly with pipes */ -#undef HAVE_WORKING_KQUEUE - -/* Define to `unsigned long long' if <sys/types.h> doesn't define. */ -#undef u_int64_t - -/* Define to `unsigned int' if <sys/types.h> doesn't define. */ -#undef u_int32_t - -/* Define to `unsigned short' if <sys/types.h> doesn't define. */ -#undef u_int16_t - -/* Define to `unsigned char' if <sys/types.h> doesn't define. */ -#undef u_int8_t - -/* Define if timeradd is defined in <sys/time.h> */ -#undef HAVE_TIMERADD -#ifndef HAVE_TIMERADD -#undef timersub -#define timeradd(tvp, uvp, vvp) \ - do { \ - (vvp)->tv_sec = (tvp)->tv_sec + (uvp)->tv_sec; \ - (vvp)->tv_usec = (tvp)->tv_usec + (uvp)->tv_usec; \ - if ((vvp)->tv_usec >= 1000000) { \ - (vvp)->tv_sec++; \ - (vvp)->tv_usec -= 1000000; \ - } \ - } while (0) -#define timersub(tvp, uvp, vvp) \ - do { \ - (vvp)->tv_sec = (tvp)->tv_sec - (uvp)->tv_sec; \ - (vvp)->tv_usec = (tvp)->tv_usec - (uvp)->tv_usec; \ - if ((vvp)->tv_usec < 0) { \ - (vvp)->tv_sec--; \ - (vvp)->tv_usec += 1000000; \ - } \ - } while (0) -#endif /* !HAVE_TIMERADD */ - -#undef HAVE_TIMERCLEAR -#ifndef HAVE_TIMERCLEAR -#define timerclear(tvp) (tvp)->tv_sec = (tvp)->tv_usec = 0 -#endif - -#define HAVE_TIMERCMP -#ifndef HAVE_TIMERCMP -#undef timercmp -#define timercmp(tvp, uvp, cmp) \ - (((tvp)->tv_sec == (uvp)->tv_sec) ? \ - ((tvp)->tv_usec cmp (uvp)->tv_usec) : \ - ((tvp)->tv_sec cmp (uvp)->tv_sec)) -#endif - -#undef HAVE_TIMERISSET -#ifndef HAVE_TIMERISSET -#undef timerisset -#define timerisset(tvp) ((tvp)->tv_sec || (tvp)->tv_usec) -#endif - -/* Define if TAILQ_FOREACH is defined in <sys/queue.h> */ -#define HAVE_TAILQFOREACH -#ifndef HAVE_TAILQFOREACH -#define TAILQ_FIRST(head) ((head)->tqh_first) -#define TAILQ_END(head) NULL -#define TAILQ_NEXT(elm, field) ((elm)->field.tqe_next) -#define TAILQ_FOREACH(var, head, field) \ - for((var) = TAILQ_FIRST(head); \ - (var) != TAILQ_END(head); \ - (var) = TAILQ_NEXT(var, field)) -#define TAILQ_INSERT_BEFORE(listelm, elm, field) do { \ - (elm)->field.tqe_prev = (listelm)->field.tqe_prev; \ - (elm)->field.tqe_next = (listelm); \ - *(listelm)->field.tqe_prev = (elm); \ - (listelm)->field.tqe_prev = &(elm)->field.tqe_next; \ -} while (0) -#endif /* TAILQ_FOREACH */ - -/* Define if /dev/poll is available */ -#undef HAVE_DEVPOLL - -/* Define if your system supports the epoll system calls */ -#undef HAVE_EPOLL - -/* Define if you have the `epoll_ctl' function. */ -#undef HAVE_EPOLL_CTL - -/* Define if you have the `err' function. */ -#undef HAVE_ERR - -/* Define if you have the `fcntl' function. */ -#undef HAVE_FCNTL - -/* Define if you have the <fcntl.h> header file. */ -#undef HAVE_FCNTL_H - -/* Define if you have the `gettimeofday' function. */ -#define HAVE_GETTIMEOFDAY 1 - -/* Define if you have the <inttypes.h> header file. */ -#define HAVE_INTTYPES_H 1 - -/* Define if you have the `kqueue' function. */ -#undef HAVE_KQUEUE - -/* Define if you have the `socket' library (-lsocket). */ -#undef HAVE_LIBSOCKET - -/* Define if you have the <memory.h> header file. */ -#define HAVE_MEMORY_H 1 - -/* Define if you have the `poll' function. */ -#undef HAVE_POLL - -/* Define if you have the <poll.h> header file. */ -#undef HAVE_POLL_H - -/* Define if your system supports POSIX realtime signals */ -#undef HAVE_RTSIG - -/* Define if you have the `select' function. */ -#undef HAVE_SELECT - -/* Define if F_SETFD is defined in <fcntl.h> */ -#undef HAVE_SETFD - -/* Define if you have the <signal.h> header file. */ -#undef HAVE_SIGNAL_H - -/* Define if you have the `sigtimedwait' function. */ -#undef HAVE_SIGTIMEDWAIT - -/* Define if you have the <stdarg.h> header file. */ -#define HAVE_STDARG_H 1 - -/* Define if you have the <stdint.h> header file. */ -#undef HAVE_STDINT_H - -/* Define if you have the <stdlib.h> header file. */ -#define HAVE_STDLIB_H 1 - -/* Define if you have the <strings.h> header file. */ -#undef HAVE_STRINGS_H - -/* Define if you have the <string.h> header file. */ -#define HAVE_STRING_H 1 - -/* Define if you have the <sys/devpoll.h> header file. */ -#undef HAVE_SYS_DEVPOLL_H - -/* Define if you have the <sys/epoll.h> header file. */ -#undef HAVE_SYS_EPOLL_H - -/* Define if you have the <sys/event.h> header file. */ -#undef HAVE_SYS_EVENT_H - -/* Define if you have the <sys/ioctl.h> header file. */ -#undef HAVE_SYS_IOCTL_H - -/* Define if you have the <sys/queue.h> header file. */ -#undef HAVE_SYS_QUEUE_H - -/* Define if you have the <sys/stat.h> header file. */ -#define HAVE_SYS_STAT_H 1 - -/* Define if you have the <sys/time.h> header file. */ -#undef HAVE_SYS_TIME_H - -/* Define if you have the <sys/types.h> header file. */ -#define HAVE_SYS_TYPES_H 1 - -/* Define if TAILQ_FOREACH is defined in <sys/queue.h> */ -#undef HAVE_TAILQFOREACH - -/* Define if timeradd is defined in <sys/time.h> */ -#undef HAVE_TIMERADD - -/* Define if you have the <unistd.h> header file. */ -#undef HAVE_UNISTD_H - -/* Define if you have the `vasprintf' function. */ -#undef HAVE_VASPRINTF - -/* Define if kqueue works correctly with pipes */ -#undef HAVE_WORKING_KQUEUE - -/* Define if realtime signals work on pipes */ -#undef HAVE_WORKING_RTSIG - -/* Name of package */ -#define PACKAGE "libevent" - -/* Define if you have the ANSI C header files. */ -#undef STDC_HEADERS - -/* Define if you can safely include both <sys/time.h> and <time.h>. */ -#undef TIME_WITH_SYS_TIME - -/* Version number of package */ -#define VERSION "1.0b" - -/* Define to empty if `const' does not conform to ANSI C. */ -#undef const - -/* Define as `__inline' if that's what the C compiler calls it, or to nothing - if it is not supported. */ -#define inline __inline - -/* Define to `int' if <sys/types.h> does not define. */ -#undef pid_t - -/* Define to `unsigned' if <sys/types.h> does not define. */ -#undef size_t - -/* Define to unsigned int if you dont have it */ -#undef socklen_t - -/* Define to `unsigned short' if <sys/types.h> does not define. */ -#undef u_int16_t - -/* Define to `unsigned int' if <sys/types.h> does not define. */ -#undef u_int32_t - -/* Define to `unsigned long long' if <sys/types.h> does not define. */ -/* #undef u_int64_t */ - -/* Define to `unsigned char' if <sys/types.h> does not define. */ -/* #undef u_int8_t */ - -/* Define to __FUNCTION__ or __file__ if your compiler doesn't have __func__ */ -#define __func__ __FUNCTION__ diff --git a/libevent/WIN32-Code/misc.c b/libevent/WIN32-Code/misc.c deleted file mode 100644 index bdebc3a..0000000 --- a/libevent/WIN32-Code/misc.c +++ /dev/null @@ -1,91 +0,0 @@ -#include <stdio.h> -#include <string.h> -#include <windows.h> -#include <sys/timeb.h> -#include <time.h> - -#ifdef __GNUC__ -/*our prototypes for timeval and timezone are in here, just in case the above - headers don't have them*/ -#include "misc.h" -#endif - -/**************************************************************************** - * - * Function: gettimeofday(struct timeval *, struct timezone *) - * - * Purpose: Get current time of day. - * - * Arguments: tv => Place to store the curent time of day. - * tz => Ignored. - * - * Returns: 0 => Success. - * - ****************************************************************************/ - -#ifndef HAVE_GETTIMEOFDAY -int gettimeofday(struct timeval *tv, struct timezone *tz) { - struct _timeb tb; - - if(tv == NULL) - return -1; - - _ftime(&tb); - tv->tv_sec = tb.time; - tv->tv_usec = ((int) tb.millitm) * 1000; - return 0; -} -#endif - -int -win_read(int fd, void *buf, unsigned int length) -{ - DWORD dwBytesRead; - int res = ReadFile((HANDLE) fd, buf, length, &dwBytesRead, NULL); - if (res == 0) { - DWORD error = GetLastError(); - if (error == ERROR_NO_DATA) - return (0); - return (-1); - } else - return (dwBytesRead); -} - -int -win_write(int fd, void *buf, unsigned int length) -{ - DWORD dwBytesWritten; - int res = WriteFile((HANDLE) fd, buf, length, &dwBytesWritten, NULL); - if (res == 0) { - DWORD error = GetLastError(); - if (error == ERROR_NO_DATA) - return (0); - return (-1); - } else - return (dwBytesWritten); -} - -int -socketpair(int d, int type, int protocol, int *sv) -{ - static int count; - char buf[64]; - HANDLE fd; - DWORD dwMode; - sprintf(buf, "\\\\.\\pipe\\levent-%d", count++); - /* Create a duplex pipe which will behave like a socket pair */ - fd = CreateNamedPipe(buf, PIPE_ACCESS_DUPLEX, PIPE_TYPE_BYTE | PIPE_NOWAIT, - PIPE_UNLIMITED_INSTANCES, 4096, 4096, 0, NULL); - if (fd == INVALID_HANDLE_VALUE) - return (-1); - sv[0] = (int)fd; - - fd = CreateFile(buf, GENERIC_READ|GENERIC_WRITE, 0, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL); - if (fd == INVALID_HANDLE_VALUE) - return (-1); - dwMode = PIPE_NOWAIT; - SetNamedPipeHandleState(fd, &dwMode, NULL, NULL); - sv[1] = (int)fd; - - return (0); -} diff --git a/libevent/WIN32-Code/misc.h b/libevent/WIN32-Code/misc.h deleted file mode 100644 index aced574..0000000 --- a/libevent/WIN32-Code/misc.h +++ /dev/null @@ -1,11 +0,0 @@ -#ifndef MISC_H -#define MISC_H - -struct timezone; -struct timeval; - -#ifndef HAVE_GETTIMEOFDAY -int gettimeofday(struct timeval *,struct timezone *); -#endif - -#endif diff --git a/libevent/WIN32-Code/win32.c b/libevent/WIN32-Code/win32.c deleted file mode 100644 index 867d1f2..0000000 --- a/libevent/WIN32-Code/win32.c +++ /dev/null @@ -1,437 +0,0 @@ -/* - * Copyright 2000-2002 Niels Provos <provos@citi.umich.edu> - * Copyright 2003 Michael A. Davis <mike@datanerds.net> - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * 3. The name of the author may not be used to endorse or promote products - * derived from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR - * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. - * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF - * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ -#ifdef _MSC_VER -#include "config.h" -#else -/* Avoid the windows/msvc thing. */ -#include "../config.h" -#endif - -#include <windows.h> -#include <winsock2.h> -#include <sys/types.h> -#include <sys/queue.h> -#include <sys/tree.h> -#include <signal.h> -#include <stdio.h> -#include <stdlib.h> -#include <string.h> -#include <errno.h> -#include <assert.h> - -#include "log.h" -#include "event.h" -#include "event-internal.h" - -#define XFREE(ptr) do { if (ptr) free(ptr); } while(0) - -extern struct event_list timequeue; -extern struct event_list addqueue; -extern struct event_list signalqueue; - -struct win_fd_set { - u_int fd_count; - SOCKET fd_array[1]; -}; - -int evsigcaught[NSIG]; -volatile sig_atomic_t signal_caught = 0; -/* MSDN says this is required to handle SIGFPE */ -volatile double SIGFPE_REQ = 0.0f; - -static void signal_handler(int sig); - -void signal_process(void); -int signal_recalc(void); - -struct win32op { - int fd_setsz; - struct win_fd_set *readset_in; - struct win_fd_set *writeset_in; - struct win_fd_set *readset_out; - struct win_fd_set *writeset_out; - struct win_fd_set *exset_out; - int n_events; - int n_events_alloc; - struct event **events; -}; - -void *win32_init (void); -int win32_insert (void *, struct event *); -int win32_del (void *, struct event *); -int win32_recalc (struct event_base *base, void *, int); -int win32_dispatch (struct event_base *base, void *, struct timeval *); -void win32_dealloc (void *); - -struct eventop win32ops = { - "win32", - win32_init, - win32_insert, - win32_del, - win32_recalc, - win32_dispatch, - win32_dealloc -}; - -#define FD_SET_ALLOC_SIZE(n) ((sizeof(struct win_fd_set) + ((n)-1)*sizeof(SOCKET))) - -static int -realloc_fd_sets(struct win32op *op, size_t new_size) -{ - size_t size; - - assert(new_size >= op->readset_in->fd_count && - new_size >= op->writeset_in->fd_count); - assert(new_size >= 1); - - size = FD_SET_ALLOC_SIZE(new_size); - if (!(op->readset_in = realloc(op->readset_in, size))) - return (-1); - if (!(op->writeset_in = realloc(op->writeset_in, size))) - return (-1); - if (!(op->readset_out = realloc(op->readset_out, size))) - return (-1); - if (!(op->exset_out = realloc(op->exset_out, size))) - return (-1); - if (!(op->writeset_out = realloc(op->writeset_out, size))) - return (-1); - op->fd_setsz = new_size; - return (0); -} - -static int -timeval_to_ms(struct timeval *tv) -{ - return ((tv->tv_sec * 1000) + (tv->tv_usec / 1000)); -} - -static int -do_fd_set(struct win32op *op, SOCKET s, int read) -{ - unsigned int i; - struct win_fd_set *set = read ? op->readset_in : op->writeset_in; - for (i=0;i<set->fd_count;++i) { - if (set->fd_array[i]==s) - return (0); - } - if (set->fd_count == op->fd_setsz) { - if (realloc_fd_sets(op, op->fd_setsz*2)) - return (-1); - /* set pointer will have changed and needs reiniting! */ - set = read ? op->readset_in : op->writeset_in; - } - set->fd_array[set->fd_count] = s; - return (set->fd_count++); -} - -static int -do_fd_clear(struct win32op *op, SOCKET s, int read) -{ - unsigned int i; - struct win_fd_set *set = read ? op->readset_in : op->writeset_in; - for (i=0;i<set->fd_count;++i) { - if (set->fd_array[i]==s) { - if (--set->fd_count != i) { - set->fd_array[i] = set->fd_array[set->fd_count]; - } - return (0); - } - } - return (0); -} - -#define NEVENT 64 -void * -win32_init(void) -{ - struct win32op *winop; - size_t size; - if (!(winop = calloc(1, sizeof(struct win32op)))) - return NULL; - winop->fd_setsz = NEVENT; - size = FD_SET_ALLOC_SIZE(NEVENT); - if (!(winop->readset_in = malloc(size))) - goto err; - if (!(winop->writeset_in = malloc(size))) - goto err; - if (!(winop->readset_out = malloc(size))) - goto err; - if (!(winop->writeset_out = malloc(size))) - goto err; - if (!(winop->exset_out = malloc(size))) - goto err; - winop->n_events = 0; - winop->n_events_alloc = NEVENT; - if (!(winop->events = malloc(NEVENT*sizeof(struct event*)))) - goto err; - winop->readset_in->fd_count = winop->writeset_in->fd_count = 0; - winop->readset_out->fd_count = winop->writeset_out->fd_count - = winop->exset_out->fd_count = 0; - - return (winop); - err: - XFREE(winop->readset_in); - XFREE(winop->writeset_in); - XFREE(winop->readset_out); - XFREE(winop->writeset_out); - XFREE(winop->exset_out); - XFREE(winop->events); - XFREE(winop); - return (NULL); -} - -int -win32_recalc(struct event_base *base, void *arg, int max) -{ - return (signal_recalc()); -} - -int -win32_insert(void *op, struct event *ev) -{ - struct win32op *win32op = op; - int i; - - if (ev->ev_events & EV_SIGNAL) { - if (ev->ev_events & (EV_READ|EV_WRITE)) - event_errx(1, "%s: EV_SIGNAL incompatible use", - __func__); - if((int)signal(EVENT_SIGNAL(ev), signal_handler) == -1) - return (-1); - - return (0); - } - if (!(ev->ev_events & (EV_READ|EV_WRITE))) - return (0); - - for (i=0;i<win32op->n_events;++i) { - if(win32op->events[i] == ev) { - event_debug(("%s: Event for %d already inserted.", - __func__, (int)ev->ev_fd)); - return (0); - } - } - event_debug(("%s: adding event for %d", __func__, (int)ev->ev_fd)); - if (ev->ev_events & EV_READ) { - if (do_fd_set(win32op, ev->ev_fd, 1)<0) - return (-1); - } - if (ev->ev_events & EV_WRITE) { - if (do_fd_set(win32op, ev->ev_fd, 0)<0) - return (-1); - } - - if (win32op->n_events_alloc == win32op->n_events) { - size_t sz; - win32op->n_events_alloc *= 2; - sz = sizeof(struct event*)*win32op->n_events_alloc; - if (!(win32op->events = realloc(win32op->events, sz))) - return (-1); - } - win32op->events[win32op->n_events++] = ev; - - return (0); -} - -int -win32_del(void *op, struct event *ev) -{ - struct win32op *win32op = op; - int i, found; - - if (ev->ev_events & EV_SIGNAL) - return ((int)signal(EVENT_SIGNAL(ev), SIG_IGN)); - - found = -1; - for (i=0;i<win32op->n_events;++i) { - if(win32op->events[i] == ev) { - found = i; - break; - } - } - if (found < 0) { - event_debug(("%s: Unable to remove non-inserted event for %d", - __func__, ev->ev_fd)); - return (-1); - } - event_debug(("%s: Removing event for %d", __func__, ev->ev_fd)); - if (ev->ev_events & EV_READ) - do_fd_clear(win32op, ev->ev_fd, 1); - if (ev->ev_events & EV_WRITE) - do_fd_clear(win32op, ev->ev_fd, 0); - - if (i != --win32op->n_events) { - win32op->events[i] = win32op->events[win32op->n_events]; - } - - return 0; -} - -static void -fd_set_copy(struct win_fd_set *out, const struct win_fd_set *in) -{ - out->fd_count = in->fd_count; - memcpy(out->fd_array, in->fd_array, in->fd_count * (sizeof(SOCKET))); -} - -/* - static void dump_fd_set(struct win_fd_set *s) - { - unsigned int i; - printf("[ "); - for(i=0;i<s->fd_count;++i) - printf("%d ",(int)s->fd_array[i]); - printf("]\n"); - } -*/ - -int -win32_dispatch(struct event_base *base, void *op, - struct timeval *tv) -{ - struct win32op *win32op = op; - int res = 0; - int i; - int fd_count; - - fd_set_copy(win32op->readset_out, win32op->readset_in); - fd_set_copy(win32op->exset_out, win32op->readset_in); - fd_set_copy(win32op->writeset_out, win32op->writeset_in); - - fd_count = - (win32op->readset_out->fd_count > win32op->writeset_out->fd_count) ? - win32op->readset_out->fd_count : win32op->writeset_out->fd_count; - - if (!fd_count) { - /* Windows doesn't like you to call select() with no sockets */ - Sleep(timeval_to_ms(tv)); - signal_process(); - return (0); - } - - res = select(fd_count, - (struct fd_set*)win32op->readset_out, - (struct fd_set*)win32op->writeset_out, - (struct fd_set*)win32op->exset_out, tv); - - event_debug(("%s: select returned %d", __func__, res)); - - if(res <= 0) { - signal_process(); - return res; - } - - for (i=0;i<win32op->n_events;++i) { - struct event *ev; - int got = 0; - ev = win32op->events[i]; - if ((ev->ev_events & EV_READ)) { - if (FD_ISSET(ev->ev_fd, win32op->readset_out) || - FD_ISSET(ev->ev_fd, win32op->exset_out)) { - got |= EV_READ; - } - } - if ((ev->ev_events & EV_WRITE)) { - if (FD_ISSET(ev->ev_fd, win32op->writeset_out)) { - got |= EV_WRITE; - } - } - if (!got) - continue; - if (!(ev->ev_events & EV_PERSIST)) { - event_del(ev); - } - event_active(ev,got,1); - } - - if (signal_recalc() == -1) - return (-1); - - return (0); -} - -void -win32_dealloc(void *arg) -{ - struct win32op *win32op = arg; - - if (win32op->readset_in) - free(win32op->readset_in); - if (win32op->writeset_in) - free(win32op->writeset_in); - if (win32op->readset_out) - free(win32op->readset_out); - if (win32op->writeset_out) - free(win32op->writeset_out); - if (win32op->exset_out) - free(win32op->exset_out); - if (win32op->events) - free(win32op->events); - - memset(win32op, 0, sizeof(win32op)); - free(win32op); -} - -static void -signal_handler(int sig) -{ - evsigcaught[sig]++; - signal_caught = 1; -} - -int -signal_recalc(void) -{ - struct event *ev; - - /* Reinstall our signal handler. */ - TAILQ_FOREACH(ev, &signalqueue, ev_signal_next) { - if((int)signal(EVENT_SIGNAL(ev), signal_handler) == -1) - return (-1); - } - return (0); -} - -void -signal_process(void) -{ - struct event *ev; - short ncalls; - - TAILQ_FOREACH(ev, &signalqueue, ev_signal_next) { - ncalls = evsigcaught[EVENT_SIGNAL(ev)]; - if (ncalls) { - if (!(ev->ev_events & EV_PERSIST)) - event_del(ev); - event_active(ev, EV_SIGNAL, ncalls); - } - } - - memset(evsigcaught, 0, sizeof(evsigcaught)); - signal_caught = 0; -} |