]> git.saurik.com Git - redis.git/commitdiff
aeCreateEventLoop() cleanup on error unified in a single block (original
authorantirez <antirez@gmail.com>
Wed, 25 Jan 2012 09:35:47 +0000 (10:35 +0100)
committerantirez <antirez@gmail.com>
Wed, 25 Jan 2012 09:37:32 +0000 (10:37 +0100)
patch by Mukund Sivaraman, modified by me to make it simpler and to use
my coding style).

src/ae.c

index a4037e1d829fe2dbfcd7c6af0f76c11926a0b5d0..4c8aff9b0011034baaa5513a9d6bf3e234c2e162 100644 (file)
--- 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) {