From: | "Kevin Grittner" <Kevin(dot)Grittner(at)wicourts(dot)gov> |
---|---|
To: | <tgl(at)sss(dot)pgh(dot)pa(dot)us> |
Cc: | <alvherre(at)alvh(dot)no-ip(dot)org>, <pgsql-hackers(at)postgresql(dot)org> |
Subject: | Re: database vacuum from cron hanging |
Date: | 2005-10-12 16:19:55 |
Message-ID: | s34cf165.049@gwmta.wicourts.gov |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-hackers |
Declaring it as volatile gives:
movb $1, %al
cmpb $0,28(%ebx)
jne 1f
lock
xchgb %al,28(%ebx)
1:
testb %al, %al
jne .L228
.L221:
movl 20(%ebx), %eax
incl %eax
movl %eax, 20(%ebx)
movw 16(%ebx), %ax
movb $0, 28(%ebx)
shrl %eax
andl $1, %eax
movl %eax, %edi
movl PrivateRefCount, %eax
>>> Tom Lane <tgl(at)sss(dot)pgh(dot)pa(dot)us> 10/12/05 11:00 AM >>>
"Kevin Grittner" <Kevin(dot)Grittner(at)wicourts(dot)gov> writes:
> bufmgr.s file coming in separate (off-list) email.
Yup, here is the smoking gun! This code in PinBuffer
LockBufHdr_NoHoldoff(buf);
buf->refcount++;
result = (buf->flags & BM_VALID) != 0;
UnlockBufHdr_NoHoldoff(buf);
is translated as
movb $1, %al
cmpb $0,28(%ebx)
jne 1f
lock
xchgb %al,28(%ebx) <-- acquire spinlock
1:
testb %al, %al
jne .L228 <-- (failure case is out-of-line)
.L221:
movl 20(%ebx), %ecx <-- fetch refcount
movw 16(%ebx), %ax
incl %ecx <-- increment refcount
movb $0, 28(%ebx) <-- release spinlock
shrl %eax
movl %ecx, 20(%ebx) <-- store back refcount
andl $1, %eax
movl %eax, %edi
For comparison, gcc 4.0.1 on my Fedora machine produces
movb $1, %al
cmpb $0,28(%ebx)
jne 1f
lock
xchgb %al,28(%ebx) <-- acquire spinlock
1:
testb %al, %al
jne .L117
incl 20(%ebx) <-- increment refcount
movw 16(%ebx), %ax
movb $0, 28(%ebx) <-- release spinlock
movl %eax, %edi
shrl %edi
andl $1, %edi
movl PrivateRefCount, %eax
which is safe.
What we probably need to do is insert some "volatile" qualifiers
to force the compiler to behave better. What happens to the code
if you change PinBuffer to be declared as
static bool
PinBuffer(volatile BufferDesc *buf)
?
regards, tom lane
From | Date | Subject | |
---|---|---|---|
Next Message | Tom Lane | 2005-10-12 16:25:11 | Re: database vacuum from cron hanging |
Previous Message | Tom Lane | 2005-10-12 16:00:15 | Re: database vacuum from cron hanging |