HaveNFreeProcs() iterates through entire freeProcs list

From: Jim Nasby <Jim(dot)Nasby(at)BlueTreble(dot)com>
To: Pg Hackers <pgsql-hackers(at)postgresql(dot)org>
Subject: HaveNFreeProcs() iterates through entire freeProcs list
Date: 2016-12-02 20:30:39
Message-ID: 3f1f6bba-e0f6-b3c5-ca7c-a180e31c93d7@BlueTreble.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-hackers

Current HaveNFreeProcs() iterates through the entire freeProcs list
(while holding ProcStructLock) just to determine if there's a small
number (superuser_reserved_connections) of free slots available. For the
common case, presumably it'd be faster to put the n<=0 test inside the
loop and return as soon as that's true, instead of waiting until the end?

BTW, the comment certainly doesn't seem accurate for the current code,
since performance will be determined entirely by the number of procs on
freeProcs...

/*
* Check whether there are at least N free PGPROC objects.
*
* Note: this is designed on the assumption that N will generally be small.
*/
bool
HaveNFreeProcs(int n)
{
PGPROC *proc;

SpinLockAcquire(ProcStructLock);

proc = ProcGlobal->freeProcs;

while (n > 0 && proc != NULL)
{
proc = (PGPROC *) proc->links.next;
n--;
}

SpinLockRelease(ProcStructLock);

return (n <= 0);
}
--
Jim Nasby, Data Architect, Blue Treble Consulting, Austin TX
Experts in Analytics, Data Architecture and PostgreSQL
Data in Trouble? Get it in Treble! http://BlueTreble.com
855-TREBLE2 (855-873-2532)

Responses

Browse pgsql-hackers by date

  From Date Subject
Next Message Andreas Seltenreich 2016-12-02 20:36:24 [sqlsmith] Failed assertion in _hash_splitbucket_guts
Previous Message Alvaro Herrera 2016-12-02 20:18:46 Re: Radix tree for character conversion