@@ -149,27 +149,28 @@ pg_buffercache_pages(PG_FUNCTION_ARGS)
149
149
for (i = 0 ;i < NBuffers ;i ++ )
150
150
{
151
151
volatile BufferDesc * bufHdr ;
152
+ uint32 state ;
152
153
153
154
bufHdr = GetBufferDescriptor (i );
154
155
/* Lock each buffer header before inspecting. */
155
- LockBufHdr (bufHdr );
156
+ state = LockBufHdr (bufHdr );
156
157
157
158
fctx -> record [i ].bufferid = BufferDescriptorGetBuffer (bufHdr );
158
159
fctx -> record [i ].relfilenode = bufHdr -> tag .rnode .relNode ;
159
160
fctx -> record [i ].reltablespace = bufHdr -> tag .rnode .spcNode ;
160
161
fctx -> record [i ].reldatabase = bufHdr -> tag .rnode .dbNode ;
161
162
fctx -> record [i ].forknum = bufHdr -> tag .forkNum ;
162
163
fctx -> record [i ].blocknum = bufHdr -> tag .blockNum ;
163
- fctx -> record [i ].usagecount = bufHdr -> usage_count ;
164
- fctx -> record [i ].pinning_backends = bufHdr -> refcount ;
164
+ fctx -> record [i ].usagecount = BUF_STATE_GET_USAGECOUNT ( state ) ;
165
+ fctx -> record [i ].pinning_backends = BUF_STATE_GET_REFCOUNT ( state ) ;
165
166
166
- if (bufHdr -> flags & BM_DIRTY )
167
+ if (state & BM_DIRTY )
167
168
fctx -> record [i ].isdirty = true;
168
169
else
169
170
fctx -> record [i ].isdirty = false;
170
171
171
172
/* Note if the buffer is valid, and has storage created */
172
- if ((bufHdr -> flags & BM_VALID )&& (bufHdr -> flags & BM_TAG_VALID ))
173
+ if ((state & BM_VALID )&& (state & BM_TAG_VALID ))
173
174
fctx -> record [i ].isvalid = true;
174
175
else
175
176
fctx -> record [i ].isvalid = false;