int contradicting_add_edge = 0;
int contradicting_del_edge = 0;
+bool running = true;
/* Purge edges and subnets of unreachable nodes. Use carefully. */
getsockopt(c->socket, SOL_SOCKET, SO_ERROR, &result, &len);
- if(!result)
+ if(!result) {
+ mutex_lock(&mutex);
finish_connecting(c);
- else {
+ mutex_unlock(&mutex);
+ } else {
ifdebug(CONNECTIONS) logger(LOG_DEBUG,
"Error while connecting to %s (%s): %s",
c->name, c->hostname, sockstrerror(result));
closesocket(c->socket);
+ mutex_lock(&mutex);
do_outgoing_connection(c);
+ mutex_unlock(&mutex);
return;
}
}
while(true) {
if (!receive_meta(c)) {
terminate_connection(c, c->status.active);
- return;
+ break;
}
}
}
-static void sigterm_handler(int signal, short events, void *data) {
- logger(LOG_NOTICE, "Got %s signal", strsignal(signal));
- exit(0);
-}
-
-static void sighup_handler(int signal, short events, void *data) {
- logger(LOG_NOTICE, "Got %s signal", strsignal(signal));
- reload_configuration();
-}
-
int reload_configuration(void) {
connection_t *c;
splay_node_t *node, *next;
event_add(&timeout_event);
-#ifdef SIGHUP
- signal(SIGHUP, sighup_handler);
-#endif
-#ifdef SIGTERM
- signal(SIGTERM, sigterm_handler);
-#endif
-#ifdef SIGQUIT
- signal(SIGQUIT, sigterm_handler);
-#endif
while(true) {
- sleep(1);
+ mutex_unlock(&mutex);
+ usleep(1000000);
+ mutex_lock(&mutex);
+
struct event *event;
while((event = get_expired_event())) {
event->handler(event->data);