]> git.ipfire.org Git - thirdparty/postgresql.git/commitdiff
spinlock emulation: Fix bug when more than INT_MAX spinlocks are initialized.
authorAndres Freund <andres@anarazel.de>
Mon, 8 Jun 2020 22:25:49 +0000 (15:25 -0700)
committerAndres Freund <andres@anarazel.de>
Wed, 17 Jun 2020 19:51:15 +0000 (12:51 -0700)
Once the counter goes negative we ended up with spinlocks that errored
out on first use (due to check in tas_sema).

Author: Andres Freund
Reviewed-By: Robert Haas
Discussion: https://postgr.es/m/20200606023103.avzrctgv7476xj7i@alap3.anarazel.de
Backpatch: 9.5-

src/backend/storage/lmgr/spin.c

index 6d59a7f15dd7922e8388bf99713f744dd8e2b3e0..da9cc0d8c9328cf742bb57ad0f2ee103e4b0719b 100644 (file)
@@ -106,7 +106,7 @@ SpinlockSemaInit(void)
 void
 s_init_lock_sema(volatile slock_t *lock, bool nested)
 {
-       static int      counter = 0;
+       static uint32 counter = 0;
 
        *lock = ((++counter) % NUM_SPINLOCK_SEMAPHORES) + 1;
 }