From 13bfa30d804d84502fd5de40c9ab735869a731d8 Mon Sep 17 00:00:00 2001
From: Masahiro Ikeda <mshr.ikeda@ntt.com>
Date: Wed, 9 Aug 2023 19:40:02 +0900
Subject: [PATCH 2/2] poc: custom wait event for dblink

---
 contrib/dblink/dblink.c | 10 +++++++++-
 1 file changed, 9 insertions(+), 1 deletion(-)

diff --git a/contrib/dblink/dblink.c b/contrib/dblink/dblink.c
index 41e1f6c91d..1b3dd3736a 100644
--- a/contrib/dblink/dblink.c
+++ b/contrib/dblink/dblink.c
@@ -129,6 +129,7 @@ static void restoreLocalGucs(int nestlevel);
 /* Global */
 static remoteConn *pconn = NULL;
 static HTAB *remoteConnHash = NULL;
+static uint32 *wait_event_info = NULL;
 
 /*
  *	Following is list that holds multiple remote connections.
@@ -203,7 +204,14 @@ dblink_get_conn(char *conname_or_str,
 		dblink_connstr_check(connstr);
 
 		/* OK to make connection */
-		conn = libpqsrv_connect(connstr, WAIT_EVENT_EXTENSION);
+		if (wait_event_info == NULL)
+		{
+			wait_event_info = (uint32 *) MemoryContextAlloc(TopMemoryContext, sizeof(uint32));
+			LWLockAcquire(AddinShmemInitLock, LW_EXCLUSIVE);
+			*wait_event_info = WaitEventExtensionNew("dblink_get_con");
+			LWLockRelease(AddinShmemInitLock);
+		}
+		conn = libpqsrv_connect(connstr, *wait_event_info);
 
 		if (PQstatus(conn) == CONNECTION_BAD)
 		{
-- 
2.25.1

