Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                
pageinspect: Fix memory context allocation of page in brin_revmap_data()
authorMichael Paquier <michael@paquier.xyz>
Wed, 16 Mar 2022 03:29:39 +0000 (12:29 +0900)
committerMichael Paquier <michael@paquier.xyz>
Wed, 16 Mar 2022 03:29:39 +0000 (12:29 +0900)
This caused the function to fail, as the aligned copy of the raw page
given by the function caller was not saved in the correct memory
context, which needs to be multi_call_memory_ctx in this case.

Issue introduced by 076f4d9.

Per buildfarm members sifika, mylodon and longfin.  I have reproduced
that locally with macos.

Discussion: https://postgr.es/m/YjFPOtfCW6yLXUeM@paquier.xyz
Backpatch-through: 10

contrib/pageinspect/brinfuncs.c

index bd0ea8b18c1a268d4f4a9a270d2590b2b30f6f9b..bf12901ac3ea76e0f4f726489a2e9de5de030edd 100644 (file)
@@ -355,15 +355,15 @@ brin_revmap_data(PG_FUNCTION_ARGS)
        MemoryContext mctx;
        Page        page;
 
-       /* minimally verify the page we got */
-       page = verify_brin_page(raw_page, BRIN_PAGETYPE_REVMAP, "revmap");
-
        /* create a function context for cross-call persistence */
        fctx = SRF_FIRSTCALL_INIT();
 
        /* switch to memory context appropriate for multiple function calls */
        mctx = MemoryContextSwitchTo(fctx->multi_call_memory_ctx);
 
+       /* minimally verify the page we got */
+       page = verify_brin_page(raw_page, BRIN_PAGETYPE_REVMAP, "revmap");
+
        state = palloc(sizeof(*state));
        state->tids = ((RevmapContents *) PageGetContents(page))->rm_tids;
        state->idx = 0;