diff --git a/smi/src/taskdisp_nrt.c b/smi/src/taskdisp_nrt.c index a626575a8718b34352449028dafbc261d6f7fe5b..96ad2f9a0fe5710e50b37fc6cff2107958c37944 100644 --- a/smi/src/taskdisp_nrt.c +++ b/smi/src/taskdisp_nrt.c @@ -238,7 +238,10 @@ usleep(10000); //printf("aaaaaa->%d",__sync_fetch_and_add(&(shm->taskStateSysVar[i].exit),0)); numberOfSMIIterations=__sync_fetch_and_add(&(shm->numberOfSMIIterations),0); - while (numberOfSMIIterations==__sync_fetch_and_add(&(shm->numberOfSMIIterations),0) && shm->run!=0) + while ( + __sync_fetch_and_add(&(shm->taskStateSysVar[i].exit),0)==ATOMIC_UNLOCKED + && + numberOfSMIIterations+2>__sync_fetch_and_add(&(shm->numberOfSMIIterations),0) && shm->run!=0) { usleep(STD_SLEEP); }