GError * gridd_client_loop(struct client_s *client) { while (!gridd_client_finished(client)) { GError *err = gridd_client_step(client); if (err) { g_prefix_error(&err, "(Step) "); return err; } } return NULL; }
gboolean gridd_clients_finished(struct client_s **clients) { if (clients) { struct client_s *p; for (; NULL != (p = *clients) ;clients++) { if (!gridd_client_finished(p)) return FALSE; } } return TRUE; }
static void _manage_one_event(struct gridd_client_pool_s *pool, int fd, int evt) { struct event_client_s *ec = pool->active_clients[fd]; _pool_unmonitor(pool, fd); EXTRA_ASSERT(ec != NULL); EXTRA_ASSERT(ec->client != NULL); EXTRA_ASSERT(fd == gridd_client_fd(ec->client)); if ((evt & EPOLLERR) || (evt & EPOLLHUP)) { GRID_DEBUG("%s CLIENT [%s] fd=%d cnx error", __FUNCTION__, gridd_client_url(ec->client), gridd_client_fd(ec->client)); event_client_free(ec); } else { gridd_client_react(ec->client); if (gridd_client_finished(ec->client)) event_client_free(ec); else if (!event_client_monitor(pool, ec)) event_client_free(ec); } }