@@ -315,14 +315,12 @@ bufferevent_init_common_(struct bufferevent_private *bufev_private,
315
315
316
316
if (!bufev -> input ) {
317
317
if ((bufev -> input = evbuffer_new ()) == NULL )
318
- return -1 ;
318
+ goto err ;
319
319
}
320
320
321
321
if (!bufev -> output ) {
322
- if ((bufev -> output = evbuffer_new ()) == NULL ) {
323
- evbuffer_free (bufev -> input );
324
- return -1 ;
325
- }
322
+ if ((bufev -> output = evbuffer_new ()) == NULL )
323
+ goto err ;
326
324
}
327
325
328
326
bufev_private -> refcnt = 1 ;
@@ -334,7 +332,8 @@ bufferevent_init_common_(struct bufferevent_private *bufev_private,
334
332
335
333
bufev -> be_ops = ops ;
336
334
337
- bufferevent_ratelim_init_ (bufev_private );
335
+ if (bufferevent_ratelim_init_ (bufev_private ))
336
+ goto err ;
338
337
339
338
/*
340
339
* Set to EV_WRITE so that using bufferevent_write is going to
@@ -345,20 +344,14 @@ bufferevent_init_common_(struct bufferevent_private *bufev_private,
345
344
346
345
#ifndef EVENT__DISABLE_THREAD_SUPPORT
347
346
if (options & BEV_OPT_THREADSAFE ) {
348
- if (bufferevent_enable_locking_ (bufev , NULL ) < 0 ) {
349
- /* cleanup */
350
- evbuffer_free (bufev -> input );
351
- evbuffer_free (bufev -> output );
352
- bufev -> input = NULL ;
353
- bufev -> output = NULL ;
354
- return -1 ;
355
- }
347
+ if (bufferevent_enable_locking_ (bufev , NULL ) < 0 )
348
+ goto err ;
356
349
}
357
350
#endif
358
351
if ((options & (BEV_OPT_DEFER_CALLBACKS |BEV_OPT_UNLOCK_CALLBACKS ))
359
352
== BEV_OPT_UNLOCK_CALLBACKS ) {
360
353
event_warnx ("UNLOCK_CALLBACKS requires DEFER_CALLBACKS" );
361
- return -1 ;
354
+ goto err ;
362
355
}
363
356
if (options & BEV_OPT_UNLOCK_CALLBACKS )
364
357
event_deferred_cb_init_ (
@@ -379,6 +372,17 @@ bufferevent_init_common_(struct bufferevent_private *bufev_private,
379
372
evbuffer_set_parent_ (bufev -> output , bufev );
380
373
381
374
return 0 ;
375
+
376
+ err :
377
+ if (bufev -> input ) {
378
+ evbuffer_free (bufev -> input );
379
+ bufev -> input = NULL ;
380
+ }
381
+ if (bufev -> output ) {
382
+ evbuffer_free (bufev -> output );
383
+ bufev -> output = NULL ;
384
+ }
385
+ return -1 ;
382
386
}
383
387
384
388
void
0 commit comments