diff options
| author | Masahiko Sawada <msawada@postgresql.org> | 2025-11-04 15:47:25 -0800 |
|---|---|---|
| committer | Masahiko Sawada <msawada@postgresql.org> | 2025-11-04 15:47:25 -0800 |
| commit | 8ae0f6a0c3da4b1568b753906eb8ea34d41da251 (patch) | |
| tree | 877a2dd9e0d201e8ba6f32772c0ff79f72bca96d /src/backend/storage/buffer/bufmgr.c | |
| parent | fdda78e361f136ec2b8de579b366c1e66bba1199 (diff) | |
Add CHECK_FOR_INTERRUPTS in Evict{Rel,All}UnpinnedBuffers.
This commit adds CHECK_FOR_INTERRUPTS to the shared buffer iteration
loops in EvictRelUnpinnedBuffers and EvictAllUnpinnedBuffers. These
functions, used by pg_buffercache's pg_buffercache_evict_relation and
pg_buffercache_evict_all, can now be interrupted during long-running
operations.
Backpatch to version 18, where these functions and their corresponding
pg_buffercache functions were introduced.
Author: Yuhang Qiu <iamqyh@gmail.com>
Discussion: https://postgr.es/m/8DC280D4-94A2-4E7B-BAB9-C345891D0B78%40gmail.com
Backpatch-through: 18
Diffstat (limited to 'src/backend/storage/buffer/bufmgr.c')
| -rw-r--r-- | src/backend/storage/buffer/bufmgr.c | 4 |
1 files changed, 4 insertions, 0 deletions
diff --git a/src/backend/storage/buffer/bufmgr.c b/src/backend/storage/buffer/bufmgr.c index e8544acb784..00719c7aea2 100644 --- a/src/backend/storage/buffer/bufmgr.c +++ b/src/backend/storage/buffer/bufmgr.c @@ -6685,6 +6685,8 @@ EvictAllUnpinnedBuffers(int32 *buffers_evicted, int32 *buffers_flushed, uint32 buf_state; bool buffer_flushed; + CHECK_FOR_INTERRUPTS(); + buf_state = pg_atomic_read_u32(&desc->state); if (!(buf_state & BM_VALID)) continue; @@ -6735,6 +6737,8 @@ EvictRelUnpinnedBuffers(Relation rel, int32 *buffers_evicted, uint32 buf_state = pg_atomic_read_u32(&(desc->state)); bool buffer_flushed; + CHECK_FOR_INTERRUPTS(); + /* An unlocked precheck should be safe and saves some cycles. */ if ((buf_state & BM_VALID) == 0 || !BufTagMatchesRelFileLocator(&desc->tag, &rel->rd_locator)) |
