summaryrefslogtreecommitdiff
path: root/src/ae.c
diff options
context:
space:
mode:
authorantirez <antirez@gmail.com>2012-01-25 10:35:47 +0100
committerantirez <antirez@gmail.com>2012-01-25 10:37:32 +0100
commitecc57021451d1c625fd36c9ba88c60f201f5c098 (patch)
tree98f6a507aa677f3b790f9bffb28d11470c0d18fb /src/ae.c
parentcaa63a382154bee2162237330e43eee2944b2c6a (diff)
downloadredis-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.c26
1 files changed, 11 insertions, 15 deletions
diff --git a/src/ae.c b/src/ae.c
index a4037e1d8..4c8aff9b0 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) {