diff --git a/lib/src/zap/sock/zap_sock.c b/lib/src/zap/sock/zap_sock.c index 008a5eca93..3bdf6d26ad 100644 --- a/lib/src/zap/sock/zap_sock.c +++ b/lib/src/zap/sock/zap_sock.c @@ -1992,7 +1992,8 @@ static void z_sock_destroy(zap_ep_t ep) DEBUG_LOG(sep, "%ld z_sock_destroy(%p)\n", GETTID(), sep); - zap_io_thread_ep_remove(ep); + if (ep->thread) + zap_io_thread_ep_remove(ep); while (!TAILQ_EMPTY(&sep->sq)) { wr = TAILQ_FIRST(&sep->sq); @@ -2063,7 +2064,13 @@ static zap_err_t z_sock_reject(zap_ep_t ep, char *data, size_t data_len) zerr = __sock_send(sep, SOCK_MSG_REJECTED, data, data_len); if (zerr) goto err; + /* move to error state before we terminate it */ + sep->ep.state = ZAP_EP_ERROR; + pthread_mutex_unlock(&sep->ep.lock); + ref_put(&ep->ref, "accept/connect"); /* from __z_sock_conn_request() */ + zap_free(ep); + /* The caller never touched ep after reject */ return ZAP_ERR_OK; err: sep->ep.state = ZAP_EP_ERROR;