BUG #15887: An extra "break" instruction causes a bug

From: PG Bug reporting form <noreply(at)postgresql(dot)org>
To: pgsql-bugs(at)lists(dot)postgresql(dot)org
Cc: ruihaij(at)gmail(dot)com
Subject: BUG #15887: An extra "break" instruction causes a bug
Date: 2019-07-03 03:04:47
Message-ID: 15887-e9320033d84cf7ea@postgresql.org
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-bugs

The following bug has been logged on the website:

Bug reference: 15887
Logged by: Rui Hai Jiang
Email address: ruihaij(at)gmail(dot)com
PostgreSQL version: 12beta2
Operating system: all
Description:

In function TopoSort(), an extra "break" instruction make it impossible to
set beforeConstraints to -1 for other
processes in the same group. If the waiter's group has more than one
members in the wait for queue, the sorting couldn't get the right order.

The issue exists in all V10,V11,V12 releases.

static bool
TopoSort(LOCK *lock,
EDGE *constraints,
int nConstraints,
PGPROC **ordering) /* output argument */
{
MemSet(beforeConstraints, 0, queue_size * sizeof(int));
MemSet(afterConstraints, 0, queue_size * sizeof(int));
for (i = 0; i < nConstraints; i++)
{
/*
* Find a representative process that is on the lock queue
and part of
* the waiting lock group. This may or may not be the
leader, which
* may or may not be waiting at all. If there are any other
processes
* in the same lock group on the queue, set their number
of
* beforeConstraints to -1 to indicate that they should be
emitted
* with their groupmates rather than considered
separately.
*/
proc = constraints[i].waiter;
Assert(proc != NULL);
jj = -1;
for (j = queue_size; --j >= 0;)
{
PGPROC *waiter = topoProcs[j];

if (waiter == proc || waiter->lockGroupLeader ==
proc)
{
Assert(waiter->waitLock == lock);
if (jj == -1)
jj = j;
else
{
Assert(beforeConstraints[j] <= 0);
beforeConstraints[j] = -1;
}
break;
}
}
}
}

A proposed patch is also sent to the hacker' list.

https://www.postgresql.org/message-id/CAEri+mLd3bpHLyW+a9pSe1y=aEkeuJpwBSwvo-+m4n7-ceRmXw@mail.gmail.com

Browse pgsql-bugs by date

  From Date Subject
Next Message PG Bug reporting form 2019-07-03 08:03:24 BUG #15888: Bogus "idle in transaction" state for logical decoding client after creating a slot
Previous Message Andrew Gierth 2019-07-03 02:44:08 Re: SELECT results in "ERROR: index key does not match expected index column"