TRACE("data len: %d, data: %s\n", len, data);
pthread_mutex_lock(&mutex_clilist);
- ECS_Client *clii;
+ ECS_Client *clii,*next;
- QTAILQ_FOREACH(clii, &clients, next)
+ QTAILQ_FOREACH_SAFE(clii, &clients, next, next)
{
send_to_client(clii->client_fd, data, len);
}
}
static void ecs_close(ECS_State *cs) {
- ECS_Client *clii;
+ ECS_Client *clii, *next;
INFO("### Good bye! ECS ###\n");
if (cs == NULL)
cs->alive_timer = NULL;
}
- QTAILQ_FOREACH(clii, &clients, next)
+ QTAILQ_FOREACH_SAFE(clii, &clients, next, next)
{
ecs_client_close(clii);
}
#endif
static ECS_Client *ecs_find_client(int fd) {
- ECS_Client *clii;
+ ECS_Client *clii, *next;
- QTAILQ_FOREACH(clii, &clients, next)
+ QTAILQ_FOREACH_SAFE(clii, &clients, next, next)
{
if (clii->client_fd == fd)
return clii;
}
ECS_Client *find_client(unsigned char id, unsigned char type) {
- ECS_Client *clii;
+ ECS_Client *clii, *next;
- QTAILQ_FOREACH(clii, &clients, next)
+ QTAILQ_FOREACH_SAFE(clii, &clients, next, next)
{
if (clii->client_id == id && clii->client_type == type)
return clii;
static void alive_checker(void *opaque) {
- ECS_Client *clii;
+ ECS_Client *clii, *next;
if (NULL != current_ecs && !current_ecs->ecs_running) {
return;
}
- QTAILQ_FOREACH(clii, &clients, next)
+ QTAILQ_FOREACH_SAFE(clii, &clients, next, next)
{
if (1 == clii->keep_alive) {
INFO("get client fd %d - keep alive fail\n", clii->client_fd);
for (index = 0; index < cs->reads.fd_count; index++) {
if (cs->reads.fd_array == NULL)
continue;
-
if (FD_ISSET(cs->reads.fd_array[index], &temps)) {
if (cs->reads.fd_array[index] == cs->listen_fd) {
ecs_accept(cs);
continue;
}
-
ecs_read(ecs_find_client(cs->reads.fd_array[index]));
}
}
-
return 0;
}
#elif defined(CONFIG_DARWIN)
INFO("ecs is closing.\n");
if (NULL != current_ecs) {
current_ecs->ecs_running = 0;
- ecs_close(current_ecs);
+ // ecs_close(current_ecs);
}
pthread_mutex_destroy(&mutex_clilist);