summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorAndres Freund <andres@anarazel.de>2025-11-04 19:23:13 -0500
committerAndres Freund <andres@anarazel.de>2025-11-04 20:03:53 -0500
commitdae00f333bdd98d094275080dba248cc80d4ca04 (patch)
tree6e6b03c47cbe0be0ef3fee7afa10274343139e04 /src
parent2d83d729d5a1a6cc5c62bf3a932fdb508ce3d1ac (diff)
aio: Improve assertions related to io_method
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
Diffstat (limited to 'src')
-rw-r--r--src/backend/storage/aio/aio.c5
1 files changed, 4 insertions, 1 deletions
diff --git a/src/backend/storage/aio/aio.c b/src/backend/storage/aio/aio.c
index 87d7136a936..dcc47069757 100644
--- a/src/backend/storage/aio/aio.c
+++ b/src/backend/storage/aio/aio.c
@@ -89,6 +89,9 @@ static const IoMethodOps *const pgaio_method_ops_table[] = {
#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;
@@ -1318,8 +1321,8 @@ pgaio_shutdown(int code, Datum arg)
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];
}