After commit
089480c07, it's necessary for background worker entry
points to be marked PGDLLEXPORT, else they aren't findable by
LookupBackgroundWorkerFunction(). Since pg_prewarm lacks any
regression tests, it's not surprising its worker entry points were
overlooked. (A quick search turned up no other such oversights.)
I added some documentation pointing out the need for this, too.
Robins Tharakan and Tom Lane
CAEP4nAzndnQv3-1QKb=D-hLoK3Rko12HHMFHHtdj2GQAUXO3gw@mail.gmail.com
int prewarmed_blocks;
} AutoPrewarmSharedState;
-void autoprewarm_main(Datum main_arg);
-void autoprewarm_database_main(Datum main_arg);
+PGDLLEXPORT void autoprewarm_main(Datum main_arg);
+PGDLLEXPORT void autoprewarm_database_main(Datum main_arg);
PG_FUNCTION_INFO_V1(autoprewarm_start_worker);
PG_FUNCTION_INFO_V1(autoprewarm_dump_now);
which the initial entry point for the background worker should be sought.
The named library will be dynamically loaded by the worker process and
bgw_function_name will be used to identify the
- function to be called. If loading a function from the core code, this must
- be set to "postgres".
+ function to be called. If calling a function in the core code, this must
+ be set to "postgres".
- bgw_function_name is the name of a function in
- a dynamically loaded library which should be used as the initial entry point
- for a new background worker.
+ bgw_function_name is the name of the function
+ to use as the initial entry point for the new background worker. If
+ this function is in a dynamically loaded library, it must be marked
+ PGDLLEXPORT (and not static).