Fixes ticket 186.
First, move the OPAL_THREAD_LOCK out to the same level as its corresponding UNLOCK. It was possible to hit the UNLOCK without ever acquiring the lock. Since the OPAL_THREAD_ADD64() is now protected by this lock, we can just do the decrement non-atomically. This commit was SVN r11958.
Этот коммит содержится в:
родитель
1177844d7a
Коммит
836261b85a
@ -300,11 +300,12 @@ static void mca_pml_dr_frag_completion(
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* have all pending frags completed for this vfrag? */
|
/* have all pending frags completed for this vfrag? */
|
||||||
if(OPAL_THREAD_ADD64(&vfrag->vf_pending,-1) == 0) {
|
OPAL_THREAD_LOCK(&ompi_request_lock);
|
||||||
|
vfrag->vf_pending -= 1;
|
||||||
|
if(vfrag->vf_pending == 0) {
|
||||||
MCA_PML_DR_VFRAG_WDOG_STOP(vfrag);
|
MCA_PML_DR_VFRAG_WDOG_STOP(vfrag);
|
||||||
|
|
||||||
/* has the vfrag already been acked */
|
/* has the vfrag already been acked */
|
||||||
OPAL_THREAD_LOCK(&ompi_request_lock);
|
|
||||||
if (vfrag->vf_ack == vfrag->vf_mask) {
|
if (vfrag->vf_ack == vfrag->vf_mask) {
|
||||||
|
|
||||||
sendreq->req_bytes_delivered += vfrag->vf_size;
|
sendreq->req_bytes_delivered += vfrag->vf_size;
|
||||||
|
Загрузка…
x
Ссылка в новой задаче
Block a user