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>Concurrency__StarvationModels (infer.Concurrency__StarvationModels)</title><linkrel="stylesheet"href="../../odoc.css"/><metacharset="utf-8"/><metaname="generator"content="odoc 1.5.0"/><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>» Concurrency__StarvationModels</nav><h1>Module <code>Concurrency__StarvationModels</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 type"id="type-severity"><ahref="#type-severity"class="anchor"></a><code><spanclass="keyword">type</span> severity</code><code> = </code><tableclass="variant"><trid="type-severity.Low"class="anchored"><tdclass="def constructor"><ahref="#type-severity.Low"class="anchor"></a><code>| </code><code><spanclass="constructor">Low</span></code></td></tr><trid="type-severity.Medium"class="anchored"><tdclass="def constructor"><ahref="#type-severity.Medium"class="anchor"></a><code>| </code><code><spanclass="constructor">Medium</span></code></td></tr><trid="type-severity.High"class="anchored"><tdclass="def constructor"><ahref="#type-severity.High"class="anchor"></a><code>| </code><code><spanclass="constructor">High</span></code></td></tr></table></dt></dl><div><divclass="spec include"><divclass="doc"><dl><dtclass="spec value"id="val-compare_severity"><ahref="#val-compare_severity"class="anchor"></a><code><spanclass="keyword">val</span> compare_severity : <ahref="index.html#type-severity">severity</a><span>-></span><ahref="index.html#type-severity">severity</a><span>-></span> int</code></dt></dl></div></div></div><dl><dtclass="spec value"id="val-pp_severity"><ahref="#val-pp_severity"class="anchor"></a><code><spanclass="keyword">val</span> pp_severity : <ahref="index.html#module-F">F</a>.formatter <span>-></span><ahref="index.html#type-severity">severity</a><span>-></span> unit</code></dt><dtclass="spec value"id="val-may_block"><ahref="#val-may_block"class="anchor"></a><code><spanclass="keyword">val</span> may_block : <ahref="../IR/Tenv/index.html#type-t">IR.Tenv.t</a><span>-></span><ahref="../IR/Procname/index.html#type-t">IR.Procname.t</a><span>-></span><span><ahref="../Absint/HilExp/index.html#type-t">Absint.HilExp.t</a> list</span><span>-></span><span><ahref="index.html#type-severity">severity</a> option</span></code></dt><dd><p>is the method call potentially blocking, given the actuals passed?</p></dd></dl><dl><dtclass="spec value"id="val-is_strict_mode_violation"><ahref="#val-is_strict_mode_violation"class="anchor"></a><code><spanclass="keyword">val</span> is_strict_mode_violation : <ahref="../IR/Tenv/index.html#type-t">IR.Tenv.t</a><span>-></span><ahref="../IR/Procname/index.html#type-t">IR.Procname.t</a><span>-></span><span><ahref="../Absint/HilExp/index.html#type-t">Absint.HilExp.t</a> list</span><span>-></span> bool</code></dt><dtclass="spec value"id="val-is_monitor_wait"><ahref="#val-is_monitor_wait"class="anchor"></a><code><spanclass="keyword">val</span> is_monitor_wait : <ahref="../IR/Tenv/index.html#type-t">IR.Tenv.t</a><span>-></span><ahref="../IR/Procname/index.html#type-t">IR.Procname.t</a><span>-></span><span><ahref="../Absint/HilExp/index.html#type-t">Absint.HilExp.t</a> list</span><span>-></span> bool</code></dt><dtclass="spec value"id="val-is_synchronized_library_call"><ahref="#val-is_synchronized_library_call"class="anchor"></a><code><spanclass="keyword">val</span> is_synchronized_library_call : <ahref="../IR/Tenv/index.html#type-t">IR.Tenv.t</a><span>-></span><ahref="../IR/Procname/index.html#type-t">IR.Procname.t</a><span>-></span> bool</code></dt><dd><p>does the method call lock-then-unlock the underlying object? legacy Java containers like Vector do this, and can interact with explicit locking</p></dd></dl><dl><dtclass="spec value"id="val-should_skip_analysis"><ahref="#val-should_skip_analysis"class="anchor"></a><code><spanclass="keyword">val</span> should_skip_analysis : <ahref="../IR/Tenv/index.html#type-t">IR.Tenv.t</a><span>-></span><ahref="../IR/Procname/index.html#type-t">IR.Procname.t</a><span>-></span><span><ahref="../Absint/HilExp/index.html#type-t">Absint.HilExp.t</a> list</span><span>-></span> bool</code></dt><dd><p>should we treat a method call as skip (eg library methods in guava) to avoid FPs?</p></dd></dl><dl><dtclass="spec value"id="val-is_annotated_nonblocking"><ahref="#val-is_annotated_nonblocking"class="anchor"></a><code><spanclass="keyword">val</span> is_annotated_nonblocking : <ahref="../IR/Tenv/index.html#type-t">IR.Tenv.t</a><span>-></span><ahref="../IR/Procname/index.html#type-t">IR.Procname.t</a><span>-></span> bool</code></dt><dd><p>is procedure transitively annotated <code>@Nonblocking</code></p></dd></dl><dl><dtclass="spec value"id="val-is_annotated_lockless"><ahref="#val-is_annotated_lockless"class="anchor"></a><code><spanclass="keyword">val</span> is_annotated_lockless : <ahref="../IR/Tenv/index.html#type-t">IR.Tenv.t</a><span>-></span><ahref="../IR/Procname/index.html#type-t">IR.Procname.t</a><span>-></span> bool</code></dt><dd><p>is procedure transitively annotated <code>@Lockless</code></p></dd></dl><dl><dtclass="spec value"id="val-schedules_work"><ahref="#val-schedules_work"class="anchor"></a><code><spanclass="keyword">val</span> schedules_work : <ahref="../IR/Tenv/index.html#type-t">IR.Tenv.t</a><span>-></span><ahref="../IR/Procname/index.html#type-t">IR.Procname.t</a><span>-></span> bool</code></dt><dd><p>call known to schedule runnable first argument to some executor/handler or subclass</p></dd></dl><dl><dtclass="spec type"id="type-scheduler_thread_constraint"><ahref="#type-scheduler_thread_constraint"class="anchor"></a><code><spanclass="keyword">type</span> scheduler_thread_constraint</code><code> = </code><tableclass="variant"><trid="type-scheduler_thread_constraint.ForUIThread"class="anchored"><tdclass="def constructor"><ahref="#type-scheduler_thread_constraint.ForUIThread"class="anchor"></a><code>| </code><code><spanclass="constructor">ForUIThread</span></code></td></tr><trid="type-scheduler_thread_constraint.ForNonUIThread"class="anchored"><tdclass="def constructor"><ahref="#type-scheduler_thread_constraint.ForNonUIThread"class="anchor"></a><code>| </code><code><spanclass="constructor">ForNonUIThread</span></code></td></tr><trid="type-scheduler_thread_constraint.ForUnknownThread"class="anchored"><tdclass="def constructor"><ahref="#type-scheduler_thread_constraint.ForUnknownThread"class="anchor"></a><code>| </code><code><spanclass="constructor">ForUnknownThread</span></code></td></tr></table></dt><dd><p>an instance field holding a reference to an executor may be annotated as running on UI/non-UI thread</p></dd></dl><div><divclass="spec include"><divclass="doc"><dl><dtclass="spec value"id="val-equal_scheduler_thread_constraint"><ahref="#val-equal_scheduler_thread_constraint"class="anchor"></a><code><spanclass="keyword">val</span> equal_scheduler_thread_constraint : <ahref="index.html#type-scheduler_thread_constraint">scheduler_thread_constraint</a><span>-></span><ahref="index.html#type-scheduler_thread_constraint">scheduler_thread_constraint</a><span>-></span> bool</code></dt></dl></div></div></div><dl><dtclass="spec value"id="val-get_executor_thread_annotation_constraint"><ahref="#val-get_executor_thread_annotation_constraint"class="anchor"></a><code><spanclass="keyword">val</span> get_executor_thread_annotation_constraint : <ahref="../IR/Tenv/index.html#type-t">IR.Tenv.t</a><span>-></span><ahref="../Absint/HilExp/AccessExpression/index.html#type-t">Absint.HilExp.AccessExpression.t</a><span>-></span><span><ahref="index.html#type-scheduler_thread_constraint">scheduler_thread_constraint</a> option</span></code></dt><dd><p>given an executor receiver, get its thread constraint, if any. <code>None</code> means lookup somehow failed, whereas <code>Some UnknownThread</code> means the receiver is an unannotated executor.</p></dd></dl><dl><dtclass="spec value"id="val-get_run_method_from_runnable"><ahref="#val-get_run_method_from_runnable"class="anchor"></a><code><spanclass="keyword">val</span> get_run_method_from_runnable : <ahref="../IR/Tenv/index.html#type-t">IR.Tenv.t</a><span>-></span><ahref="../Absint/HilExp/AccessExpression/index.html#type-t">Absint.HilExp.AccessExpression.t</a><span>-></span><span><ahref="../IR/Procname/index.html#type-t">IR.Procname.t</a> option</span></code></dt><dd><p>given a receiver, find the <code>run()</code> method in the appropriate class</p></dd></dl><dl><dtclass="spec value"id="val-get_returned_executor"><ahref="#val-get_returned_executor"class="anchor"></a><code><spanclass="keyword">val</span> get_returned_executor : <ahref="../IR/Tenv/index.html#type-t">IR.Tenv.t</a><span>-></span><ahref="../IR/Procname/index.html#type-t">IR.Procname.t</a><span>-></span><span><ahref="../Absint/HilExp/index.html#type-t">Absint.HilExp.t</a> list</span><span>-></span><span><ahref="index.html#type-scheduler_thread_constraint">scheduler_thread_constraint</a> option</span></code></dt><dd><p>does the function return an executor and of which thread?</p></dd></dl><dl><dtclass="spec value"id="val-schedules_first_arg_on_ui_thread"><ahref="#val-schedules_first_arg_on_ui_thread"class="anchor"></a><code><spanclass="keyword">val</span> schedules_first_arg_on_ui_thread : <ahref="../IR/Tenv/index.html#type-t">IR.Tenv.t</a><span>-></span><ahref="../IR/Procname/index.html#type-t">IR.Procname.t</a><span>-></span> bool</code></dt><dd><p>method call known to directly schedule the runnable object provided as first procedure argument on the UI thread</p></dd></dl><dl><dtclass="spec value"id="val-schedules_second_arg_on_ui_thread"><ahref="#val-schedules_second_arg_on_ui_thread"class="anchor"></a><code><spanclass="keyword">val</span> schedules_second_arg_on_ui_thread : <ahref="../IR/Tenv/index.html#type-t">IR.Tenv.t</a><span>-></span><ahref="../IR/Procname/index.html#type-t">IR.Procname.t</a><span>-></span> bool</code></dt><dd><p>method call known to directly schedule the runnable object provided as second procedure argument on a background thread</p></dd></dl><dl><dtclass="spec value"id="val-schedules_first_arg_on_bg_thread"><ahref="#val-schedules_first_arg_on_bg_thread"class="anchor"></a><code><spanclass="keyword">val</span> schedules_first_arg_on_bg_thread : <ahref="../IR/Tenv/index.html#type-t">IR.Tenv.t</a><span>-></span><ahref="../IR/Procname/index.html#type-t">IR.Procname.t</a><span>-></span> bool</code></dt><dd><p>method call known to directly the runnable object provided as first procedure argument on a background thread</p></dd></dl><dl><dtclass="spec value"id="val-is_getMainLooper"><ahref="#val-is_getMainLooper"class="anchor"></a><code><spanclass="keyword">val</span> is_getMainLooper : <ahref="../IR/Tenv/index.html#type-t">IR.Tenv.t</a><span>-></span><ahref="../IR/Procname/index.html#type-t">IR.Procname.t</a><span>-></span><span><ahref="../Absint/HilExp/index.html#type-t">Absint.HilExp.t</a> list</span><span>-></span> bool</code></dt><dtclass="spec value"id="val-is_handler_constructor"><ahref="#val-is_handler_constructor"class="anchor"></a><code><spanclass="keyword">val</span> is_handler_constructor : <ahref="../IR/Tenv/index.html#type-t">IR.Tenv.t</a><span>-></span><ahref="../IR/Procname/index.html#type-t">IR.Procname.t</a><span>-></span><span><ahref="../Absint/HilExp/index.html#type-t">Absint.HilExp.t</a> list</span><span>-></span> bool</code></dt><dtclass="spec value"id="val-is_thread_constructor"><ahref="#val-is_thread_constructor"class="anchor"></a><code><spanclass="keyword">val</span> is_thread_constructor : <ahref="../IR/Tenv/index.html#type-t">IR.Tenv.t</a><span>-></span><ahref="../IR/Procname/index.html#type-t">IR.Procname.t</a><span>-></span><span><ahref="../Absint/HilExp/index.html#type-t">Absint.HilExp.t</a> list</span><span>-></span> bool</code></dt><dtclass="spec value"id="val-is_future_get"><ahref="#val-is_future_get"class="anchor"></a><code><spanclass="keyword">val</span> is_future_get : <ahref="../IR/Tenv/index.html#type-t">IR.Tenv.t</a><span>-></span><ahref="../IR/Procname/index.html#type-t">IR.Procname.t</a><span>-></span><span><ahref="../Absint/HilExp/index.html#type-t">Absint.HilExp.t</a> list</span><span>-></span> bool</code></dt><dtclass="spec value"id="val-is_future_is_done"><ahref="#val-is_future_is_done"class="anchor"></a><code><spanclass="keyword">val</span> is_future_is_done : <ahref="../IR/Tenv/index.html#type-t">IR.Tenv.t</a><span>-></span><ahref="../IR/Procname/index.html#type-t">IR.Procname.t</a><span>-></span><span><ahref="../Absint/HilExp/index.html#type-t">Absint.HilExp.t</a> list</span><span>-></span> bool</code></dt><dtclass="spec value"id="val-is_assume_true"><ahref="#val-is_assume_true"class="anchor"></a><code><spanclass="keyword">val</span> is_assume_true : <ahref="../IR/Tenv/index.html#type-t">IR.Tenv.t</a><span>-></span><ahref="../IR/Procname/index.html#type-t">IR.Procname.t</a><span>-></span><span><ahref="../Absint/HilExp/index.html#type-t">Absint.HilExp.t</a> list</span><span>-></span> bool</code></dt><dd><p>is the callee equivalent to assuming its first argument true</p></dd></dl><dl><dtclass="spec value"id="val-is_java_main_method"><ahref="#val-is_java_main_method"class="anchor"></a><code><spanclass="keyword">val</span> is_java_main_method : <ahref="../IR/Procname/index.html#type-t">IR.Procname.t</a><span>-></span> bool</code></dt><dd><p>does the method look like a Java <code>main</code></p></dd></dl></div></body></html>