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:
rbdpngn 2006-01-11 05:13:23 +00:00 committed by rbdpngn
parent 702c78bb82
commit f1bc839522
5 changed files with 3 additions and 43 deletions

View File

@ -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);

View File

@ -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)

View File

@ -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;

View File

@ -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);

View File

@ -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) \