changeset 139:8b8d11fadc4e

Attempt to fix behavior on multi-CPU platforms, take 2
author Sebastien Decugis <sdecugis@nict.go.jp>
date Wed, 16 Dec 2009 17:12:51 +0900
parents 4249a55f859a
children 34e47f4addf8
files libfreeDiameter/fifo.c
diffstat 1 files changed, 10 insertions(+), 2 deletions(-) [+]
line wrap: on
line diff
--- a/libfreeDiameter/fifo.c	Wed Dec 16 17:09:32 2009 +0900
+++ b/libfreeDiameter/fifo.c	Wed Dec 16 17:12:51 2009 +0900
@@ -162,8 +162,12 @@
 		CHECK_POSIX(  pthread_mutex_unlock( &q->mtx ));
 		CHECK_POSIX(  pthread_cond_signal(&q->cond)  );
 		sched_yield();
+		if (loops >= 10)
+			/* sleep for a few milliseconds */
+			usleep(50000);
+		
 		CHECK_POSIX(  pthread_mutex_lock( &q->mtx )  );
-		ASSERT( ++loops < 10 ); /* detect infinite loops */
+		ASSERT( ++loops < 20 ); /* detect infinite loops */
 	}
 	
 	/* sanity check */
@@ -210,8 +214,12 @@
 		CHECK_POSIX(  pthread_mutex_unlock( &old->mtx ));
 		CHECK_POSIX(  pthread_cond_signal(&old->cond)  );
 		sched_yield();
+		if (loops >= 10)
+			/* sleep for a few milliseconds */
+			usleep(50000);
+		
 		CHECK_POSIX(  pthread_mutex_lock( &old->mtx )  );
-		ASSERT( ++loops < 10 ); /* detect infinite loops */
+		ASSERT( ++loops < 20 ); /* detect infinite loops */
 	}
 	
 	/* Move all data from old to new */
"Welcome to our mercurial repository"