diff options
author | Heikki Linnakangas | 2024-08-09 19:44:20 +0000 |
---|---|---|
committer | Heikki Linnakangas | 2024-08-09 19:44:20 +0000 |
commit | b43100fa71d7f21751b0b1b9b84833be95336386 (patch) | |
tree | 436d1b543668bcfb3d87bd951d51347f6a9aabd5 /src/backend/postmaster/postmaster.c | |
parent | 7fceb5725b05768e9c76b1c3af447dfea8f8da53 (diff) |
Make BackgroundWorkerList doubly-linked
This allows ForgetBackgroundWorker() and ReportBackgroundWorkerExit()
to take a RegisteredBgWorker pointer as argument, rather than a list
iterator. That feels a little more natural. But more importantly, this
paves the way for more refactoring in the next commit.
Reviewed-by: Thomas Munro <[email protected]>
Discussion: https://www.postgresql.org/message-id/[email protected]
Diffstat (limited to 'src/backend/postmaster/postmaster.c')
-rw-r--r-- | src/backend/postmaster/postmaster.c | 40 |
1 files changed, 20 insertions, 20 deletions
diff --git a/src/backend/postmaster/postmaster.c b/src/backend/postmaster/postmaster.c index a3e9e8fdc02..fc00e39c44d 100644 --- a/src/backend/postmaster/postmaster.c +++ b/src/backend/postmaster/postmaster.c @@ -1531,7 +1531,7 @@ DetermineSleepTime(void) if (HaveCrashedWorker) { - slist_mutable_iter siter; + dlist_mutable_iter iter; /* * When there are crashed bgworkers, we sleep just long enough that @@ -1539,12 +1539,12 @@ DetermineSleepTime(void) * determine the minimum of all wakeup times according to most recent * crash time and requested restart interval. */ - slist_foreach_modify(siter, &BackgroundWorkerList) + dlist_foreach_modify(iter, &BackgroundWorkerList) { RegisteredBgWorker *rw; TimestampTz this_wakeup; - rw = slist_container(RegisteredBgWorker, rw_lnode, siter.cur); + rw = dlist_container(RegisteredBgWorker, rw_lnode, iter.cur); if (rw->rw_crashed_at == 0) continue; @@ -1552,7 +1552,7 @@ DetermineSleepTime(void) if (rw->rw_worker.bgw_restart_time == BGW_NEVER_RESTART || rw->rw_terminate) { - ForgetBackgroundWorker(&siter); + ForgetBackgroundWorker(rw); continue; } @@ -2625,13 +2625,13 @@ CleanupBackgroundWorker(int pid, int exitstatus) /* child's exit status */ { char namebuf[MAXPGPATH]; - slist_mutable_iter iter; + dlist_mutable_iter iter; - slist_foreach_modify(iter, &BackgroundWorkerList) + dlist_foreach_modify(iter, &BackgroundWorkerList) { RegisteredBgWorker *rw; - rw = slist_container(RegisteredBgWorker, rw_lnode, iter.cur); + rw = dlist_container(RegisteredBgWorker, rw_lnode, iter.cur); if (rw->rw_pid != pid) continue; @@ -2694,7 +2694,7 @@ CleanupBackgroundWorker(int pid, rw->rw_backend = NULL; rw->rw_pid = 0; rw->rw_child_slot = 0; - ReportBackgroundWorkerExit(&iter); /* report child death */ + ReportBackgroundWorkerExit(rw); /* report child death */ LogChildExit(EXIT_STATUS_0(exitstatus) ? DEBUG1 : LOG, namebuf, pid, exitstatus); @@ -2796,8 +2796,8 @@ CleanupBackend(int pid, static void HandleChildCrash(int pid, int exitstatus, const char *procname) { - dlist_mutable_iter iter; - slist_iter siter; + dlist_iter iter; + dlist_mutable_iter miter; Backend *bp; bool take_action; @@ -2819,11 +2819,11 @@ HandleChildCrash(int pid, int exitstatus, const char *procname) } /* Process background workers. */ - slist_foreach(siter, &BackgroundWorkerList) + dlist_foreach(iter, &BackgroundWorkerList) { RegisteredBgWorker *rw; - rw = slist_container(RegisteredBgWorker, rw_lnode, siter.cur); + rw = dlist_container(RegisteredBgWorker, rw_lnode, iter.cur); if (rw->rw_pid == 0) continue; /* not running */ if (rw->rw_pid == pid) @@ -2853,9 +2853,9 @@ HandleChildCrash(int pid, int exitstatus, const char *procname) } /* Process regular backends */ - dlist_foreach_modify(iter, &BackendList) + dlist_foreach_modify(miter, &BackendList) { - bp = dlist_container(Backend, elem, iter.cur); + bp = dlist_container(Backend, elem, miter.cur); if (bp->pid == pid) { @@ -2866,7 +2866,7 @@ HandleChildCrash(int pid, int exitstatus, const char *procname) { (void) ReleasePostmasterChildSlot(bp->child_slot); } - dlist_delete(iter.cur); + dlist_delete(miter.cur); pfree(bp); /* Keep looping so we can signal remaining backends */ } @@ -4177,7 +4177,7 @@ maybe_start_bgworkers(void) #define MAX_BGWORKERS_TO_LAUNCH 100 int num_launched = 0; TimestampTz now = 0; - slist_mutable_iter iter; + dlist_mutable_iter iter; /* * During crash recovery, we have no need to be called until the state @@ -4194,11 +4194,11 @@ maybe_start_bgworkers(void) StartWorkerNeeded = false; HaveCrashedWorker = false; - slist_foreach_modify(iter, &BackgroundWorkerList) + dlist_foreach_modify(iter, &BackgroundWorkerList) { RegisteredBgWorker *rw; - rw = slist_container(RegisteredBgWorker, rw_lnode, iter.cur); + rw = dlist_container(RegisteredBgWorker, rw_lnode, iter.cur); /* ignore if already running */ if (rw->rw_pid != 0) @@ -4207,7 +4207,7 @@ maybe_start_bgworkers(void) /* if marked for death, clean up and remove from list */ if (rw->rw_terminate) { - ForgetBackgroundWorker(&iter); + ForgetBackgroundWorker(rw); continue; } @@ -4226,7 +4226,7 @@ maybe_start_bgworkers(void) notify_pid = rw->rw_worker.bgw_notify_pid; - ForgetBackgroundWorker(&iter); + ForgetBackgroundWorker(rw); /* Report worker is gone now. */ if (notify_pid != 0) |