aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/backend/access/hash/hashpage.c14
1 files changed, 11 insertions, 3 deletions
diff --git a/src/backend/access/hash/hashpage.c b/src/backend/access/hash/hashpage.c
index 74ffa9d161f..44332e72ec6 100644
--- a/src/backend/access/hash/hashpage.c
+++ b/src/backend/access/hash/hashpage.c
@@ -653,13 +653,21 @@ restart_expand:
*/
if (H_NEEDS_SPLIT_CLEANUP(oopaque))
{
+ /*
+ * Copy bucket mapping info now; refer to the comment in code below
+ * where we copy this information before calling _hash_splitbucket
+ * to see why this is okay.
+ */
+ maxbucket = metap->hashm_maxbucket;
+ highmask = metap->hashm_highmask;
+ lowmask = metap->hashm_lowmask;
+
/* Release the metapage lock. */
_hash_chgbufaccess(rel, metabuf, HASH_READ, HASH_NOLOCK);
hashbucketcleanup(rel, old_bucket, buf_oblkno, start_oblkno, NULL,
- metap->hashm_maxbucket, metap->hashm_highmask,
- metap->hashm_lowmask, NULL,
- NULL, true, NULL, NULL);
+ maxbucket, highmask, lowmask, NULL, NULL, true,
+ NULL, NULL);
_hash_dropbuf(rel, buf_oblkno);