On Thu, Jul 13, 2023 at 06:28:39PM +0200, Matthias van de Meent wrote:
> There are similar pfree calls in the _int_gist.c file's g_int_compress
> function, which made me think we do need to clean up after use, but
> indeed these pfrees are useless (or even harmful if bug #17888 can be
> trusted)

Indeed, all these are in a GiST temporary context.  So you'd mean
something like the attached perhaps, for both the decompress and
compress paths?
--
Michael
diff --git a/contrib/intarray/_int_gist.c b/contrib/intarray/_int_gist.c
index 98145fe370..9b71cb6c91 100644
--- a/contrib/intarray/_int_gist.c
+++ b/contrib/intarray/_int_gist.c
@@ -201,11 +201,7 @@ g_int_compress(PG_FUNCTION_ARGS)
 	r = DatumGetArrayTypeP(entry->key);
 	CHECKARRVALID(r);
 	if (ARRISEMPTY(r))
-	{
-		if (r != (ArrayType *) DatumGetPointer(entry->key))
-			pfree(r);
 		PG_RETURN_POINTER(entry);
-	}
 
 	if ((len = ARRNELEMS(r)) >= 2 * num_ranges)
 	{							/* compress */
@@ -346,8 +342,6 @@ g_int_decompress(PG_FUNCTION_ARGS)
 			if ((!i) || *(dr - 1) != j)
 				*dr++ = j;
 
-	if (in != (ArrayType *) DatumGetPointer(entry->key))
-		pfree(in);
 	retval = palloc(sizeof(GISTENTRY));
 	gistentryinit(*retval, PointerGetDatum(r),
 				  entry->rel, entry->page, entry->offset, false);

Attachment: signature.asc
Description: PGP signature

Reply via email to