summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRobert Haas <rhaas@postgresql.org>2017-01-05 13:12:16 -0500
committerRobert Haas <rhaas@postgresql.org>2017-01-05 14:33:14 -0500
commite5b7451ea36d52815085cc2d9f2434c35b837978 (patch)
tree7e3ee59cb99405e91d3cc52aef1dfeeba55ea6ff
parent933b46644c787ed0b763532951961361e9304095 (diff)
Fix possible leak of semaphore count.
Commit 4aec49899e5782247e134f94ce1c6ee926f88e1c reorganized the order of operations here so that we no longer increment the number of "extra waits" before locking the semaphore, but it did not change the starting value of extraWaits from 0 to -1 to compensate. In the worst case, this could leak a semaphore count, but that seems to be unlikely in practice. Discussion: http://postgr.es/m/CAA4eK1JyVqXiMba+-a589Rk0pyHsyKkGxeumVKjU6Y74hdrVLQ@mail.gmail.com Amit Kapila, per an off-list report by Dilip Kumar. Reviewed by me.
-rw-r--r--src/backend/storage/ipc/procarray.c3
1 files changed, 2 insertions, 1 deletions
diff --git a/src/backend/storage/ipc/procarray.c b/src/backend/storage/ipc/procarray.c
index 83b0c71f528..3f47b984eef 100644
--- a/src/backend/storage/ipc/procarray.c
+++ b/src/backend/storage/ipc/procarray.c
@@ -484,7 +484,6 @@ ProcArrayGroupClearXid(PGPROC *proc, TransactionId latestXid)
volatile PROC_HDR *procglobal = ProcGlobal;
uint32 nextidx;
uint32 wakeidx;
- int extraWaits = -1;
/* We should definitely have an XID to clear. */
Assert(TransactionIdIsValid(allPgXact[proc->pgprocno].xid));
@@ -511,6 +510,8 @@ ProcArrayGroupClearXid(PGPROC *proc, TransactionId latestXid)
*/
if (nextidx != INVALID_PGPROCNO)
{
+ int extraWaits = 0;
+
/* Sleep until the leader clears our XID. */
for (;;)
{