summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTom Lane2007-10-22 17:29:35 +0000
committerTom Lane2007-10-22 17:29:35 +0000
commita3a714108b46fc5169f384abaa547cec44b7e070 (patch)
tree8dcb0fe8e1dab4621cdf1b223a6bed5692b8e8f2
parent093e149761e95d6b594c158e1e9e64125875c764 (diff)
Be careful to get share lock on each page before computing its free space.
ITAGAKI Takahiro
-rw-r--r--contrib/pgstattuple/pgstattuple.c6
1 files changed, 3 insertions, 3 deletions
diff --git a/contrib/pgstattuple/pgstattuple.c b/contrib/pgstattuple/pgstattuple.c
index 83546d57c3..176f517c52 100644
--- a/contrib/pgstattuple/pgstattuple.c
+++ b/contrib/pgstattuple/pgstattuple.c
@@ -291,8 +291,7 @@ pgstat_heap(Relation rel, FunctionCallInfo fcinfo)
buffer = ReadBuffer(rel, block);
LockBuffer(buffer, BUFFER_LOCK_SHARE);
stat.free_space += PageGetHeapFreeSpace((Page) BufferGetPage(buffer));
- LockBuffer(buffer, BUFFER_LOCK_UNLOCK);
- ReleaseBuffer(buffer);
+ UnlockReleaseBuffer(buffer);
block++;
}
}
@@ -301,8 +300,9 @@ pgstat_heap(Relation rel, FunctionCallInfo fcinfo)
while (block < nblocks)
{
buffer = ReadBuffer(rel, block);
+ LockBuffer(buffer, BUFFER_LOCK_SHARE);
stat.free_space += PageGetHeapFreeSpace((Page) BufferGetPage(buffer));
- ReleaseBuffer(buffer);
+ UnlockReleaseBuffer(buffer);
block++;
}