diff --git a/src/backend/access/transam/multixact.c b/src/backend/access/transam/multixact.c
index b7b47ef076a..18ecb9282dc 100644
--- a/src/backend/access/transam/multixact.c
+++ b/src/backend/access/transam/multixact.c
@@ -491,6 +491,7 @@ MultiXactIdExpand(MultiXactId multi, TransactionId xid, MultiXactStatus status)
 	int			nmembers;
 	int			i;
 	int			j;
+	bool 		alreadyExists = false;
 
 	Assert(MultiXactIdIsValid(multi));
 	Assert(TransactionIdIsValid(xid));
@@ -539,8 +540,8 @@ MultiXactIdExpand(MultiXactId multi, TransactionId xid, MultiXactStatus status)
 		{
 			debug_elog4(DEBUG2, "Expand: %u is already a member of %u",
 						xid, multi);
-			pfree(members);
-			return multi;
+			alreadyExists = true;
+			break;
 		}
 	}
 
@@ -571,8 +572,11 @@ MultiXactIdExpand(MultiXactId multi, TransactionId xid, MultiXactStatus status)
 		}
 	}
 
-	newMembers[j].xid = xid;
-	newMembers[j++].status = status;
+	if (!alreadyExists)
+	{
+		newMembers[j].xid = xid;
+		newMembers[j++].status = status;
+	}
 	newMulti = MultiXactIdCreateFromMembers(j, newMembers);
 
 	pfree(members);
