Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                
Skip to content

Commit f3e9cf9

Browse files
committed
Fix pfree problem.
1 parent feb78cd commit f3e9cf9

File tree

3 files changed

+13
-35
lines changed

3 files changed

+13
-35
lines changed

src/backend/executor/nodeSort.c

Lines changed: 4 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
*
88
*
99
* IDENTIFICATION
10-
* $Header: /cvsroot/pgsql/src/backend/executor/nodeSort.c,v 1.9 1997/09/08 21:43:19 momjian Exp $
10+
* $Header: /cvsroot/pgsql/src/backend/executor/nodeSort.c,v 1.10 1997/09/15 14:27:37 vadim Exp $
1111
*
1212
*-------------------------------------------------------------------------
1313
*/
@@ -112,6 +112,7 @@ ExecSort(Sort *node)
112112
ScanKey sortkeys;
113113
HeapTuple heapTuple;
114114
TupleTableSlot *slot;
115+
bool should_free;
115116

116117
/* ----------------
117118
* get state info from node
@@ -171,12 +172,7 @@ ExecSort(Sort *node)
171172
* ----------------
172173
*/
173174
slot = (TupleTableSlot *) sortstate->csstate.cstate.cs_ResultTupleSlot;
174-
/* *** get_cs_ResultTupleSlot((CommonState) sortstate); */
175-
176175
slot->ttc_tupleDescriptor = ExecGetTupType(outerNode);
177-
#if 0
178-
slot->ttc_execTupDescriptor = ExecGetExecTupDesc(outerNode);
179-
#endif
180176
/* ----------------
181177
* finally set the sorted flag to true
182178
* ----------------
@@ -198,26 +194,9 @@ ExecSort(Sort *node)
198194
* at this point we grab a tuple from psort
199195
* ----------------
200196
*/
201-
heapTuple = psort_grabtuple(node);
202-
203-
if (heapTuple == NULL)
204-
{
205-
/* psort_end(node); */
206-
return (ExecClearTuple(slot));
207-
}
197+
heapTuple = psort_grabtuple(node, &should_free);
208198

209-
ExecStoreTuple(heapTuple, /* tuple to store */
210-
slot, /* slot to store in */
211-
InvalidBuffer, /* no buffer */
212-
true); /* free the palloc'd tuple */
213-
/* printf("ExecSort: (%x)",node);print_slot(slot);printf("\n");*/
214-
return slot;
215-
#if 0
216-
return ExecStoreTuple(heapTuple, /* tuple to store */
217-
slot, /* slot to store in */
218-
InvalidBuffer, /* no buffer */
219-
true);/* free the palloc'd tuple */
220-
#endif
199+
return (ExecStoreTuple(heapTuple, slot, InvalidBuffer, should_free));
221200
}
222201

223202
/* ----------------------------------------------------------------

src/backend/utils/sort/psort.c

Lines changed: 7 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
*
88
*
99
* IDENTIFICATION
10-
* $Header: /cvsroot/pgsql/src/backend/utils/sort/Attic/psort.c,v 1.21 1997/09/08 21:49:33 momjian Exp $
10+
* $Header: /cvsroot/pgsql/src/backend/utils/sort/Attic/psort.c,v 1.22 1997/09/15 14:28:42 vadim Exp $
1111
*
1212
* NOTES
1313
* Sorts the first relation into the second relation.
@@ -128,8 +128,6 @@ psort_begin(Sort *node, int nkeys, ScanKey key)
128128
bool empty; /* to answer: is child node empty? */
129129

130130
node->psortstate = (struct Psortstate *) palloc(sizeof(struct Psortstate));
131-
if (node->psortstate == NULL)
132-
return false;
133131

134132
AssertArg(nkeys >= 1);
135133
AssertArg(key[0].sk_attno != 0);
@@ -648,7 +646,7 @@ dumptuples(FILE *file, Sort *node)
648646
* a NULL indicating the last tuple has been processed.
649647
*/
650648
HeapTuple
651-
psort_grabtuple(Sort *node)
649+
psort_grabtuple(Sort *node, bool *should_free)
652650
{
653651
register HeapTuple tup;
654652
long tuplen;
@@ -668,7 +666,7 @@ psort_grabtuple(Sort *node)
668666

669667
/* Update current merged sort file position */
670668
PS(node)->psort_current += tuplen;
671-
669+
*should_free = true;
672670
return tup;
673671
}
674672
else
@@ -680,7 +678,10 @@ psort_grabtuple(Sort *node)
680678
else
681679
{
682680
if (PS(node)->psort_current < PS(node)->tupcount)
683-
return PS(node)->memtuples[PS(node)->psort_current++];
681+
{
682+
*should_free = false;
683+
return (PS(node)->memtuples[PS(node)->psort_current++]);
684+
}
684685
else
685686
return NULL;
686687
}
@@ -725,8 +726,6 @@ psort_end(Sort *node)
725726
if (!node->cleaned)
726727
{
727728
Assert(node != (Sort *) NULL);
728-
/* Assert(PS(node) != (Psortstate *) NULL); */
729-
730729
/*
731730
* I'm changing this because if we are sorting a relation with no
732731
* tuples, psortstate is NULL.

src/include/utils/psort.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
*
77
* Copyright (c) 1994, Regents of the University of California
88
*
9-
* $Id: psort.h,v 1.10 1997/09/08 21:55:14 momjian Exp $
9+
* $Id: psort.h,v 1.11 1997/09/15 14:29:01 vadim Exp $
1010
*
1111
*-------------------------------------------------------------------------
1212
*/
@@ -99,7 +99,7 @@ if (1) CODE; else
9999

100100
/* psort.c */
101101
extern bool psort_begin(Sort *node, int nkeys, ScanKey key);
102-
extern HeapTuple psort_grabtuple(Sort *node);
102+
extern HeapTuple psort_grabtuple(Sort *node, bool *should_free);
103103
extern void psort_markpos(Sort *node);
104104
extern void psort_restorepos(Sort *node);
105105
extern void psort_end(Sort *node);

0 commit comments

Comments
 (0)