else
{
if (cl->host_server)
- cl->host_server->clients = eina_list_remove(cl->host_server->clients, cl);
+ {
+ cl->host_server->clients = eina_list_remove(cl->host_server->clients, cl);
+ if (!(--cl->host_server->client_count))
+ /* avoid segv from nonnull list */
+ cl->host_server->clients = NULL;
+ }
_ecore_con_client_free(cl);
}
return ECORE_CALLBACK_RENEW;
if ((svr->client_limit >= 0) && (!svr->reject_excess_clients) &&
- (eina_list_count(svr->clients) >= (unsigned int)svr->client_limit))
+ (svr->client_count >= (unsigned int)svr->client_limit))
return ECORE_CALLBACK_RENEW;
/* a new client */
return ECORE_CALLBACK_RENEW;
if ((svr->client_limit >= 0) && (svr->reject_excess_clients) &&
- (eina_list_count(svr->clients) >= (unsigned int)svr->client_limit))
+ (svr->client_count >= (unsigned int)svr->client_limit))
goto error;
cl = calloc(1, sizeof(Ecore_Con_Client));
_ecore_con_svr_cl_handler, cl, NULL, NULL);
ECORE_MAGIC_SET(cl, ECORE_MAGIC_CON_CLIENT);
svr->clients = eina_list_append(svr->clients, cl);
+ svr->client_count++;
if (!svr->path)
cl->ip = _ecore_con_pretty_ip((struct sockaddr *)&incoming, size_in);
memcpy(cl->client_addr, &client_addr, client_addr_len);
ECORE_MAGIC_SET(cl, ECORE_MAGIC_CON_CLIENT);
svr->clients = eina_list_append(svr->clients, cl);
+ svr->client_count++;
cl->ip = _ecore_con_pretty_ip(cl->client_addr,
cl->client_addr_len);