Strange coding in _mdfd_openseg()
От | Thomas Munro |
---|---|
Тема | Strange coding in _mdfd_openseg() |
Дата | |
Msg-id | CA+hUKG+NBw+uSzxF1os-SO6gUuw=cqO5DAybk6KnHKzgGvxhxA@mail.gmail.com обсуждение исходный текст |
Ответы |
Re: Strange coding in _mdfd_openseg()
|
Список | pgsql-hackers |
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. -- Thomas Munro https://enterprisedb.com
В списке pgsql-hackers по дате отправления: