diff options
| author | Andres Freund <andres@anarazel.de> | 2025-11-04 19:23:13 -0500 |
|---|---|---|
| committer | Andres Freund <andres@anarazel.de> | 2025-11-04 20:03:53 -0500 |
| commit | dae00f333bdd98d094275080dba248cc80d4ca04 (patch) | |
| tree | 6e6b03c47cbe0be0ef3fee7afa10274343139e04 /src/backend/storage/aio/aio.c | |
| parent | 2d83d729d5a1a6cc5c62bf3a932fdb508ce3d1ac (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/backend/storage/aio/aio.c')
| -rw-r--r-- | src/backend/storage/aio/aio.c | 5 |
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]; } |
