test_shm_mq: Replace WAIT_EVENT_EXTENSION with custom wait events
authorMichael Paquier <michael@paquier.xyz>
Wed, 4 Oct 2023 08:12:25 +0000 (17:12 +0900)
committerMichael Paquier <michael@paquier.xyz>
Wed, 4 Oct 2023 08:12:25 +0000 (17:12 +0900)
Two custom wait events are added here:
- "TestShmMqBgWorkerStartup", when setting up a set of bgworkers in
wait_for_workers_to_become_ready().
- "TestShmMqMessageQueue", when waiting for a queued message in
test_shm_mq_pipelined().

Author: Masahiro Ikeda
Discussion: https://postgr.es/m/197bce267fa691a0ac62c86c4ab904c4@oss.nttdata.com

src/test/modules/test_shm_mq/setup.c
src/test/modules/test_shm_mq/test.c

index 192e5cc2ab40aae87f075554bdc78143fbed661b..abc79352b93226f9e3f3378f844daf5d1dc3e607 100644 (file)
@@ -40,6 +40,9 @@ static void wait_for_workers_to_become_ready(worker_state *wstate,
                                                                                         volatile test_shm_mq_header *hdr);
 static bool check_worker_status(worker_state *wstate);
 
+/* value cached, fetched from shared memory */
+static uint32 we_bgworker_startup = 0;
+
 /*
  * Set up a dynamic shared memory segment and zero or more background workers
  * for a test run.
@@ -278,9 +281,13 @@ wait_for_workers_to_become_ready(worker_state *wstate,
                        break;
                }
 
+               /* first time, allocate or get the custom wait event */
+               if (we_bgworker_startup == 0)
+                       we_bgworker_startup = WaitEventExtensionNew("TestShmMqBgWorkerStartup");
+
                /* Wait to be signaled. */
                (void) WaitLatch(MyLatch, WL_LATCH_SET | WL_EXIT_ON_PM_DEATH, 0,
-                                                WAIT_EVENT_EXTENSION);
+                                                we_bgworker_startup);
 
                /* Reset the latch so we don't spin. */
                ResetLatch(MyLatch);
index d9be7033502889f3259a8effa655a9a9f06e493b..cb52a680a52774ffcf637434894c561e5fddcf01 100644 (file)
@@ -28,6 +28,9 @@ PG_FUNCTION_INFO_V1(test_shm_mq_pipelined);
 static void verify_message(Size origlen, char *origdata, Size newlen,
                                                   char *newdata);
 
+/* value cached, fetched from shared memory */
+static uint32 we_message_queue = 0;
+
 /*
  * Simple test of the shared memory message queue infrastructure.
  *
@@ -225,6 +228,10 @@ test_shm_mq_pipelined(PG_FUNCTION_ARGS)
 
                if (wait)
                {
+                       /* first time, allocate or get the custom wait event */
+                       if (we_message_queue == 0)
+                               we_message_queue = WaitEventExtensionNew("TestShmMqMessageQueue");
+
                        /*
                         * If we made no progress, wait for one of the other processes to
                         * which we are connected to set our latch, indicating that they
@@ -232,7 +239,7 @@ test_shm_mq_pipelined(PG_FUNCTION_ARGS)
                         * for us to do.
                         */
                        (void) WaitLatch(MyLatch, WL_LATCH_SET | WL_EXIT_ON_PM_DEATH, 0,
-                                                        WAIT_EVENT_EXTENSION);
+                                                        we_message_queue);
                        ResetLatch(MyLatch);
                        CHECK_FOR_INTERRUPTS();
                }