BTW, while nosing around this code I came across this statement (procarray.c, about line 4550 in HEAD):
* ... To add XIDs to the array, we just insert * them into slots to the right of the head pointer and then advance the head * pointer. This wouldn't require any lock at all, except that on machines * with weak memory ordering we need to be careful that other processors * see the array element changes before they see the head pointer change. * We handle this by using a spinlock to protect reads and writes of the * head/tail pointers. (We could dispense with the spinlock if we were to * create suitable memory access barrier primitives and use those instead.) * The spinlock must be taken to read or write the head/tail pointers unless * the caller holds ProcArrayLock exclusively. Nowadays we've *got* those primitives. Can we get rid of known_assigned_xids_lck, and if so would it make a meaningful difference in this scenario? regards, tom lane