correct mca_oob_tcp_ping to cleanup correctly in the case of a timeout
This commit was SVN r2718.
Этот коммит содержится в:
родитель
46f755c016
Коммит
c32cb44a37
@ -652,7 +652,6 @@ static void mca_oob_tcp_peer_send_handler(int sd, short flags, void* user)
|
|||||||
|
|
||||||
/* complete the current send */
|
/* complete the current send */
|
||||||
mca_oob_tcp_msg_t* msg = peer->peer_send_msg;
|
mca_oob_tcp_msg_t* msg = peer->peer_send_msg;
|
||||||
ompi_list_item_t item1 = *(ompi_list_item_t*)peer;
|
|
||||||
if(mca_oob_tcp_msg_send_handler(msg, peer)) {
|
if(mca_oob_tcp_msg_send_handler(msg, peer)) {
|
||||||
mca_oob_tcp_msg_complete(msg, &peer->peer_name);
|
mca_oob_tcp_msg_complete(msg, &peer->peer_name);
|
||||||
} else {
|
} else {
|
||||||
@ -804,4 +803,28 @@ static void mca_oob_tcp_peer_timer_handler(int sd, short flags, void* user)
|
|||||||
OMPI_THREAD_UNLOCK(&peer->peer_lock);
|
OMPI_THREAD_UNLOCK(&peer->peer_lock);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Remove any references to the indicated message.
|
||||||
|
*/
|
||||||
|
|
||||||
|
void mca_oob_tcp_peer_dequeue_msg(mca_oob_tcp_peer_t* peer, mca_oob_tcp_msg_t* msg)
|
||||||
|
{
|
||||||
|
ompi_list_item_t* item;
|
||||||
|
OMPI_THREAD_LOCK(&peer->peer_lock);
|
||||||
|
if (peer->peer_send_msg == msg)
|
||||||
|
peer->peer_send_msg = NULL;
|
||||||
|
if (peer->peer_recv_msg == msg)
|
||||||
|
peer->peer_recv_msg = NULL;
|
||||||
|
|
||||||
|
for( item = ompi_list_get_first(&peer->peer_send_queue);
|
||||||
|
item != ompi_list_get_end(&peer->peer_send_queue);
|
||||||
|
item != ompi_list_get_next(item)) {
|
||||||
|
if(item == (ompi_list_item_t*)msg) {
|
||||||
|
ompi_list_remove_item(&peer->peer_send_queue, item);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
OMPI_THREAD_UNLOCK(&peer->peer_lock);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -131,6 +131,11 @@ void mca_oob_tcp_peer_resolved(mca_oob_tcp_peer_t* peer, mca_oob_tcp_addr_t* add
|
|||||||
*/
|
*/
|
||||||
int mca_oob_tcp_peer_send_ident(mca_oob_tcp_peer_t* peer);
|
int mca_oob_tcp_peer_send_ident(mca_oob_tcp_peer_t* peer);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Remove any references to the message from the peers send/recv queue.
|
||||||
|
*/
|
||||||
|
void mca_oob_tcp_peer_dequeue_msg(mca_oob_tcp_peer_t* peer, mca_oob_tcp_msg_t* msg);
|
||||||
|
|
||||||
#if defined(c_plusplus) || defined(__cplusplus)
|
#if defined(c_plusplus) || defined(__cplusplus)
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
@ -15,7 +15,6 @@ int mca_oob_tcp_ping(
|
|||||||
const ompi_process_name_t* name,
|
const ompi_process_name_t* name,
|
||||||
const struct timeval *timeout)
|
const struct timeval *timeout)
|
||||||
{
|
{
|
||||||
#if 0
|
|
||||||
mca_oob_tcp_peer_t* peer = mca_oob_tcp_peer_lookup(name);
|
mca_oob_tcp_peer_t* peer = mca_oob_tcp_peer_lookup(name);
|
||||||
mca_oob_tcp_msg_t* msg;
|
mca_oob_tcp_msg_t* msg;
|
||||||
struct timeval tv;
|
struct timeval tv;
|
||||||
@ -78,10 +77,9 @@ int mca_oob_tcp_ping(
|
|||||||
ts.tv_sec = tv.tv_sec;
|
ts.tv_sec = tv.tv_sec;
|
||||||
ts.tv_nsec = (tv.tv_usec * 1000);
|
ts.tv_nsec = (tv.tv_usec * 1000);
|
||||||
rc = mca_oob_tcp_msg_timedwait(msg, NULL, &ts);
|
rc = mca_oob_tcp_msg_timedwait(msg, NULL, &ts);
|
||||||
|
if(rc != OMPI_SUCCESS)
|
||||||
|
mca_oob_tcp_peer_dequeue_msg(peer,msg);
|
||||||
MCA_OOB_TCP_MSG_RETURN(msg);
|
MCA_OOB_TCP_MSG_RETURN(msg);
|
||||||
return rc;
|
return rc;
|
||||||
#else
|
|
||||||
return OMPI_SUCCESS;
|
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Загрузка…
Ссылка в новой задаче
Block a user