void CDaemonServer::on_physical_server_event(const ServerInfoJson& server_json, CConnection* connection) { if(connection != NULL) { process_server_info(server_json, connection); } else { DAEMON_WARNING("on_physical_server_event, conn = NULL!!!"); } }
void *servers_thread(void *a) { struct pollfd *fds; int fdcount; struct sockaddr_in sockaddr; struct buffer_t *buffer; fdcount = 2; fds = calloc(sizeof(struct pollfd), fdcount); fds[0].fd = servers_kill_pipe[0]; fds[0].events = POLLIN; fds[1].fd = servers_info_pipe[0]; fds[1].events = POLLIN; while(1) { if(TEMP_FAILURE_RETRY(poll(fds, fdcount, -1)) == -1) { free(fds); pthread_exit(NULL); } if(fds[0].revents & POLLIN) { free(fds); pthread_exit(NULL); } if(fds[1].revents & POLLIN) { TEMP_FAILURE_RETRY(read(servers_info_pipe[0], &sockaddr, sizeof(struct sockaddr_in))); TEMP_FAILURE_RETRY(read(servers_info_pipe[0], &buffer, 4)); pthread_mutex_lock(&servers_mutex); process_server_info(&sockaddr, buffer); pthread_mutex_unlock(&servers_mutex); free_buffer(buffer); } } }