ecore_con_local: fix memory leak. 74/88674/2
authorJi-Youn Park <jy0703.park@samsung.com>
Tue, 20 Sep 2016 07:46:59 +0000 (16:16 +0830)
committerGerrit Code Review <gerrit@review.vlan103.tizen.org>
Tue, 20 Sep 2016 23:35:03 +0000 (16:35 -0700)
after socket function call, close file descriptor.

opensource_commit 0a39fae0a2c27ec48b39caca3b00dc54bdffaa32
Author: Ji-Youn Park <jy0703.park@samsung.com>
Date:   Tue Sep 20 16:14:04 2016 +0830

Change-Id: I2be352b2b5080164e3895c08c177fc46354d7de8

src/lib/ecore_con/ecore_con_local.c

index cadd551..203c191 100755 (executable)
@@ -232,14 +232,14 @@ ecore_con_local_connect(Ecore_Con_Server *obj,
      return 0;
 
    if (fcntl(svr->fd, F_SETFL, O_NONBLOCK) < 0)
-     return 0;
+     goto error;
 
    if (fcntl(svr->fd, F_SETFD, FD_CLOEXEC) < 0)
-     return 0;
+     goto error;
 
    if (setsockopt(svr->fd, SOL_SOCKET, SO_REUSEADDR, (const void *)&curstate,
                   sizeof(curstate)) < 0)
-     return 0;
+     goto error;
 
    socket_unix.sun_family = AF_UNIX;
 
@@ -254,7 +254,7 @@ ecore_con_local_connect(Ecore_Con_Server *obj,
                                                          svr->name);
 #else
         WRN("Your system does not support abstract sockets!");
-        return 0;
+        goto error;
 #endif
      }
    else
@@ -268,12 +268,12 @@ ecore_con_local_connect(Ecore_Con_Server *obj,
                socket_unix_len) < 0)
      {
         DBG("local connection failed: %s", strerror(errno));
-        return 0;
+        goto error;
      }
 
    svr->path = strdup(buf);
    if (!svr->path)
-     return 0;
+     goto error;
 
    if (svr->type & ECORE_CON_SSL)
      {
@@ -284,11 +284,15 @@ ecore_con_local_connect(Ecore_Con_Server *obj,
      ecore_main_fd_handler_add(svr->fd, ECORE_FD_READ,
                                cb_done, obj, NULL, NULL);
    if (!svr->fd_handler)
-     return 0;
+     goto error;
 
    if (!svr->delete_me) ecore_con_event_server_add(obj);
 
    return 1;
+error:
+   if (svr->fd) close(svr->fd);
+   svr->fd = -1;
+   return 0;
 #endif
 }