diff --git a/src/plugins/mpi/pmix/pmixp_dconn_ucx.c b/src/plugins/mpi/pmix/pmixp_dconn_ucx.c
index 3c1507056301a652bb38935a76b94dea5b84d581..783f845cd5321663775f76905c809151f642ae62 100644
--- a/src/plugins/mpi/pmix/pmixp_dconn_ucx.c
+++ b/src/plugins/mpi/pmix/pmixp_dconn_ucx.c
@@ -637,8 +637,7 @@ static void _ucx_fini(void *_priv)
 		slurm_mutex_unlock(&_ucx_worker_lock);
 	} else {
 		slurm_mutex_lock(&_ucx_worker_lock);
-		pmixp_rlist_init(&priv->pending, &_free_list,
-				 PMIXP_UCX_LIST_PREALLOC);
+		pmixp_rlist_fini(&priv->pending);
 		slurm_mutex_unlock(&_ucx_worker_lock);
 	}
 	xfree(priv);
@@ -664,8 +663,9 @@ static int _ucx_connect(void *_priv, void *ep_data, size_t ep_len,
 	if (status != UCS_OK) {
 		PMIXP_ERROR("ucp_ep_create failed: %s",
 			    ucs_status_string(status));
-		rc = SLURM_ERROR;
-		goto exit;
+		xfree(priv->ucx_addr);
+		slurm_mutex_unlock(&_ucx_worker_lock);
+		return SLURM_ERROR;
 	}
 	priv->connected = true;
 
@@ -673,7 +673,6 @@ static int _ucx_connect(void *_priv, void *ep_data, size_t ep_len,
 	if (init_msg) {
 		pmixp_rlist_push(&priv->pending, init_msg);
 	}
-exit:
 	slurm_mutex_unlock(&_ucx_worker_lock);
 
 	/* we need to send data while being unlocked */