summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCarsten Haitzler (Rasterman) <raster@rasterman.com>2020-04-12 18:30:36 +0100
committerCarsten Haitzler (Rasterman) <raster@rasterman.com>2020-04-12 18:30:36 +0100
commit963c1b9adf4438ff26dcb4e132884058698b1330 (patch)
tree4372a5737ebacda12a28256a2a82f770c0d006b9
parentdcfb8bb580b70966911792588f06ab463fdc0f80 (diff)
downloadefl-963c1b9adf4438ff26dcb4e132884058698b1330.tar.gz
ecore con - clean up file lock andunlock on failed bind
didnt do this if bind failed... so do it now.
-rw-r--r--src/lib/ecore_con/efl_net_server_unix.c31
1 files changed, 19 insertions, 12 deletions
diff --git a/src/lib/ecore_con/efl_net_server_unix.c b/src/lib/ecore_con/efl_net_server_unix.c
index 37d2c7302d..68f97a7619 100644
--- a/src/lib/ecore_con/efl_net_server_unix.c
+++ b/src/lib/ecore_con/efl_net_server_unix.c
@@ -111,20 +111,19 @@ _efl_net_server_unix_efl_object_destructor(Eo *o, Efl_Net_Server_Unix_Data *pd E
if (fd != INVALID_SOCKET)
{
const char *address = efl_net_server_address_get(o);
- if ((address) && (strncmp(address, "abstract:", strlen("abstract:")) != 0))
- {
- unlink(address);
+ if ((address) &&
+ (strncmp(address, "abstract:", strlen("abstract:")) != 0))
+ unlink(address);
+ }
#ifdef BIND_HANG_WORKAROUND
- if ((pd->have_lock_fd) && (pd->lock_fd >= 0))
- {
- _efl_net_server_unix_bind_hang_lock_workaround
- (address, EINA_FALSE, pd->lock_fd);
- pd->lock_fd = -1;
- pd->have_lock_fd = EINA_FALSE;
- }
-#endif
- }
+ if ((pd->have_lock_fd) && (pd->lock_fd >= 0))
+ {
+ _efl_net_server_unix_bind_hang_lock_workaround
+ (address, EINA_FALSE, pd->lock_fd);
+ pd->lock_fd = -1;
+ pd->have_lock_fd = EINA_FALSE;
}
+#endif
efl_destructor(efl_super(o, MY_CLASS));
}
@@ -264,6 +263,14 @@ _efl_net_server_unix_bind(Eo *o, Efl_Net_Server_Unix_Data *pd)
error:
if (err)
{
+#ifdef BIND_HANG_WORKAROUND
+ if ((pd->have_lock_fd) && (pd->lock_fd >= 0))
+ {
+ pd->lock_fd = _efl_net_server_unix_bind_hang_lock_workaround
+ (addr.sun_path, EINA_FALSE, -1);
+ pd->have_lock_fd = EINA_TRUE;
+ }
+#endif
efl_event_callback_call(o, EFL_NET_SERVER_EVENT_SERVER_ERROR, &err);
if (fd != INVALID_SOCKET) closesocket(fd);
efl_loop_fd_set(o, SOCKET_TO_LOOP_FD(INVALID_SOCKET));