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;
}
}
}
#endif
while(true) {
- usleep(1000);
+ mutex_unlock(&mutex);
+ usleep(1000000);
+ mutex_lock(&mutex);
+
struct event *event;
while((event = get_expired_event())) {
event->handler(event->data);