55
55
*
56
56
*
57
57
* 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 $
59
59
*
60
60
*-------------------------------------------------------------------------
61
61
*/
@@ -244,9 +244,9 @@ typedef struct
244
244
{
245
245
sig_atomic_t av_signal [AutoVacNumSignals ];
246
246
pid_t av_launcherpid ;
247
- SHMEM_OFFSET av_freeWorkers ;
247
+ WorkerInfo av_freeWorkers ;
248
248
SHM_QUEUE av_runningWorkers ;
249
- SHMEM_OFFSET av_startingWorker ;
249
+ WorkerInfo av_startingWorker ;
250
250
} AutoVacuumShmemStruct ;
251
251
252
252
static AutoVacuumShmemStruct * AutoVacuumShmem ;
@@ -556,8 +556,8 @@ AutoVacLauncherMain(int argc, char *argv[])
556
556
if (!PostmasterIsAlive (true))
557
557
exit (1 );
558
558
559
- launcher_determine_sleep (AutoVacuumShmem -> av_freeWorkers !=
560
- INVALID_OFFSET , false, & nap );
559
+ launcher_determine_sleep (( AutoVacuumShmem -> av_freeWorkers != NULL ),
560
+ false, & nap );
561
561
562
562
/*
563
563
* Sleep for a while according to schedule.
@@ -662,13 +662,12 @@ AutoVacLauncherMain(int argc, char *argv[])
662
662
current_time = GetCurrentTimestamp ();
663
663
LWLockAcquire (AutovacuumLock , LW_SHARED );
664
664
665
- can_launch = (AutoVacuumShmem -> av_freeWorkers != INVALID_OFFSET );
665
+ can_launch = (AutoVacuumShmem -> av_freeWorkers != NULL );
666
666
667
- if (AutoVacuumShmem -> av_startingWorker != INVALID_OFFSET )
667
+ if (AutoVacuumShmem -> av_startingWorker != NULL )
668
668
{
669
669
int waittime ;
670
-
671
- WorkerInfo worker = (WorkerInfo ) MAKE_PTR (AutoVacuumShmem -> av_startingWorker );
670
+ WorkerInfo worker = AutoVacuumShmem -> av_startingWorker ;
672
671
673
672
/*
674
673
* We can't launch another worker when another one is still
@@ -698,16 +697,16 @@ AutoVacLauncherMain(int argc, char *argv[])
698
697
* we assume it's the same one we saw above (so we don't
699
698
* recheck the launch time).
700
699
*/
701
- if (AutoVacuumShmem -> av_startingWorker != INVALID_OFFSET )
700
+ if (AutoVacuumShmem -> av_startingWorker != NULL )
702
701
{
703
- worker = ( WorkerInfo ) MAKE_PTR ( AutoVacuumShmem -> av_startingWorker ) ;
702
+ worker = AutoVacuumShmem -> av_startingWorker ;
704
703
worker -> wi_dboid = InvalidOid ;
705
704
worker -> wi_tableoid = InvalidOid ;
706
705
worker -> wi_proc = NULL ;
707
706
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 ;
711
710
elog (WARNING , "worker took too long to start; cancelled" );
712
711
}
713
712
}
@@ -1061,7 +1060,7 @@ do_start_worker(void)
1061
1060
1062
1061
/* return quickly when there are no free workers */
1063
1062
LWLockAcquire (AutovacuumLock , LW_SHARED );
1064
- if (AutoVacuumShmem -> av_freeWorkers == INVALID_OFFSET )
1063
+ if (AutoVacuumShmem -> av_freeWorkers == NULL )
1065
1064
{
1066
1065
LWLockRelease (AutovacuumLock );
1067
1066
return InvalidOid ;
@@ -1192,7 +1191,6 @@ do_start_worker(void)
1192
1191
if (avdb != NULL )
1193
1192
{
1194
1193
WorkerInfo worker ;
1195
- SHMEM_OFFSET sworker ;
1196
1194
1197
1195
LWLockAcquire (AutovacuumLock , LW_EXCLUSIVE );
1198
1196
@@ -1201,18 +1199,17 @@ do_start_worker(void)
1201
1199
* really should be a free slot -- complain very loudly if there
1202
1200
* isn't.
1203
1201
*/
1204
- sworker = AutoVacuumShmem -> av_freeWorkers ;
1205
- if (sworker == INVALID_OFFSET )
1202
+ worker = AutoVacuumShmem -> av_freeWorkers ;
1203
+ if (worker == NULL )
1206
1204
elog (FATAL , "no free worker found" );
1207
1205
1208
- worker = (WorkerInfo ) MAKE_PTR (sworker );
1209
- AutoVacuumShmem -> av_freeWorkers = worker -> wi_links .next ;
1206
+ AutoVacuumShmem -> av_freeWorkers = (WorkerInfo ) worker -> wi_links .next ;
1210
1207
1211
1208
worker -> wi_dboid = avdb -> adw_datid ;
1212
1209
worker -> wi_proc = NULL ;
1213
1210
worker -> wi_launchtime = GetCurrentTimestamp ();
1214
1211
1215
- AutoVacuumShmem -> av_startingWorker = sworker ;
1212
+ AutoVacuumShmem -> av_startingWorker = worker ;
1216
1213
1217
1214
LWLockRelease (AutovacuumLock );
1218
1215
@@ -1549,9 +1546,9 @@ AutoVacWorkerMain(int argc, char *argv[])
1549
1546
* launcher might have decided to remove it from the queue and start
1550
1547
* again.
1551
1548
*/
1552
- if (AutoVacuumShmem -> av_startingWorker != INVALID_OFFSET )
1549
+ if (AutoVacuumShmem -> av_startingWorker != NULL )
1553
1550
{
1554
- MyWorkerInfo = ( WorkerInfo ) MAKE_PTR ( AutoVacuumShmem -> av_startingWorker ) ;
1551
+ MyWorkerInfo = AutoVacuumShmem -> av_startingWorker ;
1555
1552
dbid = MyWorkerInfo -> wi_dboid ;
1556
1553
MyWorkerInfo -> wi_proc = MyProc ;
1557
1554
@@ -1563,7 +1560,7 @@ AutoVacWorkerMain(int argc, char *argv[])
1563
1560
* remove from the "starting" pointer, so that the launcher can start
1564
1561
* a new worker if required
1565
1562
*/
1566
- AutoVacuumShmem -> av_startingWorker = INVALID_OFFSET ;
1563
+ AutoVacuumShmem -> av_startingWorker = NULL ;
1567
1564
LWLockRelease (AutovacuumLock );
1568
1565
1569
1566
on_shmem_exit (FreeWorkerInfo , 0 );
@@ -1648,15 +1645,15 @@ FreeWorkerInfo(int code, Datum arg)
1648
1645
AutovacuumLauncherPid = AutoVacuumShmem -> av_launcherpid ;
1649
1646
1650
1647
SHMQueueDelete (& MyWorkerInfo -> wi_links );
1651
- MyWorkerInfo -> wi_links .next = AutoVacuumShmem -> av_freeWorkers ;
1648
+ MyWorkerInfo -> wi_links .next = ( SHM_QUEUE * ) AutoVacuumShmem -> av_freeWorkers ;
1652
1649
MyWorkerInfo -> wi_dboid = InvalidOid ;
1653
1650
MyWorkerInfo -> wi_tableoid = InvalidOid ;
1654
1651
MyWorkerInfo -> wi_proc = NULL ;
1655
1652
MyWorkerInfo -> wi_launchtime = 0 ;
1656
1653
MyWorkerInfo -> wi_cost_delay = 0 ;
1657
1654
MyWorkerInfo -> wi_cost_limit = 0 ;
1658
1655
MyWorkerInfo -> wi_cost_limit_base = 0 ;
1659
- AutoVacuumShmem -> av_freeWorkers = MAKE_OFFSET ( MyWorkerInfo ) ;
1656
+ AutoVacuumShmem -> av_freeWorkers = MyWorkerInfo ;
1660
1657
/* not mine anymore */
1661
1658
MyWorkerInfo = NULL ;
1662
1659
@@ -2793,18 +2790,18 @@ AutoVacuumShmemInit(void)
2793
2790
Assert (!found );
2794
2791
2795
2792
AutoVacuumShmem -> av_launcherpid = 0 ;
2796
- AutoVacuumShmem -> av_freeWorkers = INVALID_OFFSET ;
2793
+ AutoVacuumShmem -> av_freeWorkers = NULL ;
2797
2794
SHMQueueInit (& AutoVacuumShmem -> av_runningWorkers );
2798
- AutoVacuumShmem -> av_startingWorker = INVALID_OFFSET ;
2795
+ AutoVacuumShmem -> av_startingWorker = NULL ;
2799
2796
2800
2797
worker = (WorkerInfo ) ((char * ) AutoVacuumShmem +
2801
2798
MAXALIGN (sizeof (AutoVacuumShmemStruct )));
2802
2799
2803
2800
/* initialize the WorkerInfo free list */
2804
2801
for (i = 0 ; i < autovacuum_max_workers ; i ++ )
2805
2802
{
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 ];
2808
2805
}
2809
2806
}
2810
2807
else
0 commit comments