aboutsummaryrefslogtreecommitdiff
path: root/src/backend/postmaster/autovacuum.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/backend/postmaster/autovacuum.c')
-rw-r--r--src/backend/postmaster/autovacuum.c57
1 files changed, 27 insertions, 30 deletions
diff --git a/src/backend/postmaster/autovacuum.c b/src/backend/postmaster/autovacuum.c
index 9f218d6bdc0..6f056e0e169 100644
--- a/src/backend/postmaster/autovacuum.c
+++ b/src/backend/postmaster/autovacuum.c
@@ -55,7 +55,7 @@
*
*
* IDENTIFICATION
- * $PostgreSQL: pgsql/src/backend/postmaster/autovacuum.c,v 1.84 2008/08/13 00:07:50 alvherre Exp $
+ * $PostgreSQL: pgsql/src/backend/postmaster/autovacuum.c,v 1.85 2008/11/02 21:24:52 tgl Exp $
*
*-------------------------------------------------------------------------
*/
@@ -244,9 +244,9 @@ typedef struct
{
sig_atomic_t av_signal[AutoVacNumSignals];
pid_t av_launcherpid;
- SHMEM_OFFSET av_freeWorkers;
+ WorkerInfo av_freeWorkers;
SHM_QUEUE av_runningWorkers;
- SHMEM_OFFSET av_startingWorker;
+ WorkerInfo av_startingWorker;
} AutoVacuumShmemStruct;
static AutoVacuumShmemStruct *AutoVacuumShmem;
@@ -556,8 +556,8 @@ AutoVacLauncherMain(int argc, char *argv[])
if (!PostmasterIsAlive(true))
exit(1);
- launcher_determine_sleep(AutoVacuumShmem->av_freeWorkers !=
- INVALID_OFFSET, false, &nap);
+ launcher_determine_sleep((AutoVacuumShmem->av_freeWorkers != NULL),
+ false, &nap);
/*
* Sleep for a while according to schedule.
@@ -662,13 +662,12 @@ AutoVacLauncherMain(int argc, char *argv[])
current_time = GetCurrentTimestamp();
LWLockAcquire(AutovacuumLock, LW_SHARED);
- can_launch = (AutoVacuumShmem->av_freeWorkers != INVALID_OFFSET);
+ can_launch = (AutoVacuumShmem->av_freeWorkers != NULL);
- if (AutoVacuumShmem->av_startingWorker != INVALID_OFFSET)
+ if (AutoVacuumShmem->av_startingWorker != NULL)
{
int waittime;
-
- WorkerInfo worker = (WorkerInfo) MAKE_PTR(AutoVacuumShmem->av_startingWorker);
+ WorkerInfo worker = AutoVacuumShmem->av_startingWorker;
/*
* We can't launch another worker when another one is still
@@ -698,16 +697,16 @@ AutoVacLauncherMain(int argc, char *argv[])
* we assume it's the same one we saw above (so we don't
* recheck the launch time).
*/
- if (AutoVacuumShmem->av_startingWorker != INVALID_OFFSET)
+ if (AutoVacuumShmem->av_startingWorker != NULL)
{
- worker = (WorkerInfo) MAKE_PTR(AutoVacuumShmem->av_startingWorker);
+ worker = AutoVacuumShmem->av_startingWorker;
worker->wi_dboid = InvalidOid;
worker->wi_tableoid = InvalidOid;
worker->wi_proc = NULL;
worker->wi_launchtime = 0;
- worker->wi_links.next = AutoVacuumShmem->av_freeWorkers;
- AutoVacuumShmem->av_freeWorkers = MAKE_OFFSET(worker);
- AutoVacuumShmem->av_startingWorker = INVALID_OFFSET;
+ worker->wi_links.next = (SHM_QUEUE *) AutoVacuumShmem->av_freeWorkers;
+ AutoVacuumShmem->av_freeWorkers = worker;
+ AutoVacuumShmem->av_startingWorker = NULL;
elog(WARNING, "worker took too long to start; cancelled");
}
}
@@ -1061,7 +1060,7 @@ do_start_worker(void)
/* return quickly when there are no free workers */
LWLockAcquire(AutovacuumLock, LW_SHARED);
- if (AutoVacuumShmem->av_freeWorkers == INVALID_OFFSET)
+ if (AutoVacuumShmem->av_freeWorkers == NULL)
{
LWLockRelease(AutovacuumLock);
return InvalidOid;
@@ -1192,7 +1191,6 @@ do_start_worker(void)
if (avdb != NULL)
{
WorkerInfo worker;
- SHMEM_OFFSET sworker;
LWLockAcquire(AutovacuumLock, LW_EXCLUSIVE);
@@ -1201,18 +1199,17 @@ do_start_worker(void)
* really should be a free slot -- complain very loudly if there
* isn't.
*/
- sworker = AutoVacuumShmem->av_freeWorkers;
- if (sworker == INVALID_OFFSET)
+ worker = AutoVacuumShmem->av_freeWorkers;
+ if (worker == NULL)
elog(FATAL, "no free worker found");
- worker = (WorkerInfo) MAKE_PTR(sworker);
- AutoVacuumShmem->av_freeWorkers = worker->wi_links.next;
+ AutoVacuumShmem->av_freeWorkers = (WorkerInfo) worker->wi_links.next;
worker->wi_dboid = avdb->adw_datid;
worker->wi_proc = NULL;
worker->wi_launchtime = GetCurrentTimestamp();
- AutoVacuumShmem->av_startingWorker = sworker;
+ AutoVacuumShmem->av_startingWorker = worker;
LWLockRelease(AutovacuumLock);
@@ -1549,9 +1546,9 @@ AutoVacWorkerMain(int argc, char *argv[])
* launcher might have decided to remove it from the queue and start
* again.
*/
- if (AutoVacuumShmem->av_startingWorker != INVALID_OFFSET)
+ if (AutoVacuumShmem->av_startingWorker != NULL)
{
- MyWorkerInfo = (WorkerInfo) MAKE_PTR(AutoVacuumShmem->av_startingWorker);
+ MyWorkerInfo = AutoVacuumShmem->av_startingWorker;
dbid = MyWorkerInfo->wi_dboid;
MyWorkerInfo->wi_proc = MyProc;
@@ -1563,7 +1560,7 @@ AutoVacWorkerMain(int argc, char *argv[])
* remove from the "starting" pointer, so that the launcher can start
* a new worker if required
*/
- AutoVacuumShmem->av_startingWorker = INVALID_OFFSET;
+ AutoVacuumShmem->av_startingWorker = NULL;
LWLockRelease(AutovacuumLock);
on_shmem_exit(FreeWorkerInfo, 0);
@@ -1648,7 +1645,7 @@ FreeWorkerInfo(int code, Datum arg)
AutovacuumLauncherPid = AutoVacuumShmem->av_launcherpid;
SHMQueueDelete(&MyWorkerInfo->wi_links);
- MyWorkerInfo->wi_links.next = AutoVacuumShmem->av_freeWorkers;
+ MyWorkerInfo->wi_links.next = (SHM_QUEUE *) AutoVacuumShmem->av_freeWorkers;
MyWorkerInfo->wi_dboid = InvalidOid;
MyWorkerInfo->wi_tableoid = InvalidOid;
MyWorkerInfo->wi_proc = NULL;
@@ -1656,7 +1653,7 @@ FreeWorkerInfo(int code, Datum arg)
MyWorkerInfo->wi_cost_delay = 0;
MyWorkerInfo->wi_cost_limit = 0;
MyWorkerInfo->wi_cost_limit_base = 0;
- AutoVacuumShmem->av_freeWorkers = MAKE_OFFSET(MyWorkerInfo);
+ AutoVacuumShmem->av_freeWorkers = MyWorkerInfo;
/* not mine anymore */
MyWorkerInfo = NULL;
@@ -2793,9 +2790,9 @@ AutoVacuumShmemInit(void)
Assert(!found);
AutoVacuumShmem->av_launcherpid = 0;
- AutoVacuumShmem->av_freeWorkers = INVALID_OFFSET;
+ AutoVacuumShmem->av_freeWorkers = NULL;
SHMQueueInit(&AutoVacuumShmem->av_runningWorkers);
- AutoVacuumShmem->av_startingWorker = INVALID_OFFSET;
+ AutoVacuumShmem->av_startingWorker = NULL;
worker = (WorkerInfo) ((char *) AutoVacuumShmem +
MAXALIGN(sizeof(AutoVacuumShmemStruct)));
@@ -2803,8 +2800,8 @@ AutoVacuumShmemInit(void)
/* initialize the WorkerInfo free list */
for (i = 0; i < autovacuum_max_workers; i++)
{
- worker[i].wi_links.next = AutoVacuumShmem->av_freeWorkers;
- AutoVacuumShmem->av_freeWorkers = MAKE_OFFSET(&worker[i]);
+ worker[i].wi_links.next = (SHM_QUEUE *) AutoVacuumShmem->av_freeWorkers;
+ AutoVacuumShmem->av_freeWorkers = &worker[i];
}
}
else