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);	   
 	    }