pgsql: Fix locking while setting flags in MySerializableXact.

Поиск
Список
Период
Сортировка
От Heikki Linnakangas
Тема pgsql: Fix locking while setting flags in MySerializableXact.
Дата
Msg-id E1QV8WD-0006y2-Ug@gemulon.postgresql.org
обсуждение исходный текст
Список pgsql-committers
Fix locking while setting flags in MySerializableXact.

Even if a flag is modified only by the backend owning the transaction, it's
not safe to modify it without a lock. Another backend might be setting or
clearing a different flag in the flags field concurrently, and that
operation might be lost because setting or clearing a bit in a word is not
atomic.

Make did-write flag a simple backend-private boolean variable, because it
was only set or tested in the owning backend (except when committing a
prepared transaction, but it's not worthwhile to optimize for the case of a
read-only prepared transaction). This also eliminates the need to add
locking where that flag is set.

Also, set the did-write flag when doing DDL operations like DROP TABLE or
TRUNCATE -- that was missed earlier.

Branch
------
master

Details
-------
http://git.postgresql.org/pg/commitdiff/cb2d158c5808c72cbd12cbffe0b7f5dbe830760b

Modified Files
--------------
src/backend/storage/lmgr/predicate.c      |   85 ++++++++++++++++++-----------
src/include/storage/predicate_internals.h |   15 +++---
2 files changed, 61 insertions(+), 39 deletions(-)


В списке pgsql-committers по дате отправления:

Предыдущее
От: Alvaro Herrera
Дата:
Сообщение: pgsql: Add comment about pg_ctl stop
Следующее
От: Tom Lane
Дата:
Сообщение: pgsql: Work around gcc 4.6.0 bug that breaks WAL replay.