5555 *
5656 *
5757 * IDENTIFICATION
58- * $PostgreSQL: pgsql/src/backend/postmaster/autovacuum.c,v 1.84 2008/08/13 00:07:50 alvherre Exp $
58+ * $PostgreSQL: pgsql/src/backend/postmaster/autovacuum.c,v 1.85 2008/11/02 21:24:52 tgl Exp $
5959 *
6060 *-------------------------------------------------------------------------
6161 */
@@ -244,9 +244,9 @@ typedef struct
244244{
245245 sig_atomic_t av_signal [AutoVacNumSignals ];
246246 pid_t av_launcherpid ;
247- SHMEM_OFFSET av_freeWorkers ;
247+ WorkerInfo av_freeWorkers ;
248248 SHM_QUEUE av_runningWorkers ;
249- SHMEM_OFFSET av_startingWorker ;
249+ WorkerInfo av_startingWorker ;
250250} AutoVacuumShmemStruct ;
251251
252252static AutoVacuumShmemStruct * AutoVacuumShmem ;
@@ -556,8 +556,8 @@ AutoVacLauncherMain(int argc, char *argv[])
556556 if (!PostmasterIsAlive (true))
557557 exit (1 );
558558
559- launcher_determine_sleep (AutoVacuumShmem -> av_freeWorkers !=
560- INVALID_OFFSET , false, & nap );
559+ launcher_determine_sleep (( AutoVacuumShmem -> av_freeWorkers != NULL ),
560+ false, & nap );
561561
562562 /*
563563 * Sleep for a while according to schedule.
@@ -662,13 +662,12 @@ AutoVacLauncherMain(int argc, char *argv[])
662662 current_time = GetCurrentTimestamp ();
663663 LWLockAcquire (AutovacuumLock , LW_SHARED );
664664
665- can_launch = (AutoVacuumShmem -> av_freeWorkers != INVALID_OFFSET );
665+ can_launch = (AutoVacuumShmem -> av_freeWorkers != NULL );
666666
667- if (AutoVacuumShmem -> av_startingWorker != INVALID_OFFSET )
667+ if (AutoVacuumShmem -> av_startingWorker != NULL )
668668 {
669669 int waittime ;
670-
671- WorkerInfo worker = (WorkerInfo ) MAKE_PTR (AutoVacuumShmem -> av_startingWorker );
670+ WorkerInfo worker = AutoVacuumShmem -> av_startingWorker ;
672671
673672 /*
674673 * We can't launch another worker when another one is still
@@ -698,16 +697,16 @@ AutoVac
A3DB
LauncherMain(int argc, char *argv[])
698697 * we assume it's the same one we saw above (so we don't
699698 * recheck the launch time).
700699 */
701- if (AutoVacuumShmem -> av_startingWorker != INVALID_OFFSET )
700+ if (AutoVacuumShmem -> av_startingWorker != NULL )
702701 {
703- worker = ( WorkerInfo ) MAKE_PTR ( AutoVacuumShmem -> av_startingWorker ) ;
702+ worker = AutoVacuumShmem -> av_startingWorker ;
704703 worker -> wi_dboid = InvalidOid ;
705704 worker -> wi_tableoid = InvalidOid ;
706705 worker -> wi_proc = NULL ;
707706 worker -> wi_launchtime = 0 ;
708- worker -> wi_links .next = AutoVacuumShmem -> av_freeWorkers ;
709- AutoVacuumShmem -> av_freeWorkers = MAKE_OFFSET ( worker ) ;
710- AutoVacuumShmem -> av_startingWorker = INVALID_OFFSET ;
707+ worker -> wi_links .next = ( SHM_QUEUE * ) AutoVacuumShmem -> av_freeWorkers ;
708+ AutoVacuumShmem -> av_freeWorkers = worker ;
709+ AutoVacuumShmem -> av_startingWorker = NULL ;
711710 elog (WARNING , "worker took too long to start; cancelled" );
712711 }
713712 }
@@ -1061,7 +1060,7 @@ do_start_worker(void)
10611060
10621061 /* return quickly when there are no free workers */
10631062 LWLockAcquire (AutovacuumLock , LW_SHARED );
1064- if (AutoVacuumShmem -> av_freeWorkers == INVALID_OFFSET )
1063+ if (AutoVacuumShmem -> av_freeWorkers == NULL )
10651064 {
10661065 LWLockRelease (AutovacuumLock );
10671066 return InvalidOid ;
@@ -1192,7 +1191,6 @@ do_start_worker(void)
11921191 if (avdb != NULL )
11931192 {
11941193 WorkerInfo worker ;
1195- SHMEM_OFFSET sworker ;
11961194
11971195 LWLockAcquire (AutovacuumLock , LW_EXCLUSIVE );
11981196
@@ -1201,18 +1199,17 @@ do_start_worker(void)
12011199 * really should be a free slot -- complain very loudly if there
12021200 * isn't.
12031201 */
1204- sworker = AutoVacuumShmem -> av_freeWorkers ;
1205- if (sworker == INVALID_OFFSET )
1202+ worker = AutoVacuumShmem -> av_freeWorkers ;
1203+ if (worker == NULL )
12061204 elog (FATAL , "no free worker found" );
12071205
1208- worker = (WorkerInfo ) MAKE_PTR (sworker );
1209- AutoVacuumShmem -> av_freeWorkers = worker -> wi_links .next ;
1206+ AutoVacuumShmem -> av_freeWorkers = (WorkerInfo ) worker -> wi_links .next ;
12101207
12111208 worker -> wi_dboid = avdb -> adw_datid ;
12121209 worker -> wi_proc = NULL ;
12131210 worker -> wi_launchtime = GetCurrentTimestamp ();
12141211
1215- AutoVacuumShmem -> av_startingWorker = sworker ;
1212+ AutoVacuumShmem -> av_startingWorker = worker ;
12161213
12171214 LWLockRelease (AutovacuumLock );
12181215
@@ -1549,9 +1546,9 @@ AutoVacWorkerMain(int argc, char *argv[])
15491546 * launcher might have decided to remove it from the queue and start
15501547 * again.
15511548 */
1552- if (AutoVacuumShmem -> av_startingWorker != INVALID_OFFSET )
1549+ if (AutoVacuumShmem -> av_startingWorker != NULL )
15531550 {
1554- MyWorkerInfo = ( WorkerInfo ) MAKE_PTR ( AutoVacuumShmem -> av_startingWorker ) ;
1551+ MyWorkerInfo = AutoVacuumShmem -> av_startingWorker ;
15551552 dbid = MyWorkerInfo -> wi_dboid ;
15561553 MyWorkerInfo -> wi_proc = MyProc ;
15571554
@@ -1563,7 +1560,7 @@ AutoVacWorkerMain(int argc, char *argv[])
D30D
15631560 * remove from the "starting" pointer, so that the launcher can start
15641561 * a new worker if required
15651562 */
1566- AutoVacuumShmem -> av_startingWorker = INVALID_OFFSET ;
1563+ AutoVacuumShmem -> av_startingWorker = NULL ;
15671564 LWLockRelease (AutovacuumLock );
15681565
15691566 on_shmem_exit (FreeWorkerInfo , 0 );
@@ -1648,15 +1645,15 @@ FreeWorkerInfo(int code, Datum arg)
16481645 AutovacuumLauncherPid = AutoVacuumShmem -> av_launcherpid ;
16491646
16501647 SHMQueueDelete (& MyWorkerInfo -> wi_links );
1651- MyWorkerInfo -> wi_links .next = AutoVacuumShmem -> av_freeWorkers ;
1648+ MyWorkerInfo -> wi_links .next = ( SHM_QUEUE * ) AutoVacuumShmem -> av_freeWorkers ;
16521649 MyWorkerInfo -> wi_dboid = InvalidOid ;
16531650 MyWorkerInfo -> wi_tableoid = InvalidOid ;
16541651 MyWorkerInfo -> wi_proc = NULL ;
16551652 MyWorkerInfo -> wi_launchtime = 0 ;
16561653 MyWorkerInfo -> wi_cost_delay = 0 ;
16571654 MyWorkerInfo -> wi_cost_limit = 0 ;
16581655 MyWorkerInfo -> wi_cost_limit_base = 0 ;
1659- AutoVacuumShmem -> av_freeWorkers = MAKE_OFFSET ( MyWorkerInfo ) ;
1656+ AutoVacuumShmem -> av_freeWorkers = MyWorkerInfo ;
16601657 /* not mine anymore */
16611658 MyWorkerInfo = NULL ;
16621659
@@ -2793,18 +2790,18 @@ AutoVacuumShmemInit(void)
27932790 Assert (!found );
27942791
27952792 AutoVacuumShmem -> av_launcherpid = 0 ;
2796- AutoVacuumShmem -> av_freeWorkers = INVALID_OFFSET ;
2793+ AutoVacuumShmem -> av_freeWorkers = NULL ;
27972794 SHMQueueInit (& AutoVacuumShmem -> av_runningWorkers );
2798- AutoVacuumShmem -> av_startingWorker = INVALID_OFFSET ;
2795+ AutoVacuumShmem -> av_startingWorker = NULL ;
27992796
28002797 worker = (WorkerInfo ) ((char * ) AutoVacuumShmem +
28012798 MAXALIGN (sizeof (AutoVacuumShmemStruct )));
28022799
28032800 /* initialize the WorkerInfo free list */
28042801 for (i = 0 ; i < autovacuum_max_workers ; i ++ )
28052802 {
2806- worker [i ].wi_links .next = AutoVacuumShmem -> av_freeWorkers ;
2807- AutoVacuumShmem -> av_freeWorkers = MAKE_OFFSET ( & worker [i ]) ;
2803+ worker [i ].wi_links .next = ( SHM_QUEUE * ) AutoVacuumShmem -> av_freeWorkers ;
2804+ AutoVacuumShmem -> av_freeWorkers = & worker [i ];
28082805 }
28092806 }
28102807 else
0 commit comments