From 2488c97ebd49147c23b9de6751ada7d101f55daa Mon Sep 17 00:00:00 2001 From: Wim Taymans Date: Thu, 13 Nov 2008 18:05:40 +0000 Subject: [PATCH] docs/random/wtay/poll-timeout: Small tweaks. Original commit message from CVS: * docs/random/wtay/poll-timeout: Small tweaks. --- ChangeLog | 5 +++++ docs/random/wtay/poll-timeout | 24 ++++++++++++++---------- 2 files changed, 19 insertions(+), 10 deletions(-) diff --git a/ChangeLog b/ChangeLog index 83ba8ea..0cafacc 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,10 @@ 2008-11-13 Wim Taymans + * docs/random/wtay/poll-timeout: + Small tweaks. + +2008-11-13 Wim Taymans + * tests/old/testsuite/caps/intersection.c: (main): * tests/old/testsuite/plugin/loading.c: (main): Remove references to deprecated API g_mem_chunk*. diff --git a/docs/random/wtay/poll-timeout b/docs/random/wtay/poll-timeout index ef6e91b..e625bcb 100644 --- a/docs/random/wtay/poll-timeout +++ b/docs/random/wtay/poll-timeout @@ -76,12 +76,14 @@ waiting for id: /* we got unscheduled, see if it was because we timed out or some other * id got unscheduled */ if (ret != 0) { - lock - /* some other id got unlocked */ - /* wait until it reads the fd and signals us */ - while (waiters) - cond_wait () - unlock + if (g_atomic_int_get (&waiters) > 0) { + lock + /* some other id got unlocked */ + /* wait until it reads the fd and signals us */ + while (waiters) + cond_wait () + unlock + } } else { /* we timed out update the status. */ @@ -89,16 +91,18 @@ waiting for id: break; } } - else if (g_atomic_int_compare_and_exchange (&id->state, UNSCHEDULED, OK) { + else if (g_atomic_int_get (&id->state) == UNSCHEDULED) { /* id became unscheduled, read the fd and broadcast */ lock read (fd) - waiters-- + g_atomic_int_dec (&waiters); cond_broadcast () unlock - id->state = UNSCHEDULED; break; } + else { + g_assert_not_reached (); + } } return id->state; @@ -109,7 +113,7 @@ unschedule id: if (g_atomic_int_compare_and_exchange (&id->state, BUSY, UNSCHEDULED) { /* if it's busy waiting in poll, write to the fd */ lock - waiters++ + g_atomic_int_inc (&waiters) write (fd) unlock } -- 2.7.4