#include <isc/atomic.h>
#include <isc/buffer.h>
#include <isc/condition.h>
+#include <isc/errno.h>
#include <isc/log.h>
#include <isc/magic.h>
#include <isc/mem.h>
if (r != 0) {
result = isc__nm_uverr2result(r);
uv_close((uv_handle_t *)uvstream, free_uvtcpt);
- isc_quota_detach("a);
+ if (quota != NULL) {
+ isc_quota_detach("a);
+ }
return (result);
}
event = isc__nm_get_ievent(ssock->mgr, netievent_tcpchildaccept);
/* Duplicate the server socket */
+ r = isc_uv_export((uv_stream_t *)uvstream, &event->streaminfo);
+ if (r != 0) {
+ result = isc_errno_toresult(errno);
+ uv_close((uv_handle_t *)uvstream, free_uvtcpt);
+ if (quota != NULL) {
+ isc_quota_detach("a);
+ }
+ isc__nm_put_ievent(ssock->mgr, event);
+ return (result);
+ }
+
isc_nmsocket_t *csock = isc_mem_get(ssock->mgr->mctx,
sizeof(isc_nmsocket_t));
isc__nmsocket_init(csock, ssock->mgr, isc_nm_tcpsocket, ssock->iface);
event->sock = csock;
event->quota = quota;
- r = isc_uv_export((uv_stream_t *)uvstream, &event->streaminfo);
- RUNTIME_CHECK(r == 0);
-
uv_close((uv_handle_t *)uvstream, free_uvtcpt);
if (w == isc_nm_tid()) {