Do not allow *timestamp to be passed as NULL
authorAlvaro Herrera <alvherre@alvh.no-ip.org>
Fri, 21 Aug 2015 17:36:54 +0000 (14:36 -0300)
committerAlvaro Herrera <alvherre@alvh.no-ip.org>
Fri, 21 Aug 2015 17:36:54 +0000 (14:36 -0300)
The code had bugs that would cause crashes if NULL was passed as that
argument (originally intended to mean not to bother returning its
value), and after inspection it turns out that nothing seems interested
in the case that *ts is NULL anyway.  Therefore, remove the partial
checks intended to support that case.

Author: Michael Paquier
though I didn't include a proposed Assert.

Backpatch to 9.5.

src/backend/access/transam/commit_ts.c

index 5ad35c0d7f8956ff8048f6258828d3cb40d2aa9f..33136e3c1d964cae58fd43f943e56951108f9fce 100644 (file)
@@ -252,8 +252,10 @@ TransactionIdSetCommitTs(TransactionId xid, TimestampTz ts,
 /*
  * Interrogate the commit timestamp of a transaction.
  *
- * Return value indicates whether commit timestamp record was found for
- * given xid.
+ * The return value indicates whether a commit timestamp record was found for
+ * the given xid.  The timestamp value is returned in *ts (which may not be
+ * null), and the origin node for the Xid is returned in *nodeid, if it's not
+ * null.
  */
 bool
 TransactionIdGetCommitTsData(TransactionId xid, TimestampTz *ts,
@@ -294,8 +296,7 @@ TransactionIdGetCommitTsData(TransactionId xid, TimestampTz *ts,
        TransactionIdPrecedes(xid, oldestCommitTs) ||
        TransactionIdPrecedes(newestCommitTs, xid))
    {
-       if (ts)
-           *ts = 0;
+       *ts = 0;
        if (nodeid)
            *nodeid = InvalidRepOriginId;
        return false;
@@ -312,8 +313,7 @@ TransactionIdGetCommitTsData(TransactionId xid, TimestampTz *ts,
        LWLockAcquire(CommitTsLock, LW_SHARED);
        if (commitTsShared->xidLastCommit == xid)
        {
-           if (ts)
-               *ts = commitTsShared->dataLastCommit.time;
+           *ts = commitTsShared->dataLastCommit.time;
            if (nodeid)
                *nodeid = commitTsShared->dataLastCommit.nodeid;
 
@@ -330,8 +330,7 @@ TransactionIdGetCommitTsData(TransactionId xid, TimestampTz *ts,
           SizeOfCommitTimestampEntry * entryno,
           SizeOfCommitTimestampEntry);
 
-   if (ts)
-       *ts = entry.time;
+   *ts = entry.time;
    if (nodeid)
        *nodeid = entry.nodeid;