<htmlxmlns="http://www.w3.org/1999/xhtml"><head><title>StarvationDomain (infer.Concurrency.StarvationDomain)</title><linkrel="stylesheet"href="../../../odoc.css"/><metacharset="utf-8"/><metaname="generator"content="odoc 1.5.2"/><metaname="viewport"content="width=device-width,initial-scale=1.0"/><scriptsrc="../../../highlight.pack.js"></script><script>hljs.initHighlightingOnLoad();</script></head><body><divclass="content"><header><nav><ahref="../index.html">Up</a>–<ahref="../../index.html">infer</a>»<ahref="../index.html">Concurrency</a>» StarvationDomain</nav><h1>Module <code>Concurrency.StarvationDomain</code></h1></header><divclass="spec module"id="module-F"><ahref="#module-F"class="anchor"></a><code><spanclass="keyword">module</span> F = Stdlib.Format</code></div><dl><dtclass="spec module"id="module-ThreadDomain"><ahref="#module-ThreadDomain"class="anchor"></a><code><spanclass="keyword">module</span><ahref="ThreadDomain/index.html">ThreadDomain</a> : <spanclass="keyword">sig</span> ... <spanclass="keyword">end</span></code></dt><dd><p>Domain for thread-type. The main goals are</p></dd></dl><dl><dtclass="spec module"id="module-Lock"><ahref="#module-Lock"class="anchor"></a><code><spanclass="keyword">module</span><ahref="Lock/index.html">Lock</a> : <spanclass="keyword">sig</span> ... <spanclass="keyword">end</span></code></dt><dd><p>Abstract address for a lock. There are two notions of equality:</p></dd></dl><divclass="spec module"id="module-VarDomain"><ahref="#module-VarDomain"class="anchor"></a><code><spanclass="keyword">module</span><ahref="VarDomain/index.html">VarDomain</a> : <spanclass="keyword">sig</span> ... <spanclass="keyword">end</span></code></div><divclass="spec module"id="module-Event"><ahref="#module-Event"class="anchor"></a><code><spanclass="keyword">module</span><ahref="Event/index.html">Event</a> : <spanclass="keyword">sig</span> ... <spanclass="keyword">end</span></code></div><divclass="spec module"id="module-LockState"><ahref="#module-LockState"class="anchor"></a><code><spanclass="keyword">module</span><ahref="LockState/index.html">LockState</a> : <ahref="../../Absint/AbstractDomain/index.html#module-type-WithTop">Absint.AbstractDomain.WithTop</a></code></div><dl><dtclass="spec module"id="module-Acquisition"><ahref="#module-Acquisition"class="anchor"></a><code><spanclass="keyword">module</span><ahref="Acquisition/index.html">Acquisition</a> : <spanclass="keyword">sig</span> ... <spanclass="keyword">end</span></code></dt><dd><p>a lock acquisition with location information</p></dd></dl><dl><dtclass="spec module"id="module-Acquisitions"><ahref="#module-Acquisitions"class="anchor"></a><code><spanclass="keyword">module</span><ahref="Acquisitions/index.html">Acquisitions</a> : <spanclass="keyword">sig</span> ... <spanclass="keyword">end</span></code></dt><dd><p>A set of lock acquisitions with source locations and procnames.</p></dd></dl><dl><dtclass="spec module"id="module-CriticalPairElement"><ahref="#module-CriticalPairElement"class="anchor"></a><code><spanclass="keyword">module</span><ahref="CriticalPairElement/index.html">CriticalPairElement</a> : <spanclass="keyword">sig</span> ... <spanclass="keyword">end</span></code></dt><dd><p>An event and the currently-held locks at the time it occurred.</p></dd></dl><dl><dtclass="spec module"id="module-CriticalPair"><ahref="#module-CriticalPair"class="anchor"></a><code><spanclass="keyword">module</span><ahref="CriticalPair/index.html">CriticalPair</a> : <spanclass="keyword">sig</span> ... <spanclass="keyword">end</span></code></dt><dd><p>A <code>CriticalPairElement</code> equipped with a call stack. The intuition is that if we have a critical pair `(locks, event)` in the summary of a method then there is a trace of that method where `event` occurs, and right before it occurs the locks held are exactly `locks` (no over/under approximation). We call it "critical" because the information here alone determines deadlock conditions.</p></dd>