mirror of
https://github.com/postgres/postgres.git
synced 2025-10-15 05:46:52 +03:00
injection_points: Add proper locking when reporting fixed-variable stats
Contrary to its siblings for the archiver, the bgwriter and the
checkpointer stats, pgstat_report_inj_fixed() can be called
concurrently. This was causing an assertion failure, while messing up
with the stats.
This code is aimed at being a template for extension developers, so it
is not a critical issue, but let's be correct. This module has also
been useful for some benchmarking, at least for me, and that was how I
have discovered this issue.
Oversight in f68cd847fa
.
Author: Michael Paquier <michael@paquier.xyz>
Reviewed-by: Bertrand Drouvot <bertranddrouvot.pg@gmail.com>
Reviewed-by: Chao Li <li.evan.chao@gmail.com>
Reviewed-by: wenhui qiu <qiuwenhuifx@gmail.com>
Discussion: https://postgr.es/m/aNnXbAXHPFUWPIz2@paquier.xyz
Backpatch-through: 18
This commit is contained in:
@@ -152,6 +152,8 @@ pgstat_report_inj_fixed(uint32 numattach,
|
||||
|
||||
stats_shmem = pgstat_get_custom_shmem_data(PGSTAT_KIND_INJECTION_FIXED);
|
||||
|
||||
LWLockAcquire(&stats_shmem->lock, LW_EXCLUSIVE);
|
||||
|
||||
pgstat_begin_changecount_write(&stats_shmem->changecount);
|
||||
stats_shmem->stats.numattach += numattach;
|
||||
stats_shmem->stats.numdetach += numdetach;
|
||||
@@ -159,6 +161,8 @@ pgstat_report_inj_fixed(uint32 numattach,
|
||||
stats_shmem->stats.numcached += numcached;
|
||||
stats_shmem->stats.numloaded += numloaded;
|
||||
pgstat_end_changecount_write(&stats_shmem->changecount);
|
||||
|
||||
LWLockRelease(&stats_shmem->lock);
|
||||
}
|
||||
|
||||
/*
|
||||
|
Reference in New Issue
Block a user