mirror of
https://github.com/postgres/postgres.git
synced 2025-06-11 20:28:21 +03:00
Remove useless pfree()s at the ends of various ValuePerCall SRFs.
We don't need to manually clean up allocations in a SRF's multi_call_memory_ctx, because the SRF_RETURN_DONE infrastructure takes care of that (and also ensures that it will happen even if the function never gets a final call, which simple manual cleanup cannot do). Hence, the code removed by this patch is a waste of code and cycles. Worse, it gives the impression that cleaning up manually is a thing, which can lead to more serious errors such as those fixed in commits085b6b667
andb4570d33a
. So we should get rid of it. These are not quite actual bugs though, so I couldn't muster the enthusiasm to back-patch. Fix in HEAD only. Justin Pryzby Discussion: https://postgr.es/m/20200308173103.GC1357@telsasoft.com
This commit is contained in:
@ -502,12 +502,8 @@ bt_page_items(PG_FUNCTION_ARGS)
|
||||
uargs->offset++;
|
||||
SRF_RETURN_NEXT(fctx, result);
|
||||
}
|
||||
else
|
||||
{
|
||||
pfree(uargs->page);
|
||||
pfree(uargs);
|
||||
SRF_RETURN_DONE(fctx);
|
||||
}
|
||||
|
||||
SRF_RETURN_DONE(fctx);
|
||||
}
|
||||
|
||||
/*-------------------------------------------------------
|
||||
@ -590,11 +586,8 @@ bt_page_items_bytea(PG_FUNCTION_ARGS)
|
||||
uargs->offset++;
|
||||
SRF_RETURN_NEXT(fctx, result);
|
||||
}
|
||||
else
|
||||
{
|
||||
pfree(uargs);
|
||||
SRF_RETURN_DONE(fctx);
|
||||
}
|
||||
|
||||
SRF_RETURN_DONE(fctx);
|
||||
}
|
||||
|
||||
/* Number of output arguments (columns) for bt_metap() */
|
||||
|
@ -260,6 +260,6 @@ gin_leafpage_items(PG_FUNCTION_ARGS)
|
||||
|
||||
SRF_RETURN_NEXT(fctx, result);
|
||||
}
|
||||
else
|
||||
SRF_RETURN_DONE(fctx);
|
||||
|
||||
SRF_RETURN_DONE(fctx);
|
||||
}
|
||||
|
@ -374,11 +374,8 @@ hash_page_items(PG_FUNCTION_ARGS)
|
||||
|
||||
SRF_RETURN_NEXT(fctx, result);
|
||||
}
|
||||
else
|
||||
{
|
||||
pfree(uargs);
|
||||
SRF_RETURN_DONE(fctx);
|
||||
}
|
||||
|
||||
SRF_RETURN_DONE(fctx);
|
||||
}
|
||||
|
||||
/* ------------------------------------------------
|
||||
|
@ -3388,9 +3388,5 @@ pg_get_multixact_members(PG_FUNCTION_ARGS)
|
||||
SRF_RETURN_NEXT(funccxt, HeapTupleGetDatum(tuple));
|
||||
}
|
||||
|
||||
if (multi->nmembers > 0)
|
||||
pfree(multi->members);
|
||||
pfree(multi);
|
||||
|
||||
SRF_RETURN_DONE(funccxt);
|
||||
}
|
||||
|
@ -104,9 +104,6 @@ tt_process_call(FuncCallContext *funcctx)
|
||||
st->cur++;
|
||||
return result;
|
||||
}
|
||||
if (st->list)
|
||||
pfree(st->list);
|
||||
pfree(st);
|
||||
return (Datum) 0;
|
||||
}
|
||||
|
||||
@ -245,12 +242,6 @@ prs_process_call(FuncCallContext *funcctx)
|
||||
st->cur++;
|
||||
return result;
|
||||
}
|
||||
else
|
||||
{
|
||||
if (st->list)
|
||||
pfree(st->list);
|
||||
pfree(st);
|
||||
}
|
||||
return (Datum) 0;
|
||||
}
|
||||
|
||||
|
@ -535,7 +535,6 @@ jsonb_object_keys(PG_FUNCTION_ARGS)
|
||||
{
|
||||
FuncCallContext *funcctx;
|
||||
OkeysState *state;
|
||||
int i;
|
||||
|
||||
if (SRF_IS_FIRSTCALL())
|
||||
{
|
||||
@ -598,12 +597,6 @@ jsonb_object_keys(PG_FUNCTION_ARGS)
|
||||
SRF_RETURN_NEXT(funcctx, CStringGetTextDatum(nxt));
|
||||
}
|
||||
|
||||
/* cleanup to reduce or eliminate memory leaks */
|
||||
for (i = 0; i < state->result_count; i++)
|
||||
pfree(state->result[i]);
|
||||
pfree(state->result);
|
||||
pfree(state);
|
||||
|
||||
SRF_RETURN_DONE(funcctx);
|
||||
}
|
||||
|
||||
@ -706,7 +699,6 @@ json_object_keys(PG_FUNCTION_ARGS)
|
||||
{
|
||||
FuncCallContext *funcctx;
|
||||
OkeysState *state;
|
||||
int i;
|
||||
|
||||
if (SRF_IS_FIRSTCALL())
|
||||
{
|
||||
@ -755,12 +747,6 @@ json_object_keys(PG_FUNCTION_ARGS)
|
||||
SRF_RETURN_NEXT(funcctx, CStringGetTextDatum(nxt));
|
||||
}
|
||||
|
||||
/* cleanup to reduce or eliminate memory leaks */
|
||||
for (i = 0; i < state->result_count; i++)
|
||||
pfree(state->result[i]);
|
||||
pfree(state->result);
|
||||
pfree(state);
|
||||
|
||||
SRF_RETURN_DONE(funcctx);
|
||||
}
|
||||
|
||||
|
@ -706,7 +706,6 @@ tsvector_unnest(PG_FUNCTION_ARGS)
|
||||
}
|
||||
else
|
||||
{
|
||||
pfree(tsin);
|
||||
SRF_RETURN_DONE(funcctx);
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user