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;
}
/*
- * 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.
* 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,