postgres.git / summary / log / commit / refs

commit    603299167f4aaa857c0156b492ad51143e33fc2f
Author:   Robert Haas <rhaas@postgresql.org>
Date:     Thu Jan 05 18:12:16 2017 +0000
First released in: 10.0, 9.6.2

    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.


src/backend/storage/ipc/procarray.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/backend/storage/ipc/procarray.c b/src/backend/storage/ipc/procarray.c index e5d487dbb74..4adb286d5b5 100644 --- a/src/backend/storage/ipc/procarray.c +++ b/src/backend/storage/ipc/procarray.c @@ -491,7 +491,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)); @@ -518,6 +517,8 @@ ProcArrayGroupClearXid(PGPROC *proc, TransactionId latestXid) */ if (nextidx != INVALID_PGPROCNO) { + int extraWaits = 0; + /* Sleep until the leader clears our XID. */ for (;;) { [parent: 5b4f8f4c6d61]