From: Thomas Munro Date: Wed, 12 Apr 2023 21:19:54 +0000 (+1200) Subject: Remove overzealous assertion from PHJ. X-Git-Tag: REL_16_BETA1~213 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=b37d051b0e59e4324e346655a27509507813db79;p=thirdparty%2Fpostgresql.git Remove overzealous assertion from PHJ. We can't assert that we're the only process attached to a barrier after BarrierArriveAndDetachExceptLast(). Although that'll be true almost always, a late-starting parallel worker can attach very briefly (that is, immediately detach after checking the phase) right at that moment. BarrierArriveAndDetachExceptLast() already contains an assertion like that, but it holds a spinlock preventing the race. This thinko caused a one-off failure on build farm animal chimaera. Diagnosed-by: Melanie Plageman Reported-by: Tom Lane Discussion: https://postgr.es/m/3590249.1680971629@sss.pgh.pa.us --- diff --git a/src/backend/executor/nodeHash.c b/src/backend/executor/nodeHash.c index a45bd3a3156..2e13ed17e16 100644 --- a/src/backend/executor/nodeHash.c +++ b/src/backend/executor/nodeHash.c @@ -2115,7 +2115,6 @@ ExecParallelPrepHashTableForUnmatched(HashJoinState *hjstate) /* Now we are alone with this batch. */ Assert(BarrierPhase(&batch->batch_barrier) == PHJ_BATCH_SCAN); - Assert(BarrierParticipants(&batch->batch_barrier) == 1); /* * Has another process decided to give up early and command all processes