Re: BUG #12918: Segfault in BackendIdGetTransactionIds - Mailing list pgsql-bugs

From Tom Lane
Subject Re: BUG #12918: Segfault in BackendIdGetTransactionIds
Date
Msg-id 27537.1427734801@sss.pgh.pa.us
Whole thread Raw
In response to Re: BUG #12918: Segfault in BackendIdGetTransactionIds  (Vladimir Borodin <root@simply.name>)
Responses Re: BUG #12918: Segfault in BackendIdGetTransactionIds  (Vladimir Borodin <root@simply.name>)
Re: BUG #12918: Segfault in BackendIdGetTransactionIds  (David Gould <daveg@sonic.net>)
List pgsql-bugs
Vladimir Borodin <root@simply.name> writes:
> I���ve also tried to revert dd1a3bcc where this function appeared but couldn���t do it :( If you would be able to
makea build without this commit (if it is easier than fix it in right way), I could install it on several production
hoststo test it. 

Try this.

            regards, tom lane

diff --git a/src/backend/storage/ipc/sinvaladt.c b/src/backend/storage/ipc/sinvaladt.c
index 81b85c0..a2fde89 100644
*** a/src/backend/storage/ipc/sinvaladt.c
--- b/src/backend/storage/ipc/sinvaladt.c
*************** BackendIdGetProc(int backendID)
*** 403,411 ****
  void
  BackendIdGetTransactionIds(int backendID, TransactionId *xid, TransactionId *xmin)
  {
-     ProcState  *stateP;
      SISeg       *segP = shmInvalBuffer;
-     PGXACT       *xact;

      *xid = InvalidTransactionId;
      *xmin = InvalidTransactionId;
--- 403,409 ----
*************** BackendIdGetTransactionIds(int backendID
*** 415,425 ****

      if (backendID > 0 && backendID <= segP->lastBackend)
      {
!         stateP = &segP->procState[backendID - 1];
!         xact = &ProcGlobal->allPgXact[stateP->proc->pgprocno];

!         *xid = xact->xid;
!         *xmin = xact->xmin;
      }

      LWLockRelease(SInvalWriteLock);
--- 413,428 ----

      if (backendID > 0 && backendID <= segP->lastBackend)
      {
!         ProcState  *stateP = &segP->procState[backendID - 1];
!         PGPROC       *proc = stateP->proc;

!         if (proc != NULL)
!         {
!             PGXACT       *xact = &ProcGlobal->allPgXact[proc->pgprocno];
!
!             *xid = xact->xid;
!             *xmin = xact->xmin;
!         }
      }

      LWLockRelease(SInvalWriteLock);

pgsql-bugs by date:

Previous
From: Stephen Frost
Date:
Subject: Re: BUG #12918: Segfault in BackendIdGetTransactionIds
Next
From: Vladimir Borodin
Date:
Subject: Re: BUG #12918: Segfault in BackendIdGetTransactionIds