Robert Haas <robertmhaas@gmail.com> writes:
> On Mon, Oct 27, 2014 at 3:31 PM, Tom Lane <tgl@sss.pgh.pa.us> wrote:
>> Why could we not remove the hasMessages flags again, and change the
>> unlocked test
>>
>> if (!stateP->hasMessages)
>> return 0;
>>
>> into
>>
>> if (stateP->nextMsgNum == segP->maxMsgNum &&
>> !stateP->resetState)
>> return 0;
>>
>> If we are looking at stale shared state, this test might produce a
>> false positive, but I don't see why it's any less safe than testing a
>> hasMessages boolean.
> It was discussed at the time:
> http://www.postgresql.org/message-id/CA+TgmoY3Q56ZR6i8h+iGhXCw6rCZyvdWJ3RQT=PMVev4-=+N_g@mail.gmail.com
> http://www.postgresql.org/message-id/13077.1311702188@sss.pgh.pa.us
Neither of those messages seem to me to bear on this point. AFAICS,
the unlocked hasMessages test has a race condition, which the comment
just above it argues isn't a problem in practice. What I propose above
would have an absolutely indistinguishable race condition, which again
wouldn't be a problem in practice if you believe the comment's argument.
regards, tom lane