This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.
<!DOCTYPE html>
<htmlxmlns="http://www.w3.org/1999/xhtml"><head><title>InferModules__StarvationDomain (infer.InferModules__StarvationDomain)</title><linkrel="stylesheet"href="../../odoc.css"/><metacharset="utf-8"/><metaname="generator"content="odoc %%VERSION%%"/><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>» InferModules__StarvationDomain</nav><h1>Module <code>InferModules__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-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>Abstraction of a path that represents a lock, special-casing equality and comparisons to work over type, base variable modulo this and access list</p></dd></dl><dl><dtclass="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></dt><dd><p>Represents the existence of a program path from the current method to the eventual acquisition of a lock or a blocking call. Equality/comparison disregards the call trace but includes location.</p></dd></dl><divclass="spec module"id="module-EventDomain"><ahref="#module-EventDomain"class="anchor"></a><code><spanclass="keyword">module</span> EventDomain : <ahref="../InferModules/ExplicitTrace/index.html#module-type-FiniteSet">InferModules.ExplicitTrace.FiniteSet</a><spanclass="keyword">with</span><spanclass="keyword">type</span><ahref="../InferModules/ExplicitTrace/index.html#module-type-FiniteSet">FiniteSet</a>.elt = <ahref="Event/index.html#type-t">Event.t</a></code></div><dl><dtclass="spec module"id="module-Order"><ahref="#module-Order"class="anchor"></a><code><spanclass="keyword">module</span><ahref="Order/index.html">Order</a> : <spanclass="keyword">sig</span> ... <spanclass="keyword">end</span></code></dt><dd><p>Represents the existence of a program path to the <code>first</code> lock being taken in the current method or, transitively, a callee *in the same class*, and, which continues (to potentially another class) until the <code>eventually</code> event, schematically -->first-->eventually. It is guaranteed that during the second part of the trace (first-->eventually) the lock <code>first</code> is not released.</p></dd></dl><divclass="spec module"id="module-OrderDomain"><ahref="#module-OrderDomain"class="anchor"></a><code><spanclass="keyword">module</span> OrderDomain : <ahref="../InferModules/ExplicitTrace/index.html#module-type-FiniteSet">InferModules.ExplicitTrace.FiniteSet</a><spanclass="keyword">with</span><spanclass="keyword">type</span><ahref="../InferModules/ExplicitTrace/index.html#module-type-FiniteSet">FiniteSet</a>.elt = <ahref="Order/index.html#type-t">Order.t</a></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="../InferModules/AbstractDomain/index.html#module-type-WithTop">InferModules.AbstractDomain.WithTop</a></code></div><divclass="spec module"id="module-UIThreadExplanationDomain"><ahref="#module-UIThreadExplanationDomain"class="anchor"></a><code><spanclass="keyword">module</span><ahref="UIThreadExplanationDomain/index.html">UIThreadExplanationDomain</a> : <spanclass="keyword">sig</span> ... <spanclass="keyword">end</span></code></div><divclass="spec module"id="module-UIThreadDomain"><ahref="#module-UIThreadDomain"class="anchor"></a><code><spanclass="keyword">module</span><ahref="UIThreadDomain/index.html">UIThreadDomain</a> : <ahref="../InferModules/AbstractDomain/index.html#module-type-WithBottom">InferModules.AbstractDomain.WithBottom</a><spanclass="keyword">with</span><spanclass="keyword">type</span><ahref="../InferModules/AbstractDomain/module-type-WithBottom/index.html#type-t">t</a> = <span><ahref="UIThreadExplanationDomain/index.html#type-t">UIThreadExplanationDomain.t</a><ahref="../InferModules/AbstractDomain/Types/index.html#type-bottom_lifted">InferModules.AbstractDomain.Types.bottom_lifted</a></span></code></div><divclass="spec module"id="module-GuardToLockMap"><ahref="#module-GuardToLockMap"class="anchor"></a><code><spanclass="keyword">module</span><ahref="GuardToLockMap/index.html">GuardToLockMap</a> : <ahref="../InferModules/AbstractDomain/index.html#module-type-WithTop">InferModules.AbstractDomain.WithTop</a></code></div><dl><dtclass="spec type"id="type-t"><ahref="#type-t"class="anchor"></a><code><spanclass="keyword">type</span> t</code><code> = </code><code>{</code><tableclass="record"><trid="type-t.events"class="anchored"><tdclass="def field"><ahref="#type-t.events"class="anchor"></a><code>events : <ahref="index.html#module-EventDomain">EventDomain</a>.t;</code></td></tr><trid="type-t.guard_map"class="anchored"><tdclass="def field"><ahref="#type-t.guard_map"class="anchor"></a><code>guard_map : <ahref="GuardToLockMap/index.html#type-t">GuardToLockMap.t</a>;</code></td></tr><trid="type-t.lock_state"class="anchored"><tdclass="def field"><ahref="#type-t.lock_state"class="anchor"></a><code>lock_state : <ahref="LockState/index.html#type-t">LockState.t</a>;</code></td></tr><trid="type-t.order"class="anchored"><tdclass="def field"><ahref="#type-t.order"class="anchor"></a><code>order : <ahref="index.html#module-OrderDomain">OrderDomain</a>.t;</code></td></tr><trid="type-t.ui"class="anchored"><tdclass="def field"><ahref="#type-t.ui"class="anchor"></a><code>ui : <ahref="UIThreadDomain/index.html#type-t">UIThreadDomain.t</a>;</code></td></tr></table><code>}</code></dt></dl><div><divclass="spec include"><divclass="doc"><detailsopen="open"><summary><spanclass="def"><code><spanclass="keyword">include</span><ahref="../InferModules/AbstractDomain/index.html#module-type-WithBottom">InferModules.AbstractDomain.WithBottom</a><spanclass="keyword">with</span><spanclass="keyword">type</span><ahref="../InferModules/AbstractDomain/module-type-WithBottom/index.html#type-t">t</a> := <ahref="index.html#type-t">t</a></code></span></summary><div><divclass="spec include"><divclass="doc"><detailsopen="open"><summary><spanclass="def"><code><spanclass="keyword">include</span><ahref="../InferModules/AbstractDomain/index.html#module-type-S">InferModules.AbstractDomain.S</a></code></span></summary><div><divclass="spec include"><divclass="doc"><detailsopen="open"><summary><spanclass="def"><code><spanclass="keyword">include</span><ahref="../InferModules/AbstractDomain/index.html#module-type-NoJoin">InferModules.AbstractDomain.NoJoin</a></code></span></summary><div><divclass="spec include"><divclass="doc"><detailsopen="open"><summary><spanclass="def"><code><spanclass="keyword">include</span><ahref="../../InferStdlib/InferStdlib/PrettyPrintable/index.html#module-type-PrintableType">InferStdlib.PrettyPrintable.PrintableType</a></code></span></summary><dl><dtclass="spec type"id="type-t"><ahref="#type-t"class="anchor"></a><code><spanclass="keyword">type</span> t</code></dt></dl><dl><dtclass="spec value"id="val-pp"><ahref="#val-pp"class="anchor"></a><code><spanclass="keyword">val</span> pp : <ahref="../../InferStdlib/InferStdlib/PrettyPrintable/index.html#module-F">InferStdlib.PrettyPrintable.F</a>.formatter <span>-></span><ahref="index.html#type-t">t</a><span>-></span> unit</code></dt></dl></details></div></div></div><dl><dtclass="spec value"id="val-(<=)"><ahref="#val-(<=)"class="anchor"></a><code><spanclass="keyword">val</span> (<=) : <span>lhs:<ahref="index.html#type-t">t</a></span><span>-></span><span>rhs:<ahref="index.html#type-t">t</a></span><span>-></span> bool</code></dt><dd><p>the implication relation: <code>lhs <= rhs</code> means <code>lhs |- rhs</code></p></dd></dl></details></div></div></div><dl><dtclass="spec value"id="val-join"><ahref="#val-join"class="anchor"></a><code><spanclass="keyword">val</span> join : <ahref="index.html#type-t">t</a><span>-></span><ahref="index.html#type-t">t</a><span>-></span><ahref="index.html#type-t">t</a></code></dt><dtclass="spec value"id="val-widen"><ahref="#val-widen"class="anchor"></a><code><spanclass="keyword">val</span> widen : <span>prev:<ahref="index.html#type-t">t</a></span><span>-></span><span>next:<ahref="index.html#type-t">t</a></span><span>-></span><span>num_iters:int</span><span>-></span><ahref="index.html#type-t">t</a></code></dt></dl></details></div></div></div><dl><dtclass="spec value"id="val-bottom"><ahref="#val-bottom"class="anchor"></a><code><spanclass="keyword">val</span> bottom : <ahref="index.html#type-t">t</a></code></dt><dd><p>The bottom value of the domain.</p></dd></dl><dl><dtclass="spec value"id="val-is_bottom"><ahref="#val-is_bottom"class="anchor"></a><code><spanclass="keyword">val</span> is_bottom : <ahref="index.html#type-t">t</a><span>-></span> bool</code></dt><dd><p>Return true if this is the bottom value</p></dd></dl></details></div></div></div><dl><dtclass="spec value"id="val-acquire"><ahref="#val-acquire"class="anchor"></a><code><spanclass="keyword">val</span> acquire : <ahref="../../InferIR/InferIR/Tenv/index.html#type-t">InferIR.Tenv.t</a><span>-></span><ahref="index.html#type-t">t</a><span>-></span><ahref="../../InferBase/InferBase/Location/index.html#type-t">InferBase.Location.t</a><span>-></span><span><ahref="index.html#module-Lock">Lock</a>.t list</span><span>-></span><ahref="index.html#type-t">t</a></code></dt><dd><p>simultaneously acquire a number of locks, no-op if list is empty</p></dd></dl><dl><dtclass="spec value"id="val-release"><ahref="#val-release"class="anchor"></a><code><spanclass="keyword">val</span> release : <ahref="index.html#type-t">t</a><span>-></span><span><ahref="index.html#module-Lock">Lock</a>.t list</span><span>-></span><ahref="index.html#type-t">t</a></code></dt><dd><p>simultaneously release a number of locks, no-op if list is empty</p></dd></dl><dl><dtclass="spec value"id="val-blocking_call"><ahref="#val-blocking_call"class="anchor"></a><code><spanclass="keyword">val</span> blocking_call : <ahref="../../InferIR/InferIR/Typ/Procname/index.html#type-t">InferIR.Typ.Procname.t</a><span>-></span><ahref="Event/index.html#type-severity_t">Event.severity_t</a><span>-></span><ahref="../../InferBase/InferBase/Location/index.html#type-t">InferBase.Location.t</a><span>-></span><ahref="index.html#type-t">t</a><span>-></span><ahref="index.html#type-t">t</a></code></dt><dtclass="spec value"id="val-strict_mode_call"><ahref="#val-strict_mode_call"class="anchor"></a><code><spanclass="keyword">val</span> strict_mode_call : <ahref="../../InferIR/InferIR/Typ/Procname/index.html#type-t">InferIR.Typ.Procname.t</a><span>-></span><ahref="../../InferBase/InferBase/Location/index.html#type-t">InferBase.Location.t</a><span>-></span><ahref="index.html#type-t">t</a><span>-></span><ahref="index.html#type-t">t</a></code></dt><dtclass="spec value"id="val-set_on_ui_thread"><ahref="#val-set_on_ui_thread"class="anchor"></a><code><spanclass="keyword">val</span> set_on_ui_thread : <ahref="index.html#type-t">t</a><span>-></span><ahref="../../InferBase/InferBase/Location/index.html#type-t">InferBase.Location.t</a><span>-></span> string <span>-></span><ahref="index.html#type-t">t</a></code></dt><dd><p>set the property "runs on UI thread" to true by attaching the given explanation string as to why this method is thought to do so</p></dd></dl><dl><dtclass="spec value"id="val-add_guard"><ahref="#val-add_guard"class="anchor"></a><code><spanclass="keyword">val</span> add_guard : <ahref="../../InferIR/InferIR/Tenv/index.html#type-t">InferIR.Tenv.t</a><span>-></span><ahref="index.html#type-t">t</a><span>-></span><ahref="../../InferIR/InferIR/HilExp/index.html#type-t">InferIR.HilExp.t</a><span>-></span><ahref="index.html#module-Lock">Lock</a>.t <span>-></span><span>acquire_now:bool</span><span>-></span><ahref="../../InferBase/InferBase/Location/index.html#type-t">InferBase.Location.t</a><span>-></span><ahref="index.html#type-t">t</a></code></dt><dd><p>Install a mapping from the guard expression to the lock provided, and optionally lock it.</p></dd></dl><dl><dtclass="spec value"id="val-lock_guard"><ahref="#val-lock_guard"class="anchor"></a><code><spanclass="keyword">val</span> lock_guard : <ahref="../../InferIR/InferIR/Tenv/index.html#type-t">InferIR.Tenv.t</a><span>-></span><ahref="index.html#type-t">t</a><span>-></span><ahref="../../InferIR/InferIR/HilExp/index.html#type-t">InferIR.HilExp.t</a><span>-></span><ahref="../../InferBase/InferBase/Location/index.html#type-t">InferBase.Location.t</a><span>-></span><ahref="index.html#type-t">t</a></code></dt><dd><p>Acquire the lock the guard was constructed with.</p></dd></dl><dl><dtclass="spec value"id="val-remove_guard"><ahref="#val-remove_guard"class="anchor"></a><code><spanclass="keyword">val</span> remove_guard : <ahref="index.html#type-t">t</a><span>-></span><ahref="../../InferIR/InferIR/HilExp/index.html#type-t">InferIR.HilExp.t</a><span>-></span><ahref="index.html#type-t">t</a></code></dt><dd><p>Destroy the guard and release its lock.</p></dd></dl><dl><dtclass="spec value"id="val-unlock_guard"><ahref="#val-unlock_guard"class="anchor"></a><code><spanclass="keyword">val</span> unlock_guard : <ahref="index.html#type-t">t</a><span>-></span><ahref="../../InferIR/InferIR/HilExp/index.html#type-t">InferIR.HilExp.t</a><span>-></span><ahref="index.html#type-t">t</a></code></dt><dd><p>Release the lock the guard was constructed with.</p></dd></dl><dl><dtclass="spec type"id="type-summary"><ahref="#type-summary"class="anchor"></a><code><spanclass="keyword">type</span> summary</code><code> = <ahref="index.html#type-t">t</a></code></dt></dl><dl><dtclass="spec value"id="val-pp_summary"><ahref="#val-pp_summary"class="anchor"></a><code><spanclass="keyword">val</span> pp_summary : <ahref="index.html#module-F">F</a>.formatter <span>-></span><ahref="index.html#type-summary">summary</a><span>-></span> unit</code></dt><dtclass="spec value"id="val-integrate_summary"><ahref="#val-integrate_summary"class="anchor"></a><code><spanclass="keyword">val</span> integrate_summary : <ahref="../../InferIR/InferIR/Tenv/index.html#type-t">InferIR.Tenv.t</a><span>-></span><ahref="index.html#type-t">t</a><span>-></span><ahref="../../InferIR/InferIR/Typ/Procname/index.html#type-t">InferIR.Typ.Procname.t</a><span>-></span><ahref="../../InferBase/InferBase/Location/index.html#type-t">InferBase.Location.t</a><span>-></span><ahref="index.html#type-summary">summary</a><span>-></span><ahref="index.html#type-t">t</a></code></dt></dl></div></body></html>