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.

Reviewed-by: Andres Freund <andres@anarazel.de>
Discussion: https://www.postgresql.org/message-id/70c784b3-f60b-4652-b8a6-75e5f051243e%40eisentraut.org
master
Peter Eisentraut 3 weeks ago
parent 12da45742c
commit 47932f3cdc
  1. 4
      src/backend/storage/aio/aio_funcs.c
  2. 14
      src/backend/storage/aio/method_worker.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 @@ 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);

@ -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;

Loading…
Cancel
Save