aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorDavid Rowley <drowley@postgresql.org>2024-07-06 17:40:05 +1200
committerDavid Rowley <drowley@postgresql.org>2024-07-06 17:40:05 +1200
commit04bcf9e19a4261fe9c7df37c777592c2e10c32a7 (patch)
tree4f368e86b1dd6598148ae6e81700a0964ddf5464 /src
parent97651b0139cfa511eaf063b60c900c2ba81b8ba2 (diff)
downloadpostgresql-04bcf9e19a4261fe9c7df37c777592c2e10c32a7.tar.gz
postgresql-04bcf9e19a4261fe9c7df37c777592c2e10c32a7.zip
Adjust tuplestore.c not to allocate BufFiles in generation context
590b045c3 made it so tuplestore.c would store tuples inside a generation.c memory context. After fixing a bug report in 97651b013, it seems that it's probably best not to allocate BufFile related allocations in that context. Let's keep it just for tuple data. This adjusts the code to switch to the Tuplestorestate.context's parent, which is the MemoryContext that tuplestore_begin_common() was called in. It does not seem worth adding a new field in Tuplestorestate to store this when we can access it by looking at the Tuplestorestate's context's parent. Discussion: https://postgr.es/m/CAApHDvqFt_CdJtSr+E9YLZb7jZAyRCy3hjQ+ktM+dcOFVq-xkg@mail.gmail.com
Diffstat (limited to 'src')
-rw-r--r--src/backend/utils/sort/tuplestore.c10
1 files changed, 10 insertions, 0 deletions
diff --git a/src/backend/utils/sort/tuplestore.c b/src/backend/utils/sort/tuplestore.c
index 00eeb135d3e..444c8e25c21 100644
--- a/src/backend/utils/sort/tuplestore.c
+++ b/src/backend/utils/sort/tuplestore.c
@@ -799,6 +799,7 @@ tuplestore_puttuple_common(Tuplestorestate *state, void *tuple)
TSReadPointer *readptr;
int i;
ResourceOwner oldowner;
+ MemoryContext oldcxt;
state->tuples++;
@@ -850,8 +851,17 @@ tuplestore_puttuple_common(Tuplestorestate *state, void *tuple)
oldowner = CurrentResourceOwner;
CurrentResourceOwner = state->resowner;
+ /*
+ * We switch out of the state->context as this is a generation
+ * context, which isn't ideal for allocations relating to the
+ * BufFile.
+ */
+ oldcxt = MemoryContextSwitchTo(state->context->parent);
+
state->myfile = BufFileCreateTemp(state->interXact);
+ MemoryContextSwitchTo(oldcxt);
+
CurrentResourceOwner = oldowner;
/*