/* * WriteLocalBuffer - * writes out a local buffer (actually, just marks it dirty) */ void WriteLocalBuffer(Buffer buffer, bool release) { int bufid; BufferDesc *bufHdr; Assert(BufferIsLocal(buffer)); #ifdef LBDEBUG fprintf(stderr, "LB WRITE %d\n", buffer); #endif bufid = -(buffer + 1); Assert(LocalRefCount[bufid] > 0); bufHdr = &LocalBufferDescriptors[bufid]; bufHdr->flags |= BM_DIRTY; if (release) { LocalRefCount[bufid]--; if (LocalRefCount[bufid] == 0 && bufHdr->usage_count < BM_MAX_USAGE_COUNT) bufHdr->usage_count++; ResourceOwnerForgetBuffer(CurrentResourceOwner, buffer); } }
/* * MarkLocalBufferDirty - * mark a local buffer dirty */ void MarkLocalBufferDirty(Buffer buffer) { int bufid; BufferDesc *bufHdr; uint32 buf_state; Assert(BufferIsLocal(buffer)); #ifdef LBDEBUG fprintf(stderr, "LB DIRTY %d\n", buffer); #endif bufid = -(buffer + 1); Assert(LocalRefCount[bufid] > 0); bufHdr = GetLocalBufferDescriptor(bufid); buf_state = pg_atomic_read_u32(&bufHdr->state); if (!(buf_state & BM_DIRTY)) pgBufferUsage.local_blks_dirtied++; buf_state |= BM_DIRTY; pg_atomic_write_u32(&bufHdr->state, buf_state); }
/* * MarkLocalBufferDirty - * mark a local buffer dirty */ void MarkLocalBufferDirty(Buffer buffer) { int bufid; BufferDesc *bufHdr; Assert(BufferIsLocal(buffer)); #ifdef LBDEBUG fprintf(stderr, "LB DIRTY %d\n", buffer); #endif bufid = -(buffer + 1); Assert(LocalRefCount[bufid] > 0); bufHdr = &LocalBufferDescriptors[bufid]; bufHdr->flags |= BM_DIRTY; }