I wrote: > Can anyone spot the problem? If not I fear we'll have to revert this.
After a bit of reading MIPS documentation, I found out that the proposed patch is exactly backward: it returns 1 if it gets the lock and 0 if the lock is already held :-( Because callers will loop on a nonzero return, the second iteration falls through, which is why the thing isn't an infinite loop. Only problem is when we hit the lock at an instant when somebody else already has it. Given the short duration of our spinlock holds, it was probably quite a coincidence that Stefan's machine got a failure almost immediately. We might have had the problem lurking for awhile. I'll try to commit something that really works in a little bit. regards, tom lane ---------------------------(end of broadcast)--------------------------- TIP 4: Have you searched our list archives? http://archives.postgresql.org