diff --git a/src/backend/executor/nodeSort.c b/src/backend/executor/nodeSort.c
index 9a61300efd15edab5a18210b29715439b26e3208..3dd8f4d70fbc056c603fd35a5633e2d979c546f0 100644
--- a/src/backend/executor/nodeSort.c
+++ b/src/backend/executor/nodeSort.c
@@ -7,7 +7,7 @@
  *
  *
  * IDENTIFICATION
- *	  $Header: /cvsroot/pgsql/src/backend/executor/nodeSort.c,v 1.9 1997/09/08 21:43:19 momjian Exp $
+ *	  $Header: /cvsroot/pgsql/src/backend/executor/nodeSort.c,v 1.10 1997/09/15 14:27:37 vadim Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -112,6 +112,7 @@ ExecSort(Sort *node)
 	ScanKey		sortkeys;
 	HeapTuple	heapTuple;
 	TupleTableSlot *slot;
+	bool should_free;
 
 	/* ----------------
 	 *	get state info from node
@@ -171,12 +172,7 @@ ExecSort(Sort *node)
 		 * ----------------
 		 */
 		slot = (TupleTableSlot *) sortstate->csstate.cstate.cs_ResultTupleSlot;
-		/* *** get_cs_ResultTupleSlot((CommonState) sortstate); */
-
 		slot->ttc_tupleDescriptor = ExecGetTupType(outerNode);
-#if 0
-		slot->ttc_execTupDescriptor = ExecGetExecTupDesc(outerNode);
-#endif
 		/* ----------------
 		 *	finally set the sorted flag to true
 		 * ----------------
@@ -198,26 +194,9 @@ ExecSort(Sort *node)
 	 *	at this point we grab a tuple from psort
 	 * ----------------
 	 */
-	heapTuple = psort_grabtuple(node);
-
-	if (heapTuple == NULL)
-	{
-/*		psort_end(node); */
-		return (ExecClearTuple(slot));
-	}
+	heapTuple = psort_grabtuple(node, &should_free);
 
-	ExecStoreTuple(heapTuple,	/* tuple to store */
-				   slot,		/* slot to store in */
-				   InvalidBuffer,		/* no buffer */
-				   true);		/* free the palloc'd tuple */
-/*	  printf("ExecSort: (%x)",node);print_slot(slot);printf("\n");*/
-	return slot;
-#if 0
-	return ExecStoreTuple(heapTuple,	/* tuple to store */
-						  slot, /* slot to store in */
-						  InvalidBuffer,		/* no buffer */
-						  true);/* free the palloc'd tuple */
-#endif
+	return (ExecStoreTuple(heapTuple, slot, InvalidBuffer, should_free));
 }
 
 /* ----------------------------------------------------------------
diff --git a/src/backend/utils/sort/psort.c b/src/backend/utils/sort/psort.c
index b7e66235aad9b2b957ef78c7e26b8bb264bdb42e..c5fab144f01b95460d22ed777a38a50a6a9aeb9d 100644
--- a/src/backend/utils/sort/psort.c
+++ b/src/backend/utils/sort/psort.c
@@ -7,7 +7,7 @@
  *
  *
  * IDENTIFICATION
- *	  $Header: /cvsroot/pgsql/src/backend/utils/sort/Attic/psort.c,v 1.21 1997/09/08 21:49:33 momjian Exp $
+ *	  $Header: /cvsroot/pgsql/src/backend/utils/sort/Attic/psort.c,v 1.22 1997/09/15 14:28:42 vadim Exp $
  *
  * NOTES
  *		Sorts the first relation into the second relation.
@@ -128,8 +128,6 @@ psort_begin(Sort *node, int nkeys, ScanKey key)
 	bool		empty;			/* to answer: is child node empty? */
 
 	node->psortstate = (struct Psortstate *) palloc(sizeof(struct Psortstate));
-	if (node->psortstate == NULL)
-		return false;
 
 	AssertArg(nkeys >= 1);
 	AssertArg(key[0].sk_attno != 0);
@@ -648,7 +646,7 @@ dumptuples(FILE *file, Sort *node)
  *						  a NULL indicating the last tuple has been processed.
  */
 HeapTuple
-psort_grabtuple(Sort *node)
+psort_grabtuple(Sort *node, bool *should_free)
 {
 	register HeapTuple tup;
 	long		tuplen;
@@ -668,7 +666,7 @@ psort_grabtuple(Sort *node)
 
 				/* Update current merged sort file position */
 				PS(node)->psort_current += tuplen;
-
+				*should_free = true;
 				return tup;
 			}
 			else
@@ -680,7 +678,10 @@ psort_grabtuple(Sort *node)
 	else
 	{
 		if (PS(node)->psort_current < PS(node)->tupcount)
-			return PS(node)->memtuples[PS(node)->psort_current++];
+		{
+			*should_free = false;
+			return (PS(node)->memtuples[PS(node)->psort_current++]);
+		}
 		else
 			return NULL;
 	}
@@ -725,8 +726,6 @@ psort_end(Sort *node)
 	if (!node->cleaned)
 	{
 		Assert(node != (Sort *) NULL);
-/*		Assert(PS(node) != (Psortstate *) NULL); */
-
 		/*
 		 * I'm changing this because if we are sorting a relation with no
 		 * tuples, psortstate is NULL.
diff --git a/src/include/utils/psort.h b/src/include/utils/psort.h
index 21366b2220f1fa0394f09f23cc49a97adc69bec9..5e1c97052da82d5f70672d41f7fba0ccaf28d2a6 100644
--- a/src/include/utils/psort.h
+++ b/src/include/utils/psort.h
@@ -6,7 +6,7 @@
  *
  * Copyright (c) 1994, Regents of the University of California
  *
- * $Id: psort.h,v 1.10 1997/09/08 21:55:14 momjian Exp $
+ * $Id: psort.h,v 1.11 1997/09/15 14:29:01 vadim Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -99,7 +99,7 @@ if (1) CODE; else
 
 /* psort.c */
 extern bool psort_begin(Sort *node, int nkeys, ScanKey key);
-extern HeapTuple psort_grabtuple(Sort *node);
+extern HeapTuple psort_grabtuple(Sort *node, bool *should_free);
 extern void psort_markpos(Sort *node);
 extern void psort_restorepos(Sort *node);
 extern void psort_end(Sort *node);