diff --git a/src/mca/oob/tcp/oob_tcp.c b/src/mca/oob/tcp/oob_tcp.c index 3f4a605266..87776b5498 100644 --- a/src/mca/oob/tcp/oob_tcp.c +++ b/src/mca/oob/tcp/oob_tcp.c @@ -140,6 +140,7 @@ static void mca_oob_tcp_accept(void) static int mca_oob_tcp_create_listen(void) { int flags; + int optval; struct sockaddr_in inaddr; ompi_socklen_t addrlen; @@ -149,7 +150,14 @@ static int mca_oob_tcp_create_listen(void) ompi_output(0,"mca_oob_tcp_component_init: socket() failed with errno=%d", errno); return OMPI_ERROR; } - + optval = 1; + if(setsockopt(mca_oob_tcp_component.tcp_listen_sd, SOL_SOCKET, + SO_REUSEADDR, &optval, sizeof(optval)) < 0) { + ompi_output(0, + "mca_oob_tcp_finalize: setsockopt(SO_REUSEADDR) failed with errno=%d\n", + errno); + } + /* bind to all addresses and dynamically assigned port */ memset(&inaddr, 0, sizeof(inaddr)); inaddr.sin_family = AF_INET; @@ -305,18 +313,8 @@ mca_oob_t* mca_oob_tcp_init(bool *allow_multi_user_threads, bool *have_hidden_th */ int mca_oob_tcp_finalize(mca_oob_t* oob) { - int optval; mca_oob_tcp_peer_t * peer; if (mca_oob_tcp_component.tcp_listen_sd >= 0) { - optval = 1; - if(setsockopt(mca_oob_tcp_component.tcp_listen_sd, SOL_SOCKET, - SO_REUSEADDR, &optval, sizeof(optval)) < 0) { - ompi_output(0, - "mca_oob_tcp_finalize: setsockopt(SO_REUSEADDR) failed with errno=%d\n", - errno); - } - /*** temporarily disable the removal of the revieve event - * to prevent segfaults */ ompi_event_del(&mca_oob_tcp_component.tcp_recv_event); if(0 != close(mca_oob_tcp_component.tcp_listen_sd)) { ompi_output(0, "mca_oob_tcp_finalize: error closing listen socket. errno=%d", errno); diff --git a/src/mca/oob/tcp/oob_tcp_peer.c b/src/mca/oob/tcp/oob_tcp_peer.c index acb1c141ca..e79feecc58 100644 --- a/src/mca/oob/tcp/oob_tcp_peer.c +++ b/src/mca/oob/tcp/oob_tcp_peer.c @@ -55,14 +55,7 @@ static void mca_oob_tcp_peer_construct(mca_oob_tcp_peer_t* peer) */ static void mca_oob_tcp_peer_destruct(mca_oob_tcp_peer_t * peer) { - /* temporarily not delete the events to prevent segfaults */ mca_oob_tcp_peer_close(peer); - /*if(peer->peer_state != MCA_OOB_TCP_CLOSED && - peer->peer_sd >= 0) { - ompi_event_del(&peer->peer_send_event); - close(peer->peer_sd); - peer->peer_sd = -1; - }*/ OBJ_DESTRUCT(&(peer->peer_send_queue)); OBJ_DESTRUCT(&(peer->peer_lock)); } diff --git a/test/mca/oob/oob_test_self.c b/test/mca/oob/oob_test_self.c index 8f7a671258..073afb4f90 100755 --- a/test/mca/oob/oob_test_self.c +++ b/test/mca/oob/oob_test_self.c @@ -77,7 +77,6 @@ void callback(int status, const ompi_process_name_t * peer, void callback(int status, const ompi_process_name_t * peer, const struct iovec * msg, int count, int tag, void * cbdata) { - fprintf(stderr, "caqllback called on num %d.\n", (int) cbdata); if(0 != tag) { test_failure("Bad tag."); } @@ -155,8 +154,8 @@ int main(int argc, char ** argv) } else { test_success(); } - if(!compare_iovec(recv_msg1, send_msg1, 3)) { - test_failure("compare 1 is wrong"); + if(!compare_iovec(recv_msg1, send_msg1, 4)) { + test_failure("compare 2 is wrong"); } break; case MSG_TYPE_2: @@ -165,8 +164,8 @@ int main(int argc, char ** argv) } else { test_success(); } - if(!compare_iovec(recv_msg1, send_msg1, 3)) { - test_failure("compare 1 is wrong"); + if(!compare_iovec(recv_msg2, send_msg2, 3)) { + test_failure("compare 3 is wrong"); } break; default: