From cd9e5a5c01f98c4288802401ab84aeb116019231 Mon Sep 17 00:00:00 2001 From: reshke Date: Wed, 20 Aug 2025 05:22:38 +0000 Subject: [PATCH v1] Remove condition variables from injection wait logic. In order to avoid process to exit too early as a responce to Postmaster death (which will be undesirable for some type of testing), replace CondVar logic with simple sleep call in injection test module. --- src/test/modules/injection_points/injection_points.c | 12 ++++-------- 1 file changed, 4 insertions(+), 8 deletions(-) diff --git a/src/test/modules/injection_points/injection_points.c b/src/test/modules/injection_points/injection_points.c index 31138301117..7080a954cbd 100644 --- a/src/test/modules/injection_points/injection_points.c +++ b/src/test/modules/injection_points/injection_points.c @@ -87,8 +87,6 @@ typedef struct InjectionPointSharedState /* Names of injection points attached to wait counters */ char name[INJ_MAX_WAIT][INJ_NAME_MAXLEN]; - /* Condition variable used for waits and wakeups */ - ConditionVariable wait_point; } InjectionPointSharedState; /* Pointer to shared-memory state. */ @@ -132,7 +130,6 @@ injection_point_init_state(void *ptr) SpinLockInit(&state->lock); memset(state->wait_counts, 0, sizeof(state->wait_counts)); memset(state->name, 0, sizeof(state->name)); - ConditionVariableInit(&state->wait_point); } /* Shared memory initialization when loading module */ @@ -323,7 +320,6 @@ injection_wait(const char *name, const void *private_data, void *arg) name); /* And sleep.. */ - ConditionVariablePrepareToSleep(&inj_state->wait_point); for (;;) { uint32 new_wait_counts; @@ -334,9 +330,11 @@ injection_wait(const char *name, const void *private_data, void *arg) if (old_wait_counts != new_wait_counts) break; - ConditionVariableSleep(&inj_state->wait_point, injection_wait_event); + + pgstat_report_wait_start(injection_wait_event); +#define DEFAULT_INJ_POINT_SLEEP_MICROSEC 50000L /* 50 milliseconds */ + pg_usleep(DEFAULT_INJ_POINT_SLEEP_MICROSEC); } - ConditionVariableCancelSleep(); /* Remove this injection point from the waiters. */ SpinLockAcquire(&inj_state->lock); @@ -486,8 +484,6 @@ injection_points_wakeup(PG_FUNCTION_ARGS) inj_state->wait_counts[index]++; SpinLockRelease(&inj_state->lock); - /* And broadcast the change to the waiters */ - ConditionVariableBroadcast(&inj_state->wait_point); PG_RETURN_VOID(); } -- 2.43.0