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(); }