Skip to content

Commit b6dd127

Browse files
committed
Ensure BackgroundWorker struct contents are well-defined.
Coverity complained because bgw.bgw_extra wasn't being filled in by ApplyLauncherRegister(). The most future-proof fix is to memset the whole BackgroundWorker struct to zeroes. While at it, let's apply the same coding rule to other places that set up BackgroundWorker structs; four out of five had the same or related issues.
1 parent c7d225e commit b6dd127

File tree

4 files changed

+10
-1
lines changed

4 files changed

+10
-1
lines changed

src/backend/access/transam/parallel.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -435,6 +435,7 @@ LaunchParallelWorkers(ParallelContext *pcxt)
435435
oldcontext = MemoryContextSwitchTo(TopTransactionContext);
436436

437437
/* Configure a worker. */
438+
memset(&worker, 0, sizeof(worker));
438439
snprintf(worker.bgw_name, BGW_MAXLEN, "parallel worker for PID %d",
439440
MyProcPid);
440441
worker.bgw_flags =
@@ -446,7 +447,6 @@ LaunchParallelWorkers(ParallelContext *pcxt)
446447
sprintf(worker.bgw_function_name, "ParallelWorkerMain");
447448
worker.bgw_main_arg = UInt32GetDatum(dsm_segment_handle(pcxt->seg));
448449
worker.bgw_notify_pid = MyProcPid;
449-
memset(&worker.bgw_extra, 0, BGW_EXTRALEN);
450450

451451
/*
452452
* Start workers.

src/backend/replication/logical/launcher.c

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -291,6 +291,7 @@ logicalrep_worker_launch(Oid dbid, Oid subid, const char *subname, Oid userid,
291291
LWLockRelease(LogicalRepWorkerLock);
292292

293293
/* Register the new dynamic worker. */
294+
memset(&bgw, 0, sizeof(bgw));
294295
bgw.bgw_flags = BGWORKER_SHMEM_ACCESS |
295296
BGWORKER_BACKEND_DATABASE_CONNECTION;
296297
bgw.bgw_start_time = BgWorkerStart_RecoveryFinished;
@@ -560,6 +561,10 @@ ApplyLauncherShmemSize(void)
560561
return size;
561562
}
562563

564+
/*
565+
* ApplyLauncherRegister
566+
* Register a background worker running the logical replication launcher.
567+
*/
563568
void
564569
ApplyLauncherRegister(void)
565570
{
@@ -568,6 +573,7 @@ ApplyLauncherRegister(void)
568573
if (max_logical_replication_workers == 0)
569574
return;
570575

576+
memset(&bgw, 0, sizeof(bgw));
571577
bgw.bgw_flags = BGWORKER_SHMEM_ACCESS |
572578
BGWORKER_BACKEND_DATABASE_CONNECTION;
573579
bgw.bgw_start_time = BgWorkerStart_RecoveryFinished;

src/test/modules/test_shm_mq/setup.c

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -213,6 +213,7 @@ setup_background_workers(int nworkers, dsm_segment *seg)
213213
PointerGetDatum(wstate));
214214

215215
/* Configure a worker. */
216+
memset(&worker, 0, sizeof(worker));
216217
worker.bgw_flags = BGWORKER_SHMEM_ACCESS;
217218
worker.bgw_start_time = BgWorkerStart_ConsistentState;
218219
worker.bgw_restart_time = BGW_NEVER_RESTART;

src/test/modules/worker_spi/worker_spi.c

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -343,6 +343,7 @@ _PG_init(void)
343343
NULL);
344344

345345
/* set up common data for all our workers */
346+
memset(&worker, 0, sizeof(worker));
346347
worker.bgw_flags = BGWORKER_SHMEM_ACCESS |
347348
BGWORKER_BACKEND_DATABASE_CONNECTION;
348349
worker.bgw_start_time = BgWorkerStart_RecoveryFinished;
@@ -375,6 +376,7 @@ worker_spi_launch(PG_FUNCTION_ARGS)
375376
BgwHandleStatus status;
376377
pid_t pid;
377378

379+
memset(&worker, 0, sizeof(worker));
378380
worker.bgw_flags = BGWORKER_SHMEM_ACCESS |
379381
BGWORKER_BACKEND_DATABASE_CONNECTION;
380382
worker.bgw_start_time = BgWorkerStart_RecoveryFinished;

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