diff options
author | Robert Haas <rhaas@postgresql.org> | 2017-12-21 09:09:04 -0500 |
---|---|---|
committer | Robert Haas <rhaas@postgresql.org> | 2017-12-21 09:24:30 -0500 |
commit | 59d1e2b95a826869e2789ffe01e9e552148eefde (patch) | |
tree | 998fb89ee346fa0ba8c56be42daa65da21e0eb2a /src | |
parent | 1804284042e659e7d16904e7bbb0ad546394b6a3 (diff) | |
download | postgresql-59d1e2b95a826869e2789ffe01e9e552148eefde.tar.gz postgresql-59d1e2b95a826869e2789ffe01e9e552148eefde.zip |
Cancel CV sleep during subtransaction abort.
Generally, error recovery paths that need to do things like
LWLockReleaseAll and pgstat_report_wait_end also need to call
ConditionVariableCancelSleep, but AbortSubTransaction was missed.
Since subtransaction abort might destroy up the DSM segment that
contains the ConditionVariable stored in cv_sleep_target, this
can result in a crash for anything using condition variables.
Reported and diagnosed by Andres Freund.
Discussion: http://postgr.es/m/20171221110048.rxk6464azzl5t2fi@alap3.anarazel.de
Diffstat (limited to 'src')
-rw-r--r-- | src/backend/access/transam/xact.c | 3 |
1 files changed, 3 insertions, 0 deletions
diff --git a/src/backend/access/transam/xact.c b/src/backend/access/transam/xact.c index e93d740b210..d430e662e67 100644 --- a/src/backend/access/transam/xact.c +++ b/src/backend/access/transam/xact.c @@ -4717,6 +4717,9 @@ AbortSubTransaction(void) /* Reset WAL record construction state */ XLogResetInsertion(); + /* Cancel condition variable sleep */ + ConditionVariableCancelSleep(); + /* * Also clean up any open wait for lock, since the lock manager will choke * if we try to wait for another lock before doing this. |