diff options
author | Geir Storli <geirst@yahooinc.com> | 2022-03-24 13:52:51 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-03-24 13:52:51 +0100 |
commit | d816728be160c4632da498cce6cc333ec82b59c5 (patch) | |
tree | 04ff62dad7f33b2870fb0115e2f957340d557aa3 | |
parent | 0e7adbb148dc249bd410dd04d88cfb0758b94b97 (diff) | |
parent | f34a17fb355d7eb570f298fd073ddb089552b608 (diff) |
Merge pull request #21800 from vespa-engine/toregge/add-tsan-suppression-comment-for-attribute-context-deadlock-warning-suppression
Add comment to tsan-suppressions.txt describing why we suppress
-rw-r--r-- | tsan-suppressions.txt | 18 |
1 files changed, 18 insertions, 0 deletions
diff --git a/tsan-suppressions.txt b/tsan-suppressions.txt index 23b63b8945c..7ea210ced93 100644 --- a/tsan-suppressions.txt +++ b/tsan-suppressions.txt @@ -5,6 +5,24 @@ deadlock:storage::MergeThrottler::onFlush +# We hold the attribute context lock when getting a shared lock on +# enumerated attributes to prevent references to enumerated values +# from being changed due to compaction while performing grouping on +# the attribute. Thus we have an apparent lock order cycle between the +# attribute context lock and the shared lock on each attribute. +# +# We use an interlock to ensure that only one thread at a time tries +# to get an exclusive lock on an enumerated attribute (before +# compacting the enum store). Without that interlock, we could get a +# deadlock with +# +# Thread A having shared lock on attribute E and trying to get a shared lock +# on attribute F, blocked by thread D. +# Thread B having shared lock on attribute F and trying to get a shared lock +# on attribute E, blocked by thread C. +# Thread C trying to get exclusive lock on attribute E, blocked by thread A +# Thread D trying to get exclusive lock on attribute F, blocked by thread B + deadlock:search::AttributeContext::getAttribute deadlock:search::AttributeContext::getAttributeStableEnum deadlock:proton::ImportedAttributesContext::getAttribute |