void tickertask(void *v) { (void)v; taskname("ticker"); while(!task_was_signaled()) { THE_CURRENT_TIME_IS = time(NULL); int min_wait = Setting_get_int("limits.tick_timer", 10); taskdelay(min_wait * 1000); // avoid doing this during a reload attempt if(!RELOAD) { // don't bother if these are all 0 int min_ping = Setting_get_int("limits.min_ping", DEFAULT_MIN_PING); int min_write_rate = Setting_get_int("limits.min_write_rate", DEFAULT_MIN_READ_RATE); int min_read_rate = Setting_get_int("limits.min_read_rate", DEFAULT_MIN_WRITE_RATE); if(min_ping > 0 || min_write_rate > 0 || min_read_rate > 0) { int cleared = Register_cleanout(); if(cleared > 0) { log_warn("Timeout task killed %d tasks, waiting %d seconds for more.", cleared, min_wait); } else { debug("No connections timed out."); } } // do a server queue cleanup to get rid of dead servers Server_queue_cleanup(); } } }
void Server_queue_push(Server *srv) { Server_queue_cleanup(); darray_push(SERVER_QUEUE, srv); hattach(srv, SERVER_QUEUE); }