From 292eb88bef1b8470dd885882ec738d6a60212822 Mon Sep 17 00:00:00 2001
From: Torsten Merz <mer114@moon-ph.nexus.csiro.au>
Date: Thu, 26 Sep 2019 11:12:07 +1000
Subject: [PATCH] changed locking mechanism of nrt task dispatcher

---
 smi/src/taskdisp_nrt.c | 5 ++++-
 1 file changed, 4 insertions(+), 1 deletion(-)

diff --git a/smi/src/taskdisp_nrt.c b/smi/src/taskdisp_nrt.c
index a626575..96ad2f9 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);	   
 	    }	 
-- 
GitLab