On Unix, remove event.fifo left by sample/event-test.c.

This fifo would result in grep hanging when doing a recursive grep
through the Libevent sources.

event.fifo gets removed on SIGINT or normal exit.
This commit is contained in:
Ross Lagerwall 2012-03-18 08:19:04 +02:00
parent 19bab4fbd0
commit c0dacd23b4

View File

@ -15,6 +15,7 @@
#include <sys/queue.h> #include <sys/queue.h>
#include <unistd.h> #include <unistd.h>
#include <sys/time.h> #include <sys/time.h>
#include <signal.h>
#else #else
#include <winsock2.h> #include <winsock2.h>
#include <windows.h> #include <windows.h>
@ -53,13 +54,13 @@ fifo_read(int fd, short event, void *arg)
#else #else
len = read(fd, buf, sizeof(buf) - 1); len = read(fd, buf, sizeof(buf) - 1);
if (len == -1) { if (len <= 0) {
perror("read"); if (len == -1)
event_del(ev); perror("read");
return; else if (len == 0)
} else if (len == 0) { fprintf(stderr, "Connection closed\n");
fprintf(stderr, "Connection closed\n");
event_del(ev); event_del(ev);
event_base_loopbreak(event_get_base(ev));
return; return;
} }
@ -71,6 +72,16 @@ fifo_read(int fd, short event, void *arg)
event_add(ev, NULL); event_add(ev, NULL);
} }
/* On Unix, cleanup event.fifo if SIGINT is received. */
#ifndef _WIN32
static void
signal_cb(evutil_socket_t fd, short event, void *arg)
{
struct event_base *base = arg;
event_base_loopbreak(base);
}
#endif
int int
main(int argc, char **argv) main(int argc, char **argv)
{ {
@ -91,6 +102,7 @@ main(int argc, char **argv)
return 1; return 1;
#else #else
struct event *signal_int;
struct stat st; struct stat st;
const char *fifo = "event.fifo"; const char *fifo = "event.fifo";
int socket; int socket;
@ -126,6 +138,10 @@ main(int argc, char **argv)
evfifo = event_new(base, (int)socket, EV_READ, fifo_read, evfifo = event_new(base, (int)socket, EV_READ, fifo_read,
event_self_cbarg()); event_self_cbarg());
#else #else
/* catch SIGINT so that event.fifo can be cleaned up */
signal_int = evsignal_new(base, SIGINT, signal_cb, base);
event_add(signal_int, NULL);
evfifo = event_new(base, socket, EV_READ, fifo_read, evfifo = event_new(base, socket, EV_READ, fifo_read,
event_self_cbarg()); event_self_cbarg());
#endif #endif
@ -138,7 +154,8 @@ main(int argc, char **argv)
#ifdef _WIN32 #ifdef _WIN32
CloseHandle(socket); CloseHandle(socket);
#else #else
close(socket); close(socket);
unlink(fifo);
#endif #endif
return (0); return (0);
} }