1
1

In addition to r16513, this commit fixes trac:1170.

If we cannot resolve the route to the peer that we're trying to send
to, don't queue up the message in the TCP OOB -- instead, return it to
the upper layer (e.g., the RML) and let it decide what to do.

In the case of the routed RML, the tree component will queue it up for
later transmission.  Hence, we don't want the message queued up both
here in the TCP OOB and the tree routed.  Also see some more
discussion / explanation in #1171.

This commit was SVN r16540.

The following SVN revision numbers were found above:
  r16513 --> open-mpi/ompi@7ae9589d70

The following Trac tickets were found above:
  Ticket 1170 --> https://svn.open-mpi.org/trac/ompi/ticket/1170
Этот коммит содержится в:
Jeff Squyres 2007-10-22 13:46:57 +00:00
родитель 63dde87076
Коммит 5637c7a5a0

Просмотреть файл

@ -163,12 +163,25 @@ int mca_oob_tcp_peer_send(mca_oob_tcp_peer_t* peer, mca_oob_tcp_msg_t* msg)
/*
* queue the message and attempt to resolve the peer address
*/
opal_list_append(&peer->peer_send_queue, (opal_list_item_t*)msg);
if(peer->peer_state == MCA_OOB_TCP_CLOSED) {
peer->peer_state = MCA_OOB_TCP_RESOLVE;
/* Only queue up the message if we known who the peer is.
If we don't, return the error and let the upper layer
figure out what to do. Cannot hold the peer_lock when
we call resolve(), but we do need to hold it when/if we
append to the peer_send_queue. */
OPAL_THREAD_UNLOCK(&peer->peer_lock);
return mca_oob_tcp_resolve(peer);
rc = mca_oob_tcp_resolve(peer);
if (ORTE_ERR_ADDRESSEE_UNKNOWN != rc) {
OPAL_THREAD_LOCK(&peer->peer_lock);
opal_list_append(&peer->peer_send_queue,
(opal_list_item_t*)msg);
OPAL_THREAD_UNLOCK(&peer->peer_lock);
}
return rc;
}
opal_list_append(&peer->peer_send_queue, (opal_list_item_t*)msg);
break;
case MCA_OOB_TCP_FAILED:
rc = ORTE_ERR_UNREACH;