Re: smgrwrite() without LockBuffer(was RE: Shouldn't flush dirty buffers at shutdown ?)

From: Tom Lane <tgl(at)sss(dot)pgh(dot)pa(dot)us>
To: "Hiroshi Inoue" <Inoue(at)tpf(dot)co(dot)jp>
Cc: "Mikheev, Vadim" <vmikheev(at)SECTORBASE(dot)COM>, "pgsql-hackers" <pgsql-hackers(at)postgresql(dot)org>
Subject: Re: smgrwrite() without LockBuffer(was RE: Shouldn't flush dirty buffers at shutdown ?)
Date: 2000-05-26 03:40:13
Message-ID: 5341.959312413@sss.pgh.pa.us
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-hackers

"Hiroshi Inoue" <Inoue(at)tpf(dot)co(dot)jp> writes:
> As far as I see,PostgreSQL doesn't call LockBuffer() before
> calling smgrwrite(). This seems to mean that smgrwrite()
> could write buffers to disk which are being changed by
> another backend. If the(another) backend was aborted by
> some reason the buffer page would remain half-changed.

Hmm ... looks fishy to me too. Seems like we ought to hold
BUFFER_LOCK_SHARE on the buffer while dumping it out. It
wouldn't matter under normal circumstances, but as you say
there could be trouble if the other backend crashed before
it could mark the buffer dirty again, or if we had a system
crash before the dirtied page got written again.

Vadim, what do you think?

regards, tom lane

In response to

Browse pgsql-hackers by date

  From Date Subject
Next Message Lamar Owen 2000-05-26 03:54:11 PostgreSQL 7.0-3 RPMset available.
Previous Message Philip Warner 2000-05-26 03:31:33 Re: vacuum analyze feedback