Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commitf3e9cf9

Browse files
committed
Fix pfree problem.
1 parentfeb78cd commitf3e9cf9

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
ScanKeysortkeys;
113113
HeapTupleheapTuple;
114114
TupleTableSlot*slot;
115+
boolshould_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-
#if0
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-
returnslot;
215-
#if0
216-
returnExecStoreTuple(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
boolempty;/* to answer: is child node empty? */
129129

130130
node->psortstate= (structPsortstate*)palloc(sizeof(structPsortstate));
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
registerHeapTupletup;
654652
longtuplen;
@@ -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
returntup;
673671
}
674672
else
@@ -680,7 +678,10 @@ psort_grabtuple(Sort *node)
680678
else
681679
{
682680
if (PS(node)->psort_current<PS(node)->tupcount)
683-
returnPS(node)->memtuples[PS(node)->psort_current++];
681+
{
682+
*should_free= false;
683+
return (PS(node)->memtuples[PS(node)->psort_current++]);
684+
}
684685
else
685686
returnNULL;
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
externboolpsort_begin(Sort*node,intnkeys,ScanKeykey);
102-
externHeapTuplepsort_grabtuple(Sort*node);
102+
externHeapTuplepsort_grabtuple(Sort*node,bool*should_free);
103103
externvoidpsort_markpos(Sort*node);
104104
externvoidpsort_restorepos(Sort*node);
105105
externvoidpsort_end(Sort*node);

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp