• Robert Haas's avatar
    Simplify LWLock tranche machinery by removing array_base/array_stride. · 3761fe3c
    Robert Haas authored
    array_base and array_stride were added so that we could identify the
    offset of an LWLock within a tranche, but this facility is only very
    marginally used apart from the main tranche.  So, give every lock in
    the main tranche its own tranche ID and get rid of array_base,
    array_stride, and all that's attached.  For debugging facilities
    (Trace_lwlocks and LWLOCK_STATS) print the pointer address of the
    LWLock using %p instead of the offset.  This is arguably more useful,
    and certainly a lot cheaper.  Drop the offset-within-tranche from
    the information reported to dtrace and from one can't-happen message
    inside lwlock.c.
    
    The main user-visible impact of this change is that pg_stat_activity
    will now report all waits for LWLocks as "LWLock" rather than
    reporting some as "LWLockTranche" and others as "LWLockNamed".
    
    The main motivation for this change is that the need to specify an
    array_base and an array_stride is awkward for parallel query.  There
    is only a very limited supply of tranche IDs so we can't just keep
    allocating new ones, and if we try to use the same tranche IDs every
    time then we run into trouble when multiple parallel contexts are
    use simultaneously.  So if we didn't get rid of this mechanism we'd
    have to make it even more complicated.  By simplifying it in this
    way, we instead reduce the size of the generated code for lwlock.c
    by about 5%.
    
    Discussion: http://postgr.es/m/CA+TgmoYsFn6NUW1x0AZtupJGUAs1UDY4dJtCN47_Q6D0sP80PA@mail.gmail.com
    3761fe3c
slru.c 41 KB