docs/random/wtay/poll-timeout: Small tweaks.

Original commit message from CVS:
* docs/random/wtay/poll-timeout:
Small tweaks.
This commit is contained in:
Wim Taymans 2008-11-13 18:05:40 +00:00
parent bb0cd4e7f1
commit 2488c97ebd
2 changed files with 19 additions and 10 deletions

View file

@ -1,3 +1,8 @@
2008-11-13 Wim Taymans <wim.taymans@collabora.co.uk>
* docs/random/wtay/poll-timeout:
Small tweaks.
2008-11-13 Wim Taymans <wim.taymans@collabora.co.uk>
* tests/old/testsuite/caps/intersection.c: (main):

View file

@ -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
}