Tom,
I noticed your recent corrections to lock.c regarding the releasing of
locks in an out of shared memory condition. This may or may not be
relevant, but when I purposefully use up all the lock space with user
locks, the server runs out of shared memory and stays out until it is
restarted (not when the backend shuts down as it is supposed to).
In other words, after doing a select user_write_lock_oid(t.oid) from
big_table t;
It's server restart time.
What's really interesting about this is that the pg_locks view (after
the offending disconnects) reports nothing out of the ordinary even
though no backends can acquire locks after that point.
Merlin