@@ -84,7 +84,7 @@ signal_cb(evutil_socket_t fd, short event, void *arg)
84
84
int
85
85
main (int argc , char * * argv )
86
86
{
87
- struct event * evfifo ;
87
+ struct event * evfifo = NULL ;
88
88
struct event_base * base ;
89
89
#ifdef _WIN32
90
90
HANDLE socket ;
@@ -101,7 +101,7 @@ main(int argc, char **argv)
101
101
return 1 ;
102
102
103
103
#else
104
- struct event * signal_int ;
104
+ struct event * signal_int = NULL ;
105
105
struct stat st ;
106
106
const char * fifo = "event.fifo" ;
107
107
int socket ;
@@ -139,16 +139,29 @@ main(int argc, char **argv)
139
139
#else
140
140
/* catch SIGINT so that event.fifo can be cleaned up */
141
141
signal_int = evsignal_new (base , SIGINT , signal_cb , base );
142
+ if (signal_int == NULL ) {
143
+ perror ("evsignal_new" );
144
+ goto err ;
145
+ }
142
146
event_add (signal_int , NULL );
143
147
144
148
evfifo = event_new (base , socket , EV_READ |EV_PERSIST , fifo_read ,
145
149
event_self_cbarg ());
146
150
#endif
151
+ if (evfifo == NULL ) {
152
+ perror ("event_new" );
153
+ goto err ;
154
+ }
147
155
148
156
/* Add it to the active events, without a timeout */
149
157
event_add (evfifo , NULL );
150
158
151
159
event_base_dispatch (base );
160
+
161
+ #ifndef _WIN32
162
+ event_free (signal_int );
163
+ #endif
164
+ event_free (evfifo );
152
165
event_base_free (base );
153
166
#ifdef _WIN32
154
167
CloseHandle (socket );
@@ -157,6 +170,22 @@ main(int argc, char **argv)
157
170
unlink (fifo );
158
171
#endif
159
172
libevent_global_shutdown ();
160
- return (0 );
161
- }
173
+ return 0 ;
162
174
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