From 026bc46da33ab6a6f720b0d0500e8a95d075ab92 Mon Sep 17 00:00:00 2001 From: Robert Haas Date: Mon, 22 Jul 2013 15:41:44 -0400 Subject: [PATCH] Back-patch bgworker API changes to 9.3. Commit 7f7485a0cde92aa4ba235a1ffe4dda0ca0b6cc9a made these changes in master; per discussion, backport the API changes (but not the functional changes), so that people don't get used to the 9.3 API only to see it get broken in the next release. There are already some people coding to the original 9.3 API, and this will cause minor breakage, but there will be even more if we wait until next year to roll out these changes. --- contrib/worker_spi/worker_spi.c | 23 +++++++++++------------ doc/src/sgml/bgworker.sgml | 6 +++--- src/backend/postmaster/postmaster.c | 3 --- src/include/postmaster/bgworker.h | 7 ++++--- 4 files changed, 18 insertions(+), 21 deletions(-) diff --git a/contrib/worker_spi/worker_spi.c b/contrib/worker_spi/worker_spi.c index 84ac1b7730..3a75bb3f4e 100644 --- a/contrib/worker_spi/worker_spi.c +++ b/contrib/worker_spi/worker_spi.c @@ -154,10 +154,17 @@ initialize_worker_spi(worktable *table) } static void -worker_spi_main(void *main_arg) +worker_spi_main(Datum main_arg) { - worktable *table = (worktable *) main_arg; + int index = DatumGetInt32(main_arg); + worktable *table; StringInfoData buf; + char name[20]; + + table = palloc(sizeof(worktable)); + sprintf(name, "schema%d", index); + table->schema = pstrdup(name); + table->name = pstrdup("counted"); /* Establish signal handlers before unblocking signals. */ pqsignal(SIGHUP, worker_spi_sighup); @@ -296,9 +303,7 @@ void _PG_init(void) { BackgroundWorker worker; - worktable *table; unsigned int i; - char name[20]; /* get the configuration */ DefineCustomIntVariable("worker_spi.naptime", @@ -338,14 +343,8 @@ _PG_init(void) */ for (i = 1; i <= worker_spi_total_workers; i++) { - sprintf(name, "worker %d", i); - worker.bgw_name = pstrdup(name); - - table = palloc(sizeof(worktable)); - sprintf(name, "schema%d", i); - table->schema = pstrdup(name); - table->name = pstrdup("counted"); - worker.bgw_main_arg = (void *) table; + snprintf(worker.bgw_name, BGW_MAXLEN, "worker %d", i); + worker.bgw_main_arg = Int32GetDatum(i); RegisterBackgroundWorker(&worker); } diff --git a/doc/src/sgml/bgworker.sgml b/doc/src/sgml/bgworker.sgml index 7d2ffd14fe..7ffeca5321 100644 --- a/doc/src/sgml/bgworker.sgml +++ b/doc/src/sgml/bgworker.sgml @@ -40,12 +40,12 @@ typedef void (*bgworker_main_type)(void *main_arg); typedef struct BackgroundWorker { - char *bgw_name; + char bgw_name[BGW_MAXLEN]; int bgw_flags; BgWorkerStartTime bgw_start_time; int bgw_restart_time; /* in seconds, or BGW_NEVER_RESTART */ - bgworker_main_type bgw_main; - void *bgw_main_arg; + bgworker_main_type bgw_main; + Datum bgw_main_arg; } BackgroundWorker; diff --git a/src/backend/postmaster/postmaster.c b/src/backend/postmaster/postmaster.c index 1e41a0e75e..f219bd1301 100644 --- a/src/backend/postmaster/postmaster.c +++ b/src/backend/postmaster/postmaster.c @@ -5247,9 +5247,6 @@ RegisterBackgroundWorker(BackgroundWorker *worker) } rw->rw_worker = *worker; - rw->rw_worker.bgw_name = ((char *) rw) + sizeof(RegisteredBgWorker); - strlcpy(rw->rw_worker.bgw_name, worker->bgw_name, namelen + 1); - rw->rw_backend = NULL; rw->rw_pid = 0; rw->rw_child_slot = 0; diff --git a/src/include/postmaster/bgworker.h b/src/include/postmaster/bgworker.h index e91e344eb6..e0f468fab9 100644 --- a/src/include/postmaster/bgworker.h +++ b/src/include/postmaster/bgworker.h @@ -52,7 +52,7 @@ #define BGWORKER_BACKEND_DATABASE_CONNECTION 0x0002 -typedef void (*bgworker_main_type) (void *main_arg); +typedef void (*bgworker_main_type) (Datum main_arg); /* * Points in time at which a bgworker can request to be started @@ -66,15 +66,16 @@ typedef enum #define BGW_DEFAULT_RESTART_INTERVAL 60 #define BGW_NEVER_RESTART -1 +#define BGW_MAXLEN 64 typedef struct BackgroundWorker { - char *bgw_name; + char bgw_name[BGW_MAXLEN]; int bgw_flags; BgWorkerStartTime bgw_start_time; int bgw_restart_time; /* in seconds, or BGW_NEVER_RESTART */ bgworker_main_type bgw_main; - void *bgw_main_arg; + Datum bgw_main_arg; } BackgroundWorker; /* Register a new bgworker */ -- 2.40.0