From: | Jeff Janes <jeff(dot)janes(at)gmail(dot)com> |
---|---|
To: | Andres Freund <andres(at)anarazel(dot)de> |
Cc: | Tom Lane <tgl(at)sss(dot)pgh(dot)pa(dot)us>, Andrey <parihaaraka(at)gmail(dot)com>, Pg Bugs <pgsql-bugs(at)postgresql(dot)org> |
Subject: | Re: NOTIFY does not work as expected |
Date: | 2018-07-04 22:11:03 |
Message-ID: | CAMkU=1zCfdxGBcm7N=Twr7bz4KTmYZbEhq=f-VaNmP6d4ry-Tw@mail.gmail.com |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-bugs |
On Wed, Jul 4, 2018 at 2:30 PM, Andres Freund <andres(at)anarazel(dot)de> wrote:
> Hi,
>
>
> On 2018-07-04 08:50:12 -0400, Jeff Janes wrote:
> > Reading through the comments touched by the commit, it seems obvious what
> > the bug is. It says "cause the processing to occur just before we next
> go
> > idle", but also says "This is called just *after* waiting for a frontend
> > command", which is too late to be "before we next go idle"
>
> I've not looked at this issue in depth yet. So I might be completely off
> base. But I'm confused by your comment - we're doing it *after*,
> because we do a non-blocking read. And the latch will notify us
> (event.events & WL_LATCH_SET) if there was a read.
>
We get a signal while we are busy. We set the flag and the latch. The
latch
wakes us up, but since we are busy (in a transaction, specifically) we don't
do anything. Later, the transaction ends and we are about to go idle, but
no one checks the flag again. We start a read using the latch mechanism,
but
the flag notifyInterruptPending being set true from a now-long-gone signal
is not on
the list of things the latch wakes us for. It is technically a
non-blocking read but from
the perspective if the pending notify message it is a blocking read, unless
another
signal comes along and rescues us.
Cheers,
Jeff
From | Date | Subject | |
---|---|---|---|
Next Message | Grigory Smolkin | 2018-07-05 15:05:17 | long analyze, libc bug and libicu |
Previous Message | Andres Freund | 2018-07-04 18:30:55 | Re: NOTIFY does not work as expected |