From: Robert Haas Date: Mon, 27 Mar 2017 12:30:19 +0000 (-0400) Subject: Pass DSA_ALLOC_HUGE when allocating a shared TIDBitmap. X-Git-Tag: REL_10_BETA1~486 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=a171f01501e11a2ef65d437ac2397a0050892d88;p=thirdparty%2Fpostgresql.git Pass DSA_ALLOC_HUGE when allocating a shared TIDBitmap. When creating an unshared TIDBitmap, we pass MCXT_ALLOC_HUGE to allow allocations >1GB, so by analogy we pass DSA_ALLOC_HUGE for a shared TIDBitmap. Bug introduced by commit 98e6e89040a0534ca26914c66cae9dd49ef62ad9. Report by Rafia Sabih, fix by Dilip Kumar, adjusted by me. Discussion: http://postgr.es/m/CAOGQiiPpSnkuKq+oUK_bvQFg2EPGFPN8RwgxTgBa6HU_kQa3EA@mail.gmail.com --- diff --git a/src/backend/nodes/tidbitmap.c b/src/backend/nodes/tidbitmap.c index ae7a913c12c..eab8f683564 100644 --- a/src/backend/nodes/tidbitmap.c +++ b/src/backend/nodes/tidbitmap.c @@ -1533,9 +1533,11 @@ pagetable_allocate(pagetable_hash *pagetable, Size size) * new memory so that pagetable_free can free the old entry. */ tbm->dsapagetableold = tbm->dsapagetable; - tbm->dsapagetable = dsa_allocate0(tbm->dsa, sizeof(PTEntryArray) + size); - + tbm->dsapagetable = dsa_allocate_extended(tbm->dsa, + sizeof(PTEntryArray) + size, + DSA_ALLOC_HUGE | DSA_ALLOC_ZERO); ptbase = dsa_get_address(tbm->dsa, tbm->dsapagetable); + return ptbase->ptentry; }