Alvaro Herrera <alvhe...@alvh.no-ip.org> writes:
> On 2022-Jul-20, Tom Lane wrote:
>> I'll try to do some research later today to identify anything else
>> we need to mark in plpgsql.  I recall doing some work specifically
>> creating functions for pldebugger's use, but I'll need to dig.

> I suppose you're probably thinking of commit 53ef6c40f1e7; that didn't
> expose functions directly, but through plpgsql_plugin_ptr.  Maybe that
> one does need to be made PGDLLEXPORT, since currently it isn't.

After some experimentation, it does not need to be marked: pldebugger
gets at that via find_rendezvous_variable(), so there is no need for
any explicit linkage at all between plpgsql.so and plugin_debugger.so.

Along the way, I made a quick hack to get pldebugger to load into
v15/HEAD.  It lacks #ifdef's which'd be needed so that it'd still
compile against older branches, but perhaps this'll save someone
some time.

                        regards, tom lane

diff --git a/plugin_debugger.c b/plugin_debugger.c
index 6620021..1bd2057 100644
--- a/plugin_debugger.c
+++ b/plugin_debugger.c
@@ -114,6 +114,8 @@ static debugger_language_t *debugger_languages[] = {
 	NULL
 };
 
+static shmem_request_hook_type prev_shmem_request_hook = NULL;
+
 /**********************************************************************
  * Function declarations
  **********************************************************************/
@@ -124,6 +126,7 @@ void _PG_init( void );				/* initialize this module when we are dynamically load
  * Local (hidden) function prototypes
  **********************************************************************/
 
+static void			 pldebugger_shmem_request( void );
 //static char       ** fetchArgNames( PLpgSQL_function * func, int * nameCount );
 static void        * writen( int peer, void * src, size_t len );
 static bool 		 connectAsServer( void );
@@ -154,6 +157,15 @@ void _PG_init( void )
 	for (i = 0; debugger_languages[i] != NULL; i++)
 		debugger_languages[i]->initialize();
 
+	prev_shmem_request_hook = shmem_request_hook;
+	shmem_request_hook = pldebugger_shmem_request;
+}
+
+static void pldebugger_shmem_request( void )
+{
+	if (prev_shmem_request_hook)
+		prev_shmem_request_hook();
+
 	reserveBreakpoints();
 	dbgcomm_reserve();
 }

Reply via email to