correction for hang, check for additional fragments before callback,
which may queue a new fragment This commit was SVN r7889.
Этот коммит содержится в:
родитель
5bb0d4a053
Коммит
13409ec53b
@ -657,16 +657,15 @@ static void mca_btl_tcp_endpoint_send_handler(int sd, short flags, void* user)
|
|||||||
if(mca_btl_tcp_frag_send(frag, btl_endpoint->endpoint_sd) == false) {
|
if(mca_btl_tcp_frag_send(frag, btl_endpoint->endpoint_sd) == false) {
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
btl_endpoint->endpoint_send_frag = NULL;
|
/* progress any pending sends */
|
||||||
|
btl_endpoint->endpoint_send_frag = (mca_btl_tcp_frag_t*)
|
||||||
|
opal_list_remove_first(&btl_endpoint->endpoint_frags);
|
||||||
|
|
||||||
/* if required - update request status and release fragment */
|
/* if required - update request status and release fragment */
|
||||||
OPAL_THREAD_UNLOCK(&btl_endpoint->endpoint_send_lock);
|
OPAL_THREAD_UNLOCK(&btl_endpoint->endpoint_send_lock);
|
||||||
frag->base.des_cbfunc(&frag->btl->super, frag->endpoint, &frag->base, frag->rc);
|
frag->base.des_cbfunc(&frag->btl->super, frag->endpoint, &frag->base, frag->rc);
|
||||||
OPAL_THREAD_LOCK(&btl_endpoint->endpoint_send_lock);
|
OPAL_THREAD_LOCK(&btl_endpoint->endpoint_send_lock);
|
||||||
|
|
||||||
/* progress any pending sends */
|
|
||||||
btl_endpoint->endpoint_send_frag = (mca_btl_tcp_frag_t*)
|
|
||||||
opal_list_remove_first(&btl_endpoint->endpoint_frags);
|
|
||||||
} while (NULL != btl_endpoint->endpoint_send_frag);
|
} while (NULL != btl_endpoint->endpoint_send_frag);
|
||||||
|
|
||||||
/* if nothing else to do unregister for send event notifications */
|
/* if nothing else to do unregister for send event notifications */
|
||||||
|
Загрузка…
x
Ссылка в новой задаче
Block a user