Mercurial > hg > freeDiameter
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 */