Re: issue: nbtpage.c,_bt_pagedel may get wrong result

From: Heikki Linnakangas <hlinnaka(at)iki(dot)fi>
To: Pengfei Wang <pengfei(dot)wang(at)gmail(dot)com>, pgsql-bugs(at)lists(dot)postgresql(dot)org
Subject: Re: issue: nbtpage.c,_bt_pagedel may get wrong result
Date: 2024-05-23 11:13:53
Message-ID: 6abbe3cf-9763-4b9c-b3c7-0d0fc6e2c685@iki.fi
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-bugs

On 23/05/2024 13:06, Pengfei Wang wrote:
> # issue
> https://github.com/postgres/postgres/blob/da32f5c4bca7f3447b869de2afbbfa0b74443d45/src/backend/access/nbtree/nbtpage.c#L1943 <https://github.com/postgres/postgres/blob/da32f5c4bca7f3447b869de2afbbfa0b74443d45/src/backend/access/nbtree/nbtpage.c#L1943>
>
> /*
> * To avoid deadlocks, we'd better drop the leaf page lock
> * before going further.
> */
> _bt_unlockbuf(rel, leafbuf);
>
> /*
> * Check that the left sibling of leafbuf (if any) is not
> * marked with INCOMPLETE_SPLIT flag before proceeding
> */
> Assert(leafblkno == scanblkno);
> if (_bt_leftsib_splitflag(rel, leftsib, leafblkno))
> {
>     ReleaseBuffer(leafbuf);
>     return;
> }
>
> After unlocking leaf, but before call _bt_leftsib_splitflag, leftsib may
> be already split, and leafbuf's current left sibling is in
> INCOMPLETE_SPLIT status.

In that case, there should be a downlink for 'leafbuf' in the parent,
and we're good to proceed, right? See the comments in
_bt_leftsib_splitflag().

--
Heikki Linnakangas
Neon (https://neon.tech)

In response to

Responses

Browse pgsql-bugs by date

  From Date Subject
Next Message PG Bug reporting form 2024-05-23 11:37:58 BUG #18475: pg_dump: "Error Segmentation fault"
Previous Message Pengfei Wang 2024-05-23 10:06:24 issue: nbtpage.c,_bt_pagedel may get wrong result