Port-xen archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

Re: x86 instructions reordering



On Fri, Mar 25, 2005 at 12:22:13PM +0100, TLorD wrote:
> -----BEGIN PGP SIGNED MESSAGE-----
> Hash: SHA1
> 
> Drats, forgot about the did_something/goto thing.
> 
> This makes the lock it a bit more unlikely, but still possible.
> (by the way, you DID set did_something = 0 after again:, didn't you?)

Yes

> 
> What happens when
> did_something = 1, goto again, just passed the a = shared_memory->a; line
> send()
> 
> Another handle_event is run (after all, send_event() is run)? If so, you 
> might
> have a race condition in which the first writes new_b = b + 1, then the 
> first
> one goes new_b = b and you're out of sync again.
> Is it ignored? then b falls behind a again.

Events are queued. So if send_event() is called while handle_event() is 
running, we won't have 2 threads running handle_event(), but handle_event()
will be called again when it exits. So what you describe here shouldn't
happen.
It is possible that the problem is in the way events are queued.
I already have debugged this part, but it's still possible I missed one bug.

-- 
Manuel Bouyer <bouyer%antioche.eu.org@localhost>
     NetBSD: 26 ans d'experience feront toujours la difference
--



Home | Main Index | Thread Index | Old Index