@@ -898,7 +898,7 @@ BufferAlloc(SMgrRelation smgr, char relpersistence, ForkNumber forkNum,
898
898
* buffer pool, and check to see if the correct data has been loaded
899
899
* into the buffer.
900
900
*/
901
- buf = & BufferDescriptors [ buf_id ] ;
901
+ buf = GetBufferDescriptor ( buf_id ) ;
902
902
903
903
valid = PinBuffer (buf , strategy );
904
904
@@ -1105,7 +1105,7 @@ BufferAlloc(SMgrRelation smgr, char relpersistence, ForkNumber forkNum,
1105
1105
1106
1106
/* remaining code should match code at top of routine */
1107
1107
1108
- buf = & BufferDescriptors [ buf_id ] ;
1108
+ buf = GetBufferDescriptor ( buf_id ) ;
1109
1109
1110
1110
valid = PinBuffer (buf , strategy );
1111
1111
@@ -1328,7 +1328,7 @@ MarkBufferDirty(Buffer buffer)
1328
1328
return ;
1329
1329
}
1330
1330
1331
- bufHdr = & BufferDescriptors [ buffer - 1 ] ;
1331
+ bufHdr = GetBufferDescriptor ( buffer - 1 ) ;
1332
1332
1333
1333
Assert (BufferIsPinned (buffer ));
1334
1334
/* unfortunately we can't check if the lock is held exclusively */
@@ -1380,7 +1380,7 @@ ReleaseAndReadBuffer(Buffer buffer,
1380
1380
Assert (BufferIsPinned (buffer ));
1381
1381
if (BufferIsLocal (buffer ))
1382
1382
{
1383
- bufHdr = & LocalBufferDescriptors [ - buffer - 1 ] ;
1383
+ bufHdr = GetLocalBufferDescriptor ( - buffer - 1 ) ;
1384
1384
if (bufHdr -> tag .blockNum == blockNum &&
1385
1385
RelFileNodeEquals (bufHdr -> tag .rnode , relation -> rd_node ) &&
1386
1386
bufHdr -> tag .forkNum == forkNum )
@@ -1390,7 +1390,7 @@ ReleaseAndReadBuffer(Buffer buffer,
1390
1390
}
1391
1391
else
1392
1392
{
1393
- bufHdr = & BufferDescriptors [ buffer - 1 ] ;
1393
+ bufHdr = GetBufferDescriptor ( buffer - 1 ) ;
1394
1394
/* we have pin, so it's ok to examine tag without spinlock */
1395
1395
if (bufHdr -> tag .blockNum == blockNum &&
1396
1396
RelFileNodeEquals (bufHdr -> tag .rnode , relation -> rd_node ) &&
@@ -1609,7 +1609,7 @@ BufferSync(int flags)
1609
1609
num_to_write = 0 ;
1610
1610
for (buf_id = 0 ; buf_id < NBuffers ; buf_id ++ )
1611
1611
{
1612
- volatile BufferDesc * bufHdr = & BufferDescriptors [ buf_id ] ;
1612
+ volatile BufferDesc * bufHdr = GetBufferDescriptor ( buf_id ) ;
1613
1613
1614
1614
/*
1615
1615
* Header spinlock is enough to examine BM_DIRTY, see comment in
@@ -1644,7 +1644,7 @@ BufferSync(int flags)
1644
1644
num_written = 0 ;
1645
1645
while (num_to_scan -- > 0 )
1646
1646
{
1647
- volatile BufferDesc * bufHdr = & BufferDescriptors [ buf_id ] ;
1647
+ volatile BufferDesc * bufHdr = GetBufferDescriptor ( buf_id ) ;
1648
1648
1649
1649
/*
1650
1650
* We don't need to acquire the lock here, because we're only looking
@@ -2016,7 +2016,7 @@ BgBufferSync(void)
2016
2016
static int
2017
2017
SyncOneBuffer (int buf_id , bool skip_recently_used )
2018
2018
{
2019
- volatile BufferDesc * bufHdr = & BufferDescriptors [ buf_id ] ;
2019
+ volatile BufferDesc * bufHdr = GetBufferDescriptor ( buf_id ) ;
2020
2020
int result = 0 ;
2021
2021
2022
2022
ReservePrivateRefCountEntry ();
@@ -2196,13 +2196,13 @@ PrintBufferLeakWarning(Buffer buffer)
2196
2196
Assert (BufferIsValid (buffer ));
2197
2197
if (BufferIsLocal (buffer ))
2198
2198
{
2199
- buf = & LocalBufferDescriptors [ - buffer - 1 ] ;
2199
+ buf = GetLocalBufferDescriptor ( - buffer - 1 ) ;
2200
2200
loccount = LocalRefCount [- buffer - 1 ];
2201
2201
backend = MyBackendId ;
2202
2202
}
2203
2203
else
2204
2204
{
2205
- buf = & BufferDescriptors [ buffer - 1 ] ;
2205
+ buf = GetBufferDescriptor ( buffer - 1 ) ;
2206
2206
loccount = GetPrivateRefCount (buffer );
2207
2207
backend = InvalidBackendId ;
2208
2208
}
@@ -2265,9 +2265,9 @@ BufferGetBlockNumber(Buffer buffer)
2265
2265
Assert (BufferIsPinned (buffer ));
2266
2266
2267
2267
if (BufferIsLocal (buffer ))
2268
- bufHdr = & ( LocalBufferDescriptors [ - buffer - 1 ] );
2268
+ bufHdr = GetLocalBufferDescriptor ( - buffer - 1 );
2269
2269
else
2270
- bufHdr = & BufferDescriptors [ buffer - 1 ] ;
2270
+ bufHdr = GetBufferDescriptor ( buffer - 1 ) ;
2271
2271
2272
2272
/* pinned, so OK to read tag without spinlock */
2273
2273
return bufHdr -> tag .blockNum ;
@@ -2288,9 +2288,9 @@ BufferGetTag(Buffer buffer, RelFileNode *rnode, ForkNumber *forknum,
2288
2288
Assert (BufferIsPinned (buffer ));
2289
2289
2290
2290
if (BufferIsLocal (buffer ))
2291
- bufHdr = & ( LocalBufferDescriptors [ - buffer - 1 ] );
2291
+ bufHdr = GetLocalBufferDescriptor ( - buffer - 1 );
2292
2292
else
2293
- bufHdr = & BufferDescriptors [ buffer - 1 ] ;
2293
+ bufHdr = GetBufferDescriptor ( buffer - 1 ) ;
2294
2294
2295
2295
/* pinned, so OK to read tag without spinlock */
2296
2296
* rnode = bufHdr -> tag .rnode ;
@@ -2473,7 +2473,7 @@ BufferIsPermanent(Buffer buffer)
2473
2473
* changing an aligned 2-byte BufFlags value is atomic, so we'll read the
2474
2474
* old value or the new value, but not random garbage.
2475
2475
*/
2476
- bufHdr = & BufferDescriptors [ buffer - 1 ] ;
2476
+ bufHdr = GetBufferDescriptor ( buffer - 1 ) ;
2477
2477
return (bufHdr -> flags & BM_PERMANENT ) != 0 ;
2478
2478
}
2479
2479
@@ -2486,7 +2486,7 @@ BufferIsPermanent(Buffer buffer)
2486
2486
XLogRecPtr
2487
2487
BufferGetLSNAtomic (Buffer buffer )
2488
2488
{
2489
- volatile BufferDesc * bufHdr = & BufferDescriptors [ buffer - 1 ] ;
2489
+ volatile BufferDesc * bufHdr = GetBufferDescriptor ( buffer - 1 ) ;
2490
2490
char * page = BufferGetPage (buffer );
2491
2491
XLogRecPtr lsn ;
2492
2492
@@ -2549,7 +2549,7 @@ DropRelFileNodeBuffers(RelFileNodeBackend rnode, ForkNumber forkNum,
2549
2549
2550
2550
for (i = 0 ; i < NBuffers ; i ++ )
2551
2551
{
2552
- volatile BufferDesc * bufHdr = & BufferDescriptors [ i ] ;
2552
+ volatile BufferDesc * bufHdr = GetBufferDescriptor ( i ) ;
2553
2553
2554
2554
/*
2555
2555
* We can make this a tad faster by prechecking the buffer tag before
@@ -2639,7 +2639,7 @@ DropRelFileNodesAllBuffers(RelFileNodeBackend *rnodes, int nnodes)
2639
2639
for (i = 0 ; i < NBuffers ; i ++ )
2640
2640
{
2641
2641
RelFileNode * rnode = NULL ;
2642
- volatile BufferDesc * bufHdr = & BufferDescriptors [ i ] ;
2642
+ volatile BufferDesc * bufHdr = GetBufferDescriptor ( i ) ;
2643
2643
2644
2644
/*
2645
2645
* As in DropRelFileNodeBuffers, an unlocked precheck should be safe
@@ -2703,7 +2703,7 @@ DropDatabaseBuffers(Oid dbid)
2703
2703
2704
2704
for (i = 0 ; i < NBuffers ; i ++ )
2705
2705
{
2706
- volatile BufferDesc * bufHdr = & BufferDescriptors [ i ] ;
2706
+ volatile BufferDesc * bufHdr = GetBufferDescriptor ( i ) ;
2707
2707
2708
2708
/*
2709
2709
* As in DropRelFileNodeBuffers, an unlocked precheck should be safe
@@ -2732,10 +2732,11 @@ void
2732
2732
PrintBufferDescs (void )
2733
2733
{
2734
2734
int i ;
2735
- volatile BufferDesc * buf = BufferDescriptors ;
2736
2735
2737
- for (i = 0 ; i < NBuffers ; ++ i , ++ buf )
2736
+ for (i = 0 ; i < NBuffers ; ++ i )
2738
2737
{
2738
+ volatile BufferDesc * buf = GetBufferDescriptor (i );
2739
+
2739
2740
/* theoretically we should lock the bufhdr here */
2740
2741
elog (LOG ,
2741
2742
"[%02d] (freeNext=%d, rel=%s, "
@@ -2753,10 +2754,11 @@ void
2753
2754
PrintPinnedBufs (void )
2754
2755
{
2755
2756
int i ;
2756
- volatile BufferDesc * buf = BufferDescriptors ;
2757
2757
2758
- for (i = 0 ; i < NBuffers ; ++ i , ++ buf )
2758
+ for (i = 0 ; i < NBuffers ; ++ i )
2759
2759
{
2760
+ volatile BufferDesc * buf = GetBufferDescriptor (i );
2761
+
2760
2762
if (GetPrivateRefCount (i + 1 ) > 0 )
2761
2763
{
2762
2764
/* theoretically we should lock the bufhdr here */
@@ -2804,7 +2806,7 @@ FlushRelationBuffers(Relation rel)
2804
2806
{
2805
2807
for (i = 0 ; i < NLocBuffer ; i ++ )
2806
2808
{
2807
- bufHdr = & LocalBufferDescriptors [ i ] ;
2809
+ bufHdr = GetLocalBufferDescriptor ( i ) ;
2808
2810
if (RelFileNodeEquals (bufHdr -> tag .rnode , rel -> rd_node ) &&
2809
2811
(bufHdr -> flags & BM_VALID ) && (bufHdr -> flags & BM_DIRTY ))
2810
2812
{
@@ -2842,7 +2844,7 @@ FlushRelationBuffers(Relation rel)
2842
2844
2843
2845
for (i = 0 ; i < NBuffers ; i ++ )
2844
2846
{
2845
- bufHdr = & BufferDescriptors [ i ] ;
2847
+ bufHdr = GetBufferDescriptor ( i ) ;
2846
2848
2847
2849
/*
2848
2850
* As in DropRelFileNodeBuffers, an unlocked precheck should be safe
@@ -2894,7 +2896,7 @@ FlushDatabaseBuffers(Oid dbid)
2894
2896
2895
2897
for (i = 0 ; i < NBuffers ; i ++ )
2896
2898
{
2897
- bufHdr = & BufferDescriptors [ i ] ;
2899
+ bufHdr = GetBufferDescriptor ( i ) ;
2898
2900
2899
2901
/*
2900
2902
* As in DropRelFileNodeBuffers, an unlocked precheck should be safe
@@ -2938,7 +2940,7 @@ ReleaseBuffer(Buffer buffer)
2938
2940
return ;
2939
2941
}
2940
2942
2941
- UnpinBuffer (& BufferDescriptors [ buffer - 1 ] , true);
2943
+ UnpinBuffer (GetBufferDescriptor ( buffer - 1 ) , true);
2942
2944
}
2943
2945
2944
2946
/*
@@ -3007,7 +3009,7 @@ MarkBufferDirtyHint(Buffer buffer, bool buffer_std)
3007
3009
return ;
3008
3010
}
3009
3011
3010
- bufHdr = & BufferDescriptors [ buffer - 1 ] ;
3012
+ bufHdr = GetBufferDescriptor ( buffer - 1 ) ;
3011
3013
3012
3014
Assert (GetPrivateRefCount (buffer ) > 0 );
3013
3015
/* here, either share or exclusive lock is OK */
@@ -3161,7 +3163,7 @@ LockBuffer(Buffer buffer, int mode)
3161
3163
if (BufferIsLocal (buffer ))
3162
3164
return ; /* local buffers need no lock */
3163
3165
3164
- buf = & ( BufferDescriptors [ buffer - 1 ] );
3166
+ buf = GetBufferDescriptor ( buffer - 1 );
3165
3167
3166
3168
if (mode == BUFFER_LOCK_UNLOCK )
3167
3169
LWLockRelease (buf -> content_lock );
@@ -3187,7 +3189,7 @@ ConditionalLockBuffer(Buffer buffer)
3187
3189
if (BufferIsLocal (buffer ))
3188
3190
return true; /* act as though we got it */
3189
3191
3190
- buf = & ( BufferDescriptors [ buffer - 1 ] );
3192
+ buf = GetBufferDescriptor ( buffer - 1 );
3191
3193
3192
3194
return LWLockConditionalAcquire (buf -> content_lock , LW_EXCLUSIVE );
3193
3195
}
@@ -3231,7 +3233,7 @@ LockBufferForCleanup(Buffer buffer)
3231
3233
elog (ERROR , "incorrect local pin count: %d" ,
3232
3234
GetPrivateRefCount (buffer ));
3233
3235
3234
- bufHdr = & BufferDescriptors [ buffer - 1 ] ;
3236
+ bufHdr = GetBufferDescriptor ( buffer - 1 ) ;
3235
3237
3236
3238
for (;;)
3237
3239
{
@@ -3332,7 +3334,7 @@ ConditionalLockBufferForCleanup(Buffer buffer)
3332
3334
if (!ConditionalLockBuffer (buffer ))
3333
3335
return false;
3334
3336
3335
- bufHdr = & BufferDescriptors [ buffer - 1 ] ;
3337
+ bufHdr = GetBufferDescriptor ( buffer - 1 ) ;
3336
3338
LockBufHdr (bufHdr );
3337
3339
Assert (bufHdr -> refcount > 0 );
3338
3340
if (bufHdr -> refcount == 1 )
0 commit comments