Use consistent type for pgaio_io_get_id() result
authorPeter Eisentraut <peter@eisentraut.org>
Thu, 21 Aug 2025 17:40:12 +0000 (19:40 +0200)
committerPeter Eisentraut <peter@eisentraut.org>
Thu, 21 Aug 2025 17:45:25 +0000 (19:45 +0200)
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.

Reviewed-by: Andres Freund <andres@anarazel.de>
Discussion: https://www.postgresql.org/message-id/70c784b3-f60b-4652-b8a6-75e5f051243e%40eisentraut.org

src/backend/storage/aio/aio_funcs.c
src/backend/storage/aio/method_worker.c

index 905ea129c813d9ec9a6781199c5fedf00b8b4aa7..34f8f6327338f5b5e6d98436bc582ad5a39c944d 100644 (file)
@@ -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 @@ retry:
            nulls[0] = false;
 
        /* column: IO's id */
-       values[1] = UInt32GetDatum(ioh_id);
+       values[1] = Int32GetDatum(ioh_id);
 
        /* column: IO's generation */
        values[2] = Int64GetDatum(start_generation);
index bf8f77e6ff60673dcc4af1f1b3c63d1a88b8c403..b5ac073a910df8a8feafbac8ed86151212cdedee 100644 (file)
@@ -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;