Revert disown call and force the parent to check if it created the socket
before unlinking it. SVN revision: 19714
This commit is contained in:
parent
702c78bb82
commit
f1bc839522
|
@ -151,7 +151,6 @@ extern "C" {
|
|||
EAPI int ecore_con_server_connected_get(Ecore_Con_Server *svr);
|
||||
EAPI int ecore_con_server_send(Ecore_Con_Server *svr, void *data, int size);
|
||||
EAPI void ecore_con_server_client_limit_set(Ecore_Con_Server *svr, int client_limit, char reject_excess_clients);
|
||||
EAPI void ecore_con_server_disown(Ecore_Con_Server *svr);
|
||||
|
||||
EAPI int ecore_con_client_send(Ecore_Con_Client *cl, void *data, int size);
|
||||
EAPI Ecore_Con_Server *ecore_con_client_server_get(Ecore_Con_Client *cl);
|
||||
|
|
|
@ -318,6 +318,7 @@ ecore_con_server_add(Ecore_Con_Type compl_type,
|
|||
svr->reject_excess_clients = 0;
|
||||
svr->client_limit = -1;
|
||||
svr->clients = ecore_list_new();
|
||||
svr->ppid = getpid();
|
||||
ecore_list_append(servers, svr);
|
||||
ECORE_MAGIC_SET(svr, ECORE_MAGIC_CON_SERVER);
|
||||
return svr;
|
||||
|
@ -605,26 +606,6 @@ ecore_con_server_client_limit_set(Ecore_Con_Server *svr, int client_limit, char
|
|||
svr->reject_excess_clients = reject_excess_clients;
|
||||
}
|
||||
|
||||
/**
|
||||
* Flag the server as not owned by this process, important to use after
|
||||
* forking so child processes do not remove a parents socket path.
|
||||
* Beware that if you set this in the parent, stale sockets may be left
|
||||
* around.
|
||||
* @param svr The given server.
|
||||
* @ingroup Ecore_Con_Server_Group
|
||||
*/
|
||||
void
|
||||
ecore_con_server_disown(Ecore_Con_Server *svr)
|
||||
{
|
||||
if (!ECORE_MAGIC_CHECK(svr, ECORE_MAGIC_CON_SERVER))
|
||||
{
|
||||
ECORE_MAGIC_FAIL(svr, ECORE_MAGIC_CON_SERVER,
|
||||
"ecore_con_server_client_limit_set");
|
||||
return;
|
||||
}
|
||||
svr->created = 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* @defgroup Ecore_Con_Client_Group Ecore Connection Client Functions
|
||||
*
|
||||
|
@ -777,7 +758,7 @@ _ecore_con_server_free(Ecore_Con_Server *svr)
|
|||
while (!ecore_list_is_empty(svr->clients))
|
||||
_ecore_con_client_free(ecore_list_remove_first(svr->clients));
|
||||
ecore_list_destroy(svr->clients);
|
||||
if ((svr->created) && (svr->path)) unlink(svr->path);
|
||||
if ((svr->created) && (svr->path) && (svr->ppid == getpid())) unlink(svr->path);
|
||||
if (svr->fd >= 0) close(svr->fd);
|
||||
#if USE_OPENSSL
|
||||
if (svr->ssl)
|
||||
|
|
|
@ -67,6 +67,7 @@ struct _Ecore_Con_Server
|
|||
char connecting : 1;
|
||||
char reject_excess_clients : 1;
|
||||
int client_limit;
|
||||
pid_t ppid;
|
||||
|
||||
#if USE_OPENSSL
|
||||
SSL_CTX *ssl_ctx;
|
||||
|
|
|
@ -297,7 +297,6 @@ EAPI unsigned long long _ecore_ipc_swap_64(unsigned long long v);
|
|||
/* FIXME: this needs to become an ipc message */
|
||||
EAPI int ecore_ipc_server_send(Ecore_Ipc_Server *svr, int major, int minor, int ref, int ref_to, int response, void *data, int size);
|
||||
EAPI void ecore_ipc_server_client_limit_set(Ecore_Ipc_Server *svr, int client_limit, char reject_excess_clients);
|
||||
EAPI void ecore_ipc_server_disown(Ecore_Ipc_Server *svr);
|
||||
|
||||
/* FIXME: this needs to become an ipc message */
|
||||
EAPI int ecore_ipc_client_send(Ecore_Ipc_Client *cl, int major, int minor, int ref, int ref_to, int response, void *data, int size);
|
||||
|
|
|
@ -600,26 +600,6 @@ ecore_ipc_server_client_limit_set(Ecore_Ipc_Server *svr, int client_limit, char
|
|||
ecore_con_server_client_limit_set(svr->server, client_limit, reject_excess_clients);
|
||||
}
|
||||
|
||||
/**
|
||||
* Flag the server as not owned by this process, important to use after
|
||||
* forking so child processes do not remove a parents socket path.
|
||||
* Beware that if you set this in the parent, stale sockets may be left
|
||||
* around.
|
||||
* @param svr The given server.
|
||||
* @ingroup Ecore_Ipc_Server_Group
|
||||
*/
|
||||
void
|
||||
ecore_ipc_server_disown(Ecore_Ipc_Server *svr)
|
||||
{
|
||||
if (!ECORE_MAGIC_CHECK(svr, ECORE_MAGIC_IPC_SERVER))
|
||||
{
|
||||
ECORE_MAGIC_FAIL(svr, ECORE_MAGIC_IPC_SERVER,
|
||||
"ecore_ipc_server_client_limit_set");
|
||||
return;
|
||||
}
|
||||
ecore_con_server_disown(svr->server);
|
||||
}
|
||||
|
||||
#define CLENC(_member) \
|
||||
d = _ecore_ipc_dlt_int(msg._member, cl->prev.o._member, &md); \
|
||||
if (md >= DLT_SET) \
|
||||
|
|
Loading…
Reference in New Issue