Module InferModules.StarvationDomain
module Lock : sig ... end
Abstraction of a path that represents a lock, special-casing equality and comparisons to work over type, base variable modulo this and access list
module Event : sig ... end
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.
module EventDomain : ExplicitTrace.FiniteSet with type FiniteSet.elt = Event.t
module Order : sig ... end
Represents the existence of a program path to the
first
lock being taken in the current method or, transitively, a callee *in the same class*, and, which continues (to potentially another class) until theeventually
event, schematically -->first-->eventually. It is guaranteed that during the second part of the trace (first-->eventually) the lockfirst
is not released.
module OrderDomain : ExplicitTrace.FiniteSet with type FiniteSet.elt = Order.t
module LockState : AbstractDomain.WithTop
module UIThreadExplanationDomain : sig ... end
module UIThreadDomain : AbstractDomain.WithBottom with type t = UIThreadExplanationDomain.t AbstractDomain.Types.bottom_lifted
module GuardToLockMap : AbstractDomain.WithTop
type t
=
{
events : EventDomain.t;
guard_map : GuardToLockMap.t;
lock_state : LockState.t;
order : OrderDomain.t;
ui : UIThreadDomain.t;
}
include AbstractDomain.WithBottom with type t := t
include AbstractDomain.S
include AbstractDomain.NoJoin
include InferStdlib.PrettyPrintable.PrintableType
val pp : InferStdlib.PrettyPrintable.F.formatter -> t -> unit
val bottom : t
The bottom value of the domain.
val is_bottom : t -> bool
Return true if this is the bottom value
val acquire : InferIR.Tenv.t -> t -> InferBase.Location.t -> Lock.t list -> t
simultaneously acquire a number of locks, no-op if list is empty
val blocking_call : InferIR.Typ.Procname.t -> Event.severity_t -> InferBase.Location.t -> t -> t
val strict_mode_call : InferIR.Typ.Procname.t -> InferBase.Location.t -> t -> t
val set_on_ui_thread : t -> InferBase.Location.t -> string -> t
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
val add_guard : InferIR.Tenv.t -> t -> InferIR.HilExp.t -> Lock.t -> acquire_now:bool -> InferBase.Location.t -> t
Install a mapping from the guard expression to the lock provided, and optionally lock it.
val lock_guard : InferIR.Tenv.t -> t -> InferIR.HilExp.t -> InferBase.Location.t -> t
Acquire the lock the guard was constructed with.
val remove_guard : t -> InferIR.HilExp.t -> t
Destroy the guard and release its lock.
val unlock_guard : t -> InferIR.HilExp.t -> t
Release the lock the guard was constructed with.
type summary
= t
val pp_summary : F.formatter -> summary -> unit
val integrate_summary : InferIR.Tenv.t -> t -> InferIR.Typ.Procname.t -> InferBase.Location.t -> summary -> t