First, the assertions in assign_io_method() were the wrong way round. Second,
the lengthof() assertion checked the length of io_method_options, which is the
wrong array to check and is always longer than pgaio_method_ops_table.
While add it, add a static assert to ensure pgaio_method_ops_table and
io_method_options stay in sync.
Per coverity and Tom Lane.
Reported-by: Tom Lane <tgl@sss.pgh.pa.us>
Backpatch-through: 18
#endif
};
+StaticAssertDecl(lengthof(io_method_options) == lengthof(pgaio_method_ops_table) + 1,
+ "io_method_options out of sync with pgaio_method_ops_table");
+
/* callbacks for the configured io_method, set by assign_io_method */
const IoMethodOps *pgaio_method_ops;
void
assign_io_method(int newval, void *extra)
{
+ Assert(newval < lengthof(pgaio_method_ops_table));
Assert(pgaio_method_ops_table[newval] != NULL);
- Assert(newval < lengthof(io_method_options));
pgaio_method_ops = pgaio_method_ops_table[newval];
}