Skip to content

Commit 9d735b4

Browse files
authored
Better error handling in event-read-fifo.c (libevent#1673)
2 parents 30d169b + 25f4439 commit 9d735b4

File tree

1 file changed

+33
-4
lines changed

1 file changed

+33
-4
lines changed

sample/event-read-fifo.c

+33-4
Original file line numberDiff line numberDiff line change
@@ -84,7 +84,7 @@ signal_cb(evutil_socket_t fd, short event, void *arg)
8484
int
8585
main(int argc, char **argv)
8686
{
87-
struct event *evfifo;
87+
struct event *evfifo = NULL;
8888
struct event_base* base;
8989
#ifdef _WIN32
9090
HANDLE socket;
@@ -101,7 +101,7 @@ main(int argc, char **argv)
101101
return 1;
102102

103103
#else
104-
struct event *signal_int;
104+
struct event *signal_int = NULL;
105105
struct stat st;
106106
const char *fifo = "event.fifo";
107107
int socket;
@@ -139,16 +139,29 @@ main(int argc, char **argv)
139139
#else
140140
/* catch SIGINT so that event.fifo can be cleaned up */
141141
signal_int = evsignal_new(base, SIGINT, signal_cb, base);
142+
if (signal_int == NULL) {
143+
perror("evsignal_new");
144+
goto err;
145+
}
142146
event_add(signal_int, NULL);
143147

144148
evfifo = event_new(base, socket, EV_READ|EV_PERSIST, fifo_read,
145149
event_self_cbarg());
146150
#endif
151+
if (evfifo == NULL) {
152+
perror("event_new");
153+
goto err;
154+
}
147155

148156
/* Add it to the active events, without a timeout */
149157
event_add(evfifo, NULL);
150158

151159
event_base_dispatch(base);
160+
161+
#ifndef _WIN32
162+
event_free(signal_int);
163+
#endif
164+
event_free(evfifo);
152165
event_base_free(base);
153166
#ifdef _WIN32
154167
CloseHandle(socket);
@@ -157,6 +170,22 @@ main(int argc, char **argv)
157170
unlink(fifo);
158171
#endif
159172
libevent_global_shutdown();
160-
return (0);
161-
}
173+
return 0;
162174

175+
err:
176+
#ifndef _WIN32
177+
if (signal_int)
178+
event_free(signal_int);
179+
#endif
180+
if (evfifo)
181+
event_free(evfifo);
182+
event_base_free(base);
183+
#ifdef _WIN32
184+
CloseHandle(socket);
185+
#else
186+
close(socket);
187+
unlink(fifo);
188+
#endif
189+
libevent_global_shutdown();
190+
return 1;
191+
}

0 commit comments

Comments
 (0)