aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorThomas Munro <tmunro@postgresql.org>2020-01-27 09:05:27 +1300
committerThomas Munro <tmunro@postgresql.org>2020-01-27 09:12:56 +1300
commitf37ff03478aefb5e01d748b85ad86e6213624992 (patch)
tree9e364e747d5b157a43e06ad9b83fe4f2949ab453
parent215824f9188a2b19f870e6a707c5a81e1ac3f1fc (diff)
downloadpostgresql-f37ff03478aefb5e01d748b85ad86e6213624992.tar.gz
postgresql-f37ff03478aefb5e01d748b85ad86e6213624992.zip
Refactor confusing code in _mdfd_openseg().
As reported independently by a couple of people, _mdfd_openseg() is coded in a way that seems to imply that the segments could be opened in an order that isn't strictly sequential. Even if that were true, it's also using the wrong comparison. It's not an active bug, since the condition is always true anyway, but it's confusing, so replace it with an assertion. Author: Thomas Munro Reviewed-by: Andres Freund, Kyotaro Horiguchi, Noah Misch Discussion: https://postgr.es/m/CA%2BhUKG%2BNBw%2BuSzxF1os-SO6gUuw%3DcqO5DAybk6KnHKzgGvxhxA%40mail.gmail.com Discussion: https://postgr.es/m/20191222091930.GA1280238%40rfd.leadboat.com
-rw-r--r--src/backend/storage/smgr/md.c9
1 files changed, 7 insertions, 2 deletions
diff --git a/src/backend/storage/smgr/md.c b/src/backend/storage/smgr/md.c
index 85b71154006..c5b771c5311 100644
--- a/src/backend/storage/smgr/md.c
+++ b/src/backend/storage/smgr/md.c
@@ -1100,8 +1100,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];