diff options
author | Vadim B. Mikheev <vadim4o@yahoo.com> | 1997-09-15 14:29:01 +0000 |
---|---|---|
committer | Vadim B. Mikheev <vadim4o@yahoo.com> | 1997-09-15 14:29:01 +0000 |
commit | f3e9cf9c6b8790e35028888971327fa759137482 (patch) | |
tree | e362238e3244712f1dc7a4503498c6054a9c87eb /src/backend | |
parent | feb78cda0c82e492e31ec228121db5441396dfcb (diff) | |
download | postgresql-f3e9cf9c6b8790e35028888971327fa759137482.tar.gz postgresql-f3e9cf9c6b8790e35028888971327fa759137482.zip |
Fix pfree problem.
Diffstat (limited to 'src/backend')
-rw-r--r-- | src/backend/executor/nodeSort.c | 29 | ||||
-rw-r--r-- | src/backend/utils/sort/psort.c | 15 |
2 files changed, 11 insertions, 33 deletions
diff --git a/src/backend/executor/nodeSort.c b/src/backend/executor/nodeSort.c index 9a61300efd1..3dd8f4d70fb 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 b7e66235aad..c5fab144f01 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. |