From 4b211003ecc2946dc0052b650141ea4e8f35254c Mon Sep 17 00:00:00 2001 From: Michael Paquier Date: Fri, 5 Jul 2024 17:41:49 +0900 Subject: Support loading of injection points This can be used to load an injection point and prewarm the backend-level cache before running it, to avoid issues if the point cannot be loaded due to restrictions in the code path where it would be run, like a critical section where no memory allocation can happen (load_external_function() can do allocations when expanding a library name). Tests can use a macro called INJECTION_POINT_LOAD() to load an injection point. The test module injection_points gains some tests, and a SQL function able to load an injection point. Based on a request from Andrey Borodin, who has implemented a test for multixacts requiring this facility. Reviewed-by: Andrey Borodin Discussion: https://postgr.es/m/ZkrBE1e2q2wGvsoN@paquier.xyz --- doc/src/sgml/xfunc.sgml | 14 ++++++++++++++ 1 file changed, 14 insertions(+) (limited to 'doc/src') diff --git a/doc/src/sgml/xfunc.sgml b/doc/src/sgml/xfunc.sgml index f3a3e4e2f8f..756a9d07fb0 100644 --- a/doc/src/sgml/xfunc.sgml +++ b/doc/src/sgml/xfunc.sgml @@ -3618,6 +3618,20 @@ INJECTION_POINT(name); their own code using the same macro. + + An injection point with a given name can be loaded + using macro: + +INJECTION_POINT_LOAD(name); + + + This will load the injection point callback into the process cache, + doing all memory allocations at this stage without running the callback. + This is useful when an injection point is attached in a critical section + where no memory can be allocated: load the injection point outside the + critical section, then run it in the critical section. + + Add-ins can attach callbacks to an already-declared injection point by calling: -- cgit v1.2.3