From caa63a382154bee2162237330e43eee2944b2c6a Mon Sep 17 00:00:00 2001 From: Mukund Sivaraman Date: Wed, 25 Jan 2012 10:27:37 +0100 Subject: [PATCH 1/2] If aeApiCreate() fails, there's probably not much one can do, but in the name of consistency... --- src/ae.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/ae.c b/src/ae.c index 6ddccdf7..a4037e1d 100644 --- a/src/ae.c +++ b/src/ae.c @@ -74,6 +74,8 @@ aeEventLoop *aeCreateEventLoop(int setsize) { eventLoop->maxfd = -1; eventLoop->beforesleep = NULL; if (aeApiCreate(eventLoop) == -1) { + zfree(eventLoop->events); + zfree(eventLoop->fired); zfree(eventLoop); return NULL; } From ecc57021451d1c625fd36c9ba88c60f201f5c098 Mon Sep 17 00:00:00 2001 From: antirez Date: Wed, 25 Jan 2012 10:35:47 +0100 Subject: [PATCH 2/2] aeCreateEventLoop() cleanup on error unified in a single block (original patch by Mukund Sivaraman, modified by me to make it simpler and to use my coding style). --- src/ae.c | 26 +++++++++++--------------- 1 file changed, 11 insertions(+), 15 deletions(-) diff --git a/src/ae.c b/src/ae.c index a4037e1d..4c8aff9b 100644 --- a/src/ae.c +++ b/src/ae.c @@ -56,34 +56,30 @@ aeEventLoop *aeCreateEventLoop(int setsize) { aeEventLoop *eventLoop; int i; - if ((eventLoop = zmalloc(sizeof(*eventLoop))) == NULL) return NULL; - eventLoop->events = NULL; - eventLoop->fired = NULL; + if ((eventLoop = zmalloc(sizeof(*eventLoop))) == NULL) goto err; eventLoop->events = zmalloc(sizeof(aeFileEvent)*setsize); eventLoop->fired = zmalloc(sizeof(aeFiredEvent)*setsize); - if (eventLoop->events == NULL || eventLoop->fired == NULL) { - zfree(eventLoop->events); - zfree(eventLoop->fired); - zfree(eventLoop); - return NULL; - } + if (eventLoop->events == NULL || eventLoop->fired == NULL) goto err; eventLoop->setsize = setsize; eventLoop->timeEventHead = NULL; eventLoop->timeEventNextId = 0; eventLoop->stop = 0; eventLoop->maxfd = -1; eventLoop->beforesleep = NULL; - if (aeApiCreate(eventLoop) == -1) { - zfree(eventLoop->events); - zfree(eventLoop->fired); - zfree(eventLoop); - return NULL; - } + if (aeApiCreate(eventLoop) == -1) goto err; /* Events with mask == AE_NONE are not set. So let's initialize the * vector with it. */ for (i = 0; i < setsize; i++) eventLoop->events[i].mask = AE_NONE; return eventLoop; + +err: + if (eventLoop) { + zfree(eventLoop->events); + zfree(eventLoop->fired); + zfree(eventLoop); + } + return NULL; } void aeDeleteEventLoop(aeEventLoop *eventLoop) {