• Robert Haas's avatar
    Reduce the number of semaphores used under --disable-spinlocks. · daa7527a
    Robert Haas authored
    Instead of allocating a semaphore from the operating system for every
    spinlock, allocate a fixed number of semaphores (by default, 1024)
    from the operating system and multiplex all the spinlocks that get
    created onto them.  This could self-deadlock if a process attempted
    to acquire more than one spinlock at a time, but since processes
    aren't supposed to execute anything other than short stretches of
    straight-line code while holding a spinlock, that shouldn't happen.
    
    One motivation for this change is that, with the introduction of
    dynamic shared memory, it may be desirable to create spinlocks that
    last for less than the lifetime of the server.  Without this change,
    attempting to use such facilities under --disable-spinlocks would
    quickly exhaust any supply of available semaphores.  Quite apart
    from that, it's desirable to contain the quantity of semaphores
    needed to run the server simply on convenience grounds, since using
    too many may make it harder to get PostgreSQL running on a new
    platform, which is mostly the point of --disable-spinlocks in the
    first place.
    
    Patch by me; review by Tom Lane.
    daa7527a
spin.c 2.27 KB