Modified the MCA_BTL_TCP_CONNECTED case in mca_btl_tcp_endpoint_send_handler()
to always first check for a NULL frag pointer before trying to send the fragment. This avoids an issue in multi-threaded execution in which multiple threads working on the same endpoint can result in a thread finding itself here with nothing to send. This commit was SVN r15963.
Этот коммит содержится в:
родитель
475073c684
Коммит
ccda5c9c74
@ -723,7 +723,7 @@ static void mca_btl_tcp_endpoint_send_handler(int sd, short flags, void* user)
|
||||
break;
|
||||
case MCA_BTL_TCP_CONNECTED:
|
||||
/* complete the current send */
|
||||
do {
|
||||
while (NULL != btl_endpoint->endpoint_send_frag) {
|
||||
mca_btl_tcp_frag_t* frag = btl_endpoint->endpoint_send_frag;
|
||||
if(mca_btl_tcp_frag_send(frag, btl_endpoint->endpoint_sd) == false) {
|
||||
break;
|
||||
@ -737,7 +737,7 @@ static void mca_btl_tcp_endpoint_send_handler(int sd, short flags, void* user)
|
||||
frag->base.des_cbfunc(&frag->btl->super, frag->endpoint, &frag->base, frag->rc);
|
||||
OPAL_THREAD_LOCK(&btl_endpoint->endpoint_send_lock);
|
||||
|
||||
} while (NULL != btl_endpoint->endpoint_send_frag);
|
||||
}
|
||||
|
||||
/* if nothing else to do unregister for send event notifications */
|
||||
if(NULL == btl_endpoint->endpoint_send_frag) {
|
||||
|
Загрузка…
x
Ссылка в новой задаче
Block a user