]> 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:24 +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 50391414305f9d99fb017ebf891f9e5d8cba7414..9b73e7e1851b26f424559ea535802d8242e3a929 100644 (file)
@@ -97,7 +97,7 @@ SpinlockSemaInit(PGSemaphore spinsemas)
 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;
 }