]> granicus.if.org Git - postgresql/commitdiff
Fix pg_atomic_u64 initialization.
authorHeikki Linnakangas <heikki.linnakangas@iki.fi>
Wed, 16 Aug 2017 21:48:44 +0000 (00:48 +0300)
committerHeikki Linnakangas <heikki.linnakangas@iki.fi>
Wed, 16 Aug 2017 21:48:44 +0000 (00:48 +0300)
As Andres pointed out, pg_atomic_init_u64 must be used to initialize an
atomic variable, before it can be accessed with the actual atomic ops.
Trying to use pg_atomic_write_u64 on an uninitialized variable leads to a
failure with the fallback implementation that uses a spinlock.

Discussion: https://www.postgresql.org/message-id/20170816191346.d3ke5tpshhco4bnd%40alap3.anarazel.de

src/backend/access/heap/heapam.c

index 7dea8472c17243dfd99d7db0ab77a8531d384d55..8792f1453cb96ced3c999b314413d0885bfe5895 100644 (file)
@@ -1638,7 +1638,7 @@ heap_parallelscan_initialize(ParallelHeapScanDesc target, Relation relation,
                target->phs_nblocks > NBuffers / 4;
        SpinLockInit(&target->phs_mutex);
        target->phs_startblock = InvalidBlockNumber;
-       pg_atomic_write_u64(&target->phs_nallocated, 0);
+       pg_atomic_init_u64(&target->phs_nallocated, 0);
        SerializeSnapshot(snapshot, target->phs_snapshot_data);
 }