Re: Strange coding in _mdfd_openseg()

Поиск
Список
Период
Сортировка
От Kyotaro HORIGUCHI
Тема Re: Strange coding in _mdfd_openseg()
Дата
Msg-id 20190403.133357.75054686.horiguchi.kyotaro@lab.ntt.co.jp
обсуждение исходный текст
Ответ на Strange coding in _mdfd_openseg()  (Thomas Munro <thomas.munro@gmail.com>)
Ответы Re: Strange coding in _mdfd_openseg()  (Thomas Munro <thomas.munro@gmail.com>)
Список pgsql-hackers
At Wed, 3 Apr 2019 17:14:36 +1300, Thomas Munro <thomas.munro@gmail.com> wrote in
<CA+hUKG+NBw+uSzxF1os-SO6gUuw=cqO5DAybk6KnHKzgGvxhxA@mail.gmail.com>
> Hello,
> 
> I think the following conditional code is misleading, and I wonder if
> it would be better like so:
> 
> --- a/src/backend/storage/smgr/md.c
> +++ b/src/backend/storage/smgr/md.c
> @@ -1787,8 +1787,13 @@ _mdfd_openseg(SMgrRelation reln, ForkNumber
> forknum, BlockNumber segno,
>         if (fd < 0)
>                 return NULL;
> 
> -       if (segno <= reln->md_num_open_segs[forknum])
> -               _fdvec_resize(reln, forknum, segno + 1);
> +       /*
> +        * Segments are always opened in order from lowest to highest,
> so we must
> +        * be adding a new one at the end.
> +        */
> +       Assert(segno == reln->md_num_open_segs[forknum]);
> +
> +       _fdvec_resize(reln, forknum, segno + 1);
> 
>         /* fill the entry */
>         v = &reln->md_seg_fds[forknum][segno];
> 
> I think the condition is always true, and with == it would also always
> be true.  If that weren't the case, the call to _fdvec_resize() code
> would effectively leak vfds.

I may be missing something, but it seems possible that
_mdfd_getseg calls it with segno > opensegs.

|     for (nextsegno = reln->md_num_open_segs[forknum];
|          nextsegno <= targetseg; nextsegno++)
| ...
|         v = _mdfd_openseg(reln, forknum, nextsegno, flags);


regards.

-- 
Kyotaro Horiguchi
NTT Open Source Software Center




В списке pgsql-hackers по дате отправления:

Предыдущее
От: Kyotaro HORIGUCHI
Дата:
Сообщение: Re: ToDo: show size of partitioned table
Следующее
От: Michael Paquier
Дата:
Сообщение: Re: Re: A separate table level option to control compression