if (r != 0) {
/* We need to issue callbacks ourselves */
tcp_connect_cb(&req->uv_req.connect, r);
- goto done;
+ LOCK(&sock->lock);
+ SIGNAL(&sock->cond);
+ UNLOCK(&sock->lock);
+ isc__nmsocket_detach(&sock);
+ return;
}
atomic_store(&sock->connected, true);
-done:
LOCK(&sock->lock);
SIGNAL(&sock->cond);
UNLOCK(&sock->lock);
if (status != 0) {
req->cb.connect(NULL, isc__nm_uverr2result(status), req->cbarg);
isc__nm_uvreq_put(&req, sock);
+ isc__nmsocket_detach(&sock);
return;
}
if (nsock->result != ISC_R_SUCCESS) {
result = nsock->result;
- isc__nmsocket_detach(&nsock);
}
isc__nmsocket_detach(&tmp);