diff options
author | antirez <antirez@gmail.com> | 2012-01-25 10:35:47 +0100 |
---|---|---|
committer | antirez <antirez@gmail.com> | 2012-01-25 10:37:32 +0100 |
commit | ecc57021451d1c625fd36c9ba88c60f201f5c098 (patch) | |
tree | 98f6a507aa677f3b790f9bffb28d11470c0d18fb /src/ae.c | |
parent | caa63a382154bee2162237330e43eee2944b2c6a (diff) | |
download | redis-ecc57021451d1c625fd36c9ba88c60f201f5c098.tar.gz |
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).
Diffstat (limited to 'src/ae.c')
-rw-r--r-- | src/ae.c | 26 |
1 files changed, 11 insertions, 15 deletions
@@ -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) { |