diff --git a/src/backend/postmaster/bgworker.c b/src/backend/postmaster/bgworker.c index f807c9cfa1..5ed422999c 100644 --- a/src/backend/postmaster/bgworker.c +++ b/src/backend/postmaster/bgworker.c @@ -134,17 +134,15 @@ BackgroundWorkerShmemInit(void) Assert(found); } +/* + * Search the postmaster's backend-private list of RegisteredBgWorker objects + * for the one that maps to the given slot number. + */ static RegisteredBgWorker * FindRegisteredWorkerBySlotNumber(int slotno) { slist_iter siter; - /* - * Copy contents of worker list into shared memory. Record the - * shared memory slot assigned to each worker. This ensures - * a 1-to-1 correspondence betwen the postmaster's private list and - * the array in shared memory. - */ slist_foreach(siter, &BackgroundWorkerList) { RegisteredBgWorker *rw; @@ -158,7 +156,7 @@ FindRegisteredWorkerBySlotNumber(int slotno) } /* - * Notice changes to shared_memory made by other backends. This code + * Notice changes to shared memory made by other backends. This code * runs in the postmaster, so we must be very careful not to assume that * shared memory contents are sane. Otherwise, a rogue backend could take * out the postmaster. diff --git a/src/include/postmaster/bgworker.h b/src/include/postmaster/bgworker.h index b260dc5e4e..0bb897b8f3 100644 --- a/src/include/postmaster/bgworker.h +++ b/src/include/postmaster/bgworker.h @@ -6,11 +6,13 @@ * including normal transactions. * * Any external module loaded via shared_preload_libraries can register a - * worker. Then, at the appropriate time, the worker process is forked from - * the postmaster and runs the user-supplied "main" function. This code may - * connect to a database and run transactions. Once started, it stays active - * until shutdown or crash. The process should sleep during periods of - * inactivity. + * worker. Workers can also be registered dynamically at runtime. In either + * case, the worker process is forked from the postmaster and runs the + * user-supplied "main" function. This code may connect to a database and + * run transactions. Once started, it stays active until shutdown or crash; + * unless the restart interval is declared as BGW_NEVER_RESTART and the + * process exits with a return code of 1; workers that do this are + * automatically unregistered by the postmaster. * * If the fork() call fails in the postmaster, it will try again later. Note * that the failure can only be transient (fork failure due to high load,