Heikki Linnakangas <heikki.linnakan...@enterprisedb.com> writes: > On 13.11.2010 17:07, Tom Lane wrote: >> Robert Haas<robertmh...@gmail.com> writes: >>> Come to think of it, I'm not really sure I understand what protects >>> SetLatch() against memory ordering hazards. Is that actually safe? >> >> Hmm ... that's a good question. It certainly *looks* like it could >> malfunction on machines with weak memory ordering.
> Can you elaborate? Weak memory ordering means that stores into shared memory initiated by one processor are not guaranteed to be observed to occur in the same sequence by another processor. This implies first that the latch code could malfunction all by itself, if two processes manipulate a latch at about the same time, and second (probably much less likely) that there could be a malfunction involving a process that's waited on a latch not seeing the shared-memory status updates that another process did "before" setting the latch. This is not at all hypothetical --- my first attempt at rewriting the sinval signaling code, a couple years back, failed on PPC machines in the buildfarm because of exactly this type of issue. The quick-and-dirty way to fix this is to attach a spinlock to each latch, because we already have memory ordering sync instructions in the spinlock primitives. Doing better would probably involve developing a new set of processor-specific primitives --- which would be pretty easy for the processors where we have gcc inline asm, but it would take some research for the platforms where we're relying on magic OS-provided subroutines. regards, tom lane -- Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org) To make changes to your subscription: http://www.postgresql.org/mailpref/pgsql-hackers