diff --git a/orte/mca/oob/usock/oob_usock.c b/orte/mca/oob/usock/oob_usock.c index 2f88abda0f..9992e62a97 100644 --- a/orte/mca/oob/usock/oob_usock.c +++ b/orte/mca/oob/usock/oob_usock.c @@ -316,6 +316,10 @@ static void process_send(int fd, short args, void *cbdata) goto cleanup; } + if (MCA_OOB_USOCK_CLOSED == peer->state) { + /* the peer has gone, it will never come back */ + goto cleanup; + } /* add the message to the queue for sending after the * connection is formed */ diff --git a/orte/mca/oob/usock/oob_usock_connection.c b/orte/mca/oob/usock/oob_usock_connection.c index 48229b80fc..ea3e113121 100644 --- a/orte/mca/oob/usock/oob_usock_connection.c +++ b/orte/mca/oob/usock/oob_usock_connection.c @@ -14,7 +14,7 @@ * Copyright (c) 2009 Cisco Systems, Inc. All rights reserved. * Copyright (c) 2011 Oak Ridge National Labs. All rights reserved. * Copyright (c) 2013-2015 Intel, Inc. All rights reserved. - * Copyright (c) 2014 Research Organization for Information Science + * Copyright (c) 2014-2016 Research Organization for Information Science * and Technology (RIST). All rights reserved. * $COPYRIGHT$ * @@ -85,7 +85,7 @@ static int usock_peer_create_socket(mca_oob_usock_peer_t* peer) { int flags; - if (peer->sd > 0) { + if (peer->sd >=0) { return ORTE_SUCCESS; } @@ -771,6 +771,7 @@ void mca_oob_usock_peer_close(mca_oob_usock_peer_t *peer) /* release the socket */ close(peer->sd); + peer->sd = -1; /* inform the component-level that we have lost a connection so * it can decide what to do about it.