From ae67fa16c67aa1b847d33dc7ded352fb7b77435d Mon Sep 17 00:00:00 2001 From: Ralph Castain Date: Tue, 18 Oct 2016 19:22:54 -0700 Subject: [PATCH 1/2] Silence the libevent warning when a proc abnormally terminates by cleaning up the error registrations --- .../pmix112/pmix/src/usock/usock_sendrecv.c | 25 +++++++++++++------ 1 file changed, 17 insertions(+), 8 deletions(-) diff --git a/opal/mca/pmix/pmix112/pmix/src/usock/usock_sendrecv.c b/opal/mca/pmix/pmix112/pmix/src/usock/usock_sendrecv.c index 18d7a0749f0..3d77f96ee6e 100644 --- a/opal/mca/pmix/pmix112/pmix/src/usock/usock_sendrecv.c +++ b/opal/mca/pmix/pmix112/pmix/src/usock/usock_sendrecv.c @@ -53,6 +53,8 @@ static void lost_connection(pmix_peer_t *peer, pmix_status_t err) pmix_server_trkr_t *trk; pmix_rank_info_t *rinfo, *rnext; pmix_trkr_caddy_t *tcd; + pmix_error_reg_info_t *errreg; + pmix_regevents_info_t *reginfoptr, *regnext; /* stop all events */ if (peer->recv_ev_active) { @@ -99,15 +101,22 @@ static void lost_connection(pmix_peer_t *peer, pmix_status_t err) } } } - /* remove this proc from the list of ranks for this nspace */ - pmix_list_remove_item(&(peer->info->nptr->server->ranks), &(peer->info->super)); - PMIX_RELEASE(peer->info); - /* reduce the number of local procs */ - --peer->info->nptr->server->nlocalprocs; - /* do some cleanup as the client has left us */ - pmix_pointer_array_set_item(&pmix_server_globals.clients, + /* remove this proc from the list of ranks for this nspace */ + pmix_list_remove_item(&(peer->info->nptr->server->ranks), &(peer->info->super)); + PMIX_RELEASE(peer->info); + /* reduce the number of local procs */ + --peer->info->nptr->server->nlocalprocs; + /* do some cleanup as the client has left us */ + pmix_pointer_array_set_item(&pmix_server_globals.clients, peer->index, NULL); - PMIX_RELEASE(peer); + /* remove all registered event handlers so libevent doesn't complain */ + PMIX_LIST_FOREACH_SAFE(reginfoptr, regnext, &pmix_server_globals.client_eventregs, pmix_regevents_info_t) { + if (reginfoptr->peer == peer) { + PMIX_RELEASE(reginfoptr); + break; + } + } + PMIX_RELEASE(peer); } else { /* if I am a client, there is only * one connection we can have */ From ba84dc88232afed7cce050f52b3bbb08b75b2521 Mon Sep 17 00:00:00 2001 From: Ralph Castain Date: Wed, 19 Oct 2016 14:22:10 -0700 Subject: [PATCH 2/2] Remove item from list prior to releasing --- opal/mca/pmix/pmix112/pmix/src/usock/usock_sendrecv.c | 1 + 1 file changed, 1 insertion(+) diff --git a/opal/mca/pmix/pmix112/pmix/src/usock/usock_sendrecv.c b/opal/mca/pmix/pmix112/pmix/src/usock/usock_sendrecv.c index 3d77f96ee6e..2a2c208df0b 100644 --- a/opal/mca/pmix/pmix112/pmix/src/usock/usock_sendrecv.c +++ b/opal/mca/pmix/pmix112/pmix/src/usock/usock_sendrecv.c @@ -112,6 +112,7 @@ static void lost_connection(pmix_peer_t *peer, pmix_status_t err) /* remove all registered event handlers so libevent doesn't complain */ PMIX_LIST_FOREACH_SAFE(reginfoptr, regnext, &pmix_server_globals.client_eventregs, pmix_regevents_info_t) { if (reginfoptr->peer == peer) { + pmix_list_remove_item(&pmix_server_globals.client_eventregs, ®infoptr->super); PMIX_RELEASE(reginfoptr); break; }