Skip to content

Commit f518cf5

Browse files
committed
resolve bgw_main_* functions by name (BGW)
1 parent 8249f7e commit f518cf5

File tree

1 file changed

+23
-15
lines changed

1 file changed

+23
-15
lines changed

src/pathman_workers.c

Lines changed: 23 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -47,15 +47,19 @@ PG_FUNCTION_INFO_V1( show_concurrent_part_tasks_internal );
4747
PG_FUNCTION_INFO_V1( stop_concurrent_part_task );
4848

4949

50+
/*
51+
* Dynamically resolve functions (for BGW API).
52+
*/
53+
extern PGDLLEXPORT void bgw_main_spawn_partitions(Datum main_arg);
54+
extern PGDLLEXPORT void bgw_main_concurrent_part(Datum main_arg);
55+
56+
5057
static void handle_sigterm(SIGNAL_ARGS);
5158
static void bg_worker_load_config(const char *bgw_name);
5259
static void start_bg_worker(const char bgworker_name[BGW_MAXLEN],
53-
bgworker_main_type bgw_main_func,
60+
const char bgworker_proc[BGW_MAXLEN],
5461
Datum bgw_arg, bool wait_for_shutdown);
5562

56-
static void bgw_main_spawn_partitions(Datum main_arg);
57-
static void bgw_main_concurrent_part(Datum main_arg);
58-
5963

6064
/*
6165
* Function context for concurrent_part_tasks_internal() SRF.
@@ -157,7 +161,7 @@ bg_worker_load_config(const char *bgw_name)
157161
*/
158162
static void
159163
start_bg_worker(const char bgworker_name[BGW_MAXLEN],
160-
bgworker_main_type bgw_main_func,
164+
const char bgworker_proc[BGW_MAXLEN],
161165
Datum bgw_arg, bool wait_for_shutdown)
162166
{
163167
#define HandleError(condition, new_state) \
@@ -179,12 +183,16 @@ start_bg_worker(const char bgworker_name[BGW_MAXLEN],
179183

180184
/* Initialize worker struct */
181185
memcpy(worker.bgw_name, bgworker_name, BGW_MAXLEN);
182-
worker.bgw_flags = BGWORKER_SHMEM_ACCESS | BGWORKER_BACKEND_DATABASE_CONNECTION;
183-
worker.bgw_start_time = BgWorkerStart_RecoveryFinished;
184-
worker.bgw_restart_time = BGW_NEVER_RESTART;
185-
worker.bgw_main = bgw_main_func;
186-
worker.bgw_main_arg = bgw_arg;
187-
worker.bgw_notify_pid = MyProcPid;
186+
memcpy(worker.bgw_function_name, bgworker_proc, BGW_MAXLEN);
187+
memcpy(worker.bgw_library_name, "pg_pathman", BGW_MAXLEN);
188+
189+
worker.bgw_flags = BGWORKER_SHMEM_ACCESS |
190+
BGWORKER_BACKEND_DATABASE_CONNECTION;
191+
worker.bgw_start_time = BgWorkerStart_RecoveryFinished;
192+
worker.bgw_restart_time = BGW_NEVER_RESTART;
193+
worker.bgw_main = NULL;
194+
worker.bgw_main_arg = bgw_arg;
195+
worker.bgw_notify_pid = MyProcPid;
188196

189197
/* Start dynamic worker */
190198
bgw_started = RegisterDynamicBackgroundWorker(&worker, &bgw_handle);
@@ -301,7 +309,7 @@ create_partitions_for_value_bg_worker(Oid relid, Datum value, Oid value_type)
301309

302310
/* Start worker and wait for it to finish */
303311
start_bg_worker(spawn_partitions_bgw,
304-
bgw_main_spawn_partitions,
312+
CppAsString(bgw_main_spawn_partitions),
305313
UInt32GetDatum(segment_handle),
306314
true);
307315

@@ -323,7 +331,7 @@ create_partitions_for_value_bg_worker(Oid relid, Datum value, Oid value_type)
323331
/*
324332
* Entry point for SpawnPartitionsWorker's process.
325333
*/
326-
static void
334+
void
327335
bgw_main_spawn_partitions(Datum main_arg)
328336
{
329337
dsm_handle handle = DatumGetUInt32(main_arg);
@@ -403,7 +411,7 @@ bgw_main_spawn_partitions(Datum main_arg)
403411
/*
404412
* Entry point for ConcurrentPartWorker's process.
405413
*/
406-
static void
414+
void
407415
bgw_main_concurrent_part(Datum main_arg)
408416
{
409417
int rows;
@@ -671,7 +679,7 @@ partition_table_concurrently(PG_FUNCTION_ARGS)
671679

672680
/* Start worker (we should not wait) */
673681
start_bg_worker(concurrent_part_bgw,
674-
bgw_main_concurrent_part,
682+
CppAsString(bgw_main_concurrent_part),
675683
Int32GetDatum(empty_slot_idx),
676684
false);
677685

0 commit comments

Comments
 (0)
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy