diff options
author | Tom Lane <tgl@sss.pgh.pa.us> | 2008-11-30 23:24:01 +0000 |
---|---|---|
committer | Tom Lane <tgl@sss.pgh.pa.us> | 2008-11-30 23:24:01 +0000 |
commit | c0118c11a82b989d53bb66f113f10a666256e5da (patch) | |
tree | d379045040eaa5fff40c6c210ecfc54553fce7b3 /contrib/tablefunc/tablefunc.c | |
parent | 37e4c7219bbe0cdd9fa582dfbaeae1d1b44ab237 (diff) | |
download | postgresql-c0118c11a82b989d53bb66f113f10a666256e5da.tar.gz postgresql-c0118c11a82b989d53bb66f113f10a666256e5da.zip |
Fix dblink and tablefunc to not return with the wrong CurrentMemoryContext.
Per buildfarm results.
Diffstat (limited to 'contrib/tablefunc/tablefunc.c')
-rw-r--r-- | contrib/tablefunc/tablefunc.c | 19 |
1 files changed, 8 insertions, 11 deletions
diff --git a/contrib/tablefunc/tablefunc.c b/contrib/tablefunc/tablefunc.c index bfac89e4146..9c9d0aa7a29 100644 --- a/contrib/tablefunc/tablefunc.c +++ b/contrib/tablefunc/tablefunc.c @@ -378,11 +378,6 @@ crosstab(PG_FUNCTION_ARGS) /* create a function context for cross-call persistence */ funcctx = SRF_FIRSTCALL_INIT(); - /* - * switch to memory context appropriate for multiple function calls - */ - oldcontext = MemoryContextSwitchTo(funcctx->multi_call_memory_ctx); - /* Connect to SPI manager */ if ((ret = SPI_connect()) < 0) /* internal error */ @@ -423,9 +418,6 @@ crosstab(PG_FUNCTION_ARGS) SRF_RETURN_DONE(funcctx); } - /* SPI switches context on us, so reset it */ - MemoryContextSwitchTo(funcctx->multi_call_memory_ctx); - /* get a tuple descriptor for our result type */ switch (get_call_result_type(fcinfo, NULL, &tupdesc)) { @@ -445,9 +437,6 @@ crosstab(PG_FUNCTION_ARGS) break; } - /* make sure we have a persistent copy of the tupdesc */ - tupdesc = CreateTupleDescCopy(tupdesc); - /* * Check that return tupdesc is compatible with the data we got from * SPI, at least based on number and type of attributes @@ -459,6 +448,14 @@ crosstab(PG_FUNCTION_ARGS) "incompatible"))); /* + * switch to memory context appropriate for multiple function calls + */ + oldcontext = MemoryContextSwitchTo(funcctx->multi_call_memory_ctx); + + /* make sure we have a persistent copy of the tupdesc */ + tupdesc = CreateTupleDescCopy(tupdesc); + + /* * Generate attribute metadata needed later to produce tuples from raw * C strings */ |