tasn pushed a commit to branch efl-1.17.

http://git.enlightenment.org/core/efl.git/commit/?id=c7bc4e5d5034fd049f9dc1a9bbce3be7bd757a1f

commit c7bc4e5d5034fd049f9dc1a9bbce3be7bd757a1f
Author: Tom Hacohen <t...@stosb.com>
Date:   Fri Feb 5 11:48:36 2016 +0000

    Ecore con local: properly clean up fd on error.
    
    This wasn't done correctly in the previous commit. First of all, the
    order of cleanup was wrong, the cleanup area should only be called if
    failures occurred after the fd allocation, not before. Also, fd should
    be reinitialised to -1 once we close the socket.
---
 src/lib/ecore_con/ecore_con_local.c | 14 ++++++++------
 1 file changed, 8 insertions(+), 6 deletions(-)

diff --git a/src/lib/ecore_con/ecore_con_local.c 
b/src/lib/ecore_con/ecore_con_local.c
index 9196e18..084b8cb 100644
--- a/src/lib/ecore_con/ecore_con_local.c
+++ b/src/lib/ecore_con/ecore_con_local.c
@@ -366,16 +366,16 @@ start:
      goto error_umask;
 
    if (fcntl(svr->fd, F_SETFL, O_NONBLOCK) < 0)
-     goto error_umask;
+     goto error_fd;
 
    if (fcntl(svr->fd, F_SETFD, FD_CLOEXEC) < 0)
-     goto error_umask;
+     goto error_fd;
 
    lin.l_onoff = 1;
    lin.l_linger = 0;
    if (setsockopt(svr->fd, SOL_SOCKET, SO_LINGER, (const void *)&lin,
                   sizeof(struct linger)) < 0)
-     goto error_umask;
+     goto error_fd;
 
    if (bind(svr->fd, (struct sockaddr *)&socket_unix, socket_unix_len) < 0)
      {
@@ -391,13 +391,13 @@ start:
              else
                {
                   ERR("Local socket '%s' removal failed: %s", buf, 
strerror(errno));
-                  goto error_umask;
+                  goto error_fd;
                }
           }
      }
 
    if (listen(svr->fd, 4096) < 0)
-     goto error_umask;
+     goto error_fd;
 
 #ifdef HAVE_SYSTEMD
 fd_ready:
@@ -415,10 +415,12 @@ fd_ready:
 
    return 1;
 
+error_fd:
+   close(svr->fd);
+   svr->fd = -1;
 error_umask:
    umask(pmode);
 error:
-   close(svr->fd);
 #endif /* HAVE_LOCAL_SOCKETS */
    return 0;
 }

-- 


Reply via email to