mirror of
https://github.com/postgres/postgres.git
synced 2026-01-27 21:43:08 +03:00
This routine has come as a useful piece to be able to know the list of injection points currently attached in a system. One area would be to use it in a set-returning function, or just let out-of-core code play with it. This hides the internals of the shared memory array lookup holding the information about the injection points (point name, library and function name), allocating the result in a palloc'd List consumable by the caller. Reviewed-by: Jeff Davis <pgsql@j-davis.com> Reviewed-by: Hayato Kuroda <kuroda.hayato@fujitsu.com> Reviewed-by: Rahila Syed <rahilasyed90@gmail.com> Discussion: https://postgr.es/m/Z_xYkA21KyLEHvWR@paquier.xyz Discussion: https://postgr.es/m/aBG2rPwl3GE7m1-Q@paquier.xyz
71 lines
2.1 KiB
C
71 lines
2.1 KiB
C
/*-------------------------------------------------------------------------
|
|
* injection_point.h
|
|
* Definitions related to injection points.
|
|
*
|
|
* Copyright (c) 2001-2025, PostgreSQL Global Development Group
|
|
*
|
|
* src/include/utils/injection_point.h
|
|
*-------------------------------------------------------------------------
|
|
*/
|
|
|
|
#ifndef INJECTION_POINT_H
|
|
#define INJECTION_POINT_H
|
|
|
|
#include "nodes/pg_list.h"
|
|
|
|
/*
|
|
* Injection point data, used when retrieving a list of all the attached
|
|
* injection points.
|
|
*/
|
|
typedef struct InjectionPointData
|
|
{
|
|
const char *name;
|
|
const char *library;
|
|
const char *function;
|
|
} InjectionPointData;
|
|
|
|
/*
|
|
* Injection points require --enable-injection-points.
|
|
*/
|
|
#ifdef USE_INJECTION_POINTS
|
|
#define INJECTION_POINT_LOAD(name) InjectionPointLoad(name)
|
|
#define INJECTION_POINT(name, arg) InjectionPointRun(name, arg)
|
|
#define INJECTION_POINT_CACHED(name, arg) InjectionPointCached(name, arg)
|
|
#define IS_INJECTION_POINT_ATTACHED(name) IsInjectionPointAttached(name)
|
|
#else
|
|
#define INJECTION_POINT_LOAD(name) ((void) name)
|
|
#define INJECTION_POINT(name, arg) ((void) name)
|
|
#define INJECTION_POINT_CACHED(name, arg) ((void) name)
|
|
#define IS_INJECTION_POINT_ATTACHED(name) (false)
|
|
#endif
|
|
|
|
/*
|
|
* Typedef for callback function launched by an injection point.
|
|
*/
|
|
typedef void (*InjectionPointCallback) (const char *name,
|
|
const void *private_data,
|
|
void *arg);
|
|
|
|
extern Size InjectionPointShmemSize(void);
|
|
extern void InjectionPointShmemInit(void);
|
|
|
|
extern void InjectionPointAttach(const char *name,
|
|
const char *library,
|
|
const char *function,
|
|
const void *private_data,
|
|
int private_data_size);
|
|
extern void InjectionPointLoad(const char *name);
|
|
extern void InjectionPointRun(const char *name, void *arg);
|
|
extern void InjectionPointCached(const char *name, void *arg);
|
|
extern bool IsInjectionPointAttached(const char *name);
|
|
extern bool InjectionPointDetach(const char *name);
|
|
|
|
/* Get the current set of injection points attached */
|
|
extern List *InjectionPointList(void);
|
|
|
|
#ifdef EXEC_BACKEND
|
|
extern PGDLLIMPORT struct InjectionPointsCtl *ActiveInjectionPoints;
|
|
#endif
|
|
|
|
#endif /* INJECTION_POINT_H */
|