summaryrefslogtreecommitdiffstats
path: root/tsan-suppressions.txt
diff options
context:
space:
mode:
authorTor Egge <Tor.Egge@yahooinc.com>2022-03-24 13:15:18 +0100
committerTor Egge <Tor.Egge@yahooinc.com>2022-03-24 13:15:18 +0100
commitf34a17fb355d7eb570f298fd073ddb089552b608 (patch)
tree7471acddad935669ba5613bc61f7301c89c55964 /tsan-suppressions.txt
parent7d8808a32d70cbf17a45059b4541e350307c01dd (diff)
Add comment to tsan-suppressions.txt describing why we suppress
deadlock warning related to attribute context lock and enumerated attribute enum lock.
Diffstat (limited to 'tsan-suppressions.txt')
-rw-r--r--tsan-suppressions.txt18
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