0001-Use-consistent-type-for-pgaio_io_get_id-result.patch

text/plain

Filename: 0001-Use-consistent-type-for-pgaio_io_get_id-result.patch
Type: text/plain
Part: 0
Message: pgaio_io_get_id() type (was Re: Datum as struct)

Patch

Format: format-patch
Series: patch 0001
Subject: Use consistent type for pgaio_io_get_id() result
File+
src/backend/storage/aio/aio_funcs.c 2 2
src/backend/storage/aio/method_worker.c 7 7
From e1bb97e13af226cd15c9a59929aef48bc92c4ac2 Mon Sep 17 00:00:00 2001
From: Peter Eisentraut <peter@eisentraut.org>
Date: Tue, 5 Aug 2025 19:16:38 +0200
Subject: [PATCH] Use consistent type for pgaio_io_get_id() result

The result of pgaio_io_get_id() was being assigned to a mix of int and
uint32 variables.  This fixes it to use int consistently, which seems
the most correct.  Also change the queue empty special value in
method_worker.c to -1 from UINT32_MAX.
---
 src/backend/storage/aio/aio_funcs.c     |  4 ++--
 src/backend/storage/aio/method_worker.c | 14 +++++++-------
 2 files changed, 9 insertions(+), 9 deletions(-)

diff --git a/src/backend/storage/aio/aio_funcs.c b/src/backend/storage/aio/aio_funcs.c
index 584e683371a..34f8f632733 100644
--- a/src/backend/storage/aio/aio_funcs.c
+++ b/src/backend/storage/aio/aio_funcs.c
@@ -56,7 +56,7 @@ pg_get_aios(PG_FUNCTION_ARGS)
 	for (uint64 i = 0; i < pgaio_ctl->io_handle_count; i++)
 	{
 		PgAioHandle *live_ioh = &pgaio_ctl->io_handles[i];
-		uint32		ioh_id = pgaio_io_get_id(live_ioh);
+		int			ioh_id = pgaio_io_get_id(live_ioh);
 		Datum		values[PG_GET_AIOS_COLS] = {0};
 		bool		nulls[PG_GET_AIOS_COLS] = {0};
 		ProcNumber	owner;
@@ -152,7 +152,7 @@ pg_get_aios(PG_FUNCTION_ARGS)
 			nulls[0] = false;
 
 		/* column: IO's id */
-		values[1] = ioh_id;
+		values[1] = Int32GetDatum(ioh_id);
 
 		/* column: IO's generation */
 		values[2] = Int64GetDatum(start_generation);
diff --git a/src/backend/storage/aio/method_worker.c b/src/backend/storage/aio/method_worker.c
index bf8f77e6ff6..b5ac073a910 100644
--- a/src/backend/storage/aio/method_worker.c
+++ b/src/backend/storage/aio/method_worker.c
@@ -58,7 +58,7 @@ typedef struct PgAioWorkerSubmissionQueue
 	uint32		mask;
 	uint32		head;
 	uint32		tail;
-	uint32		sqes[FLEXIBLE_ARRAY_MEMBER];
+	int			sqes[FLEXIBLE_ARRAY_MEMBER];
 } PgAioWorkerSubmissionQueue;
 
 typedef struct PgAioWorkerSlot
@@ -107,7 +107,7 @@ pgaio_worker_queue_shmem_size(int *queue_size)
 	*queue_size = pg_nextpower2_32(io_worker_queue_size);
 
 	return offsetof(PgAioWorkerSubmissionQueue, sqes) +
-		sizeof(uint32) * *queue_size;
+		sizeof(int) * *queue_size;
 }
 
 static size_t
@@ -198,15 +198,15 @@ pgaio_worker_submission_queue_insert(PgAioHandle *ioh)
 	return true;
 }
 
-static uint32
+static int
 pgaio_worker_submission_queue_consume(void)
 {
 	PgAioWorkerSubmissionQueue *queue;
-	uint32		result;
+	int			result;
 
 	queue = io_worker_submission_queue;
 	if (queue->tail == queue->head)
-		return UINT32_MAX;		/* empty */
+		return -1;				/* empty */
 
 	result = queue->sqes[queue->tail];
 	queue->tail = (queue->tail + 1) & (queue->size - 1);
@@ -470,7 +470,7 @@ IoWorkerMain(const void *startup_data, size_t startup_data_len)
 		 * to ensure that we don't see an outdated data in the handle.
 		 */
 		LWLockAcquire(AioWorkerSubmissionQueueLock, LW_EXCLUSIVE);
-		if ((io_index = pgaio_worker_submission_queue_consume()) == UINT32_MAX)
+		if ((io_index = pgaio_worker_submission_queue_consume()) == -1)
 		{
 			/*
 			 * Nothing to do.  Mark self idle.
@@ -500,7 +500,7 @@ IoWorkerMain(const void *startup_data, size_t startup_data_len)
 		for (int i = 0; i < nlatches; ++i)
 			SetLatch(latches[i]);
 
-		if (io_index != UINT32_MAX)
+		if (io_index != -1)
 		{
 			PgAioHandle *ioh = NULL;
 
-- 
2.50.1