@@ -149,27 +149,28 @@ pg_buffercache_pages(PG_FUNCTION_ARGS)
149149for (i = 0 ;i < NBuffers ;i ++ )
150150{
151151volatile BufferDesc * bufHdr ;
152+ uint32 state ;
152153
153154bufHdr = GetBufferDescriptor (i );
154155/* Lock each buffer header before inspecting. */
155- LockBufHdr (bufHdr );
156+ state = LockBufHdr (bufHdr );
156157
157158fctx -> record [i ].bufferid = BufferDescriptorGetBuffer (bufHdr );
158159fctx -> record [i ].relfilenode = bufHdr -> tag .rnode .relNode ;
159160fctx -> record [i ].reltablespace = bufHdr -> tag .rnode .spcNode ;
160161fctx -> record [i ].reldatabase = bufHdr -> tag .rnode .dbNode ;
161162fctx -> record [i ].forknum = bufHdr -> tag .forkNum ;
162163fctx -> 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 ) ;
165166
166- if (bufHdr -> flags & BM_DIRTY )
167+ if (state & BM_DIRTY )
167168fctx -> record [i ].isdirty = true;
168169else
169170fctx -> record [i ].isdirty = false;
170171
171172/* 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 ))
173174fctx -> record [i ].isvalid = true;
174175else
175176fctx -> record [i ].isvalid = false;