a thread tracking policy that uses ThreadInfoSets which are
search global from the point of object creation. Each object
allocation gets a new ThreadInfo set which contains only the
Note this can miss sharedness due to non-overlapping thread execution.
Most real world systems have enough interaction points (sync,
field access within loops etc.) to avoid this, but short living threads
that only have single field access interaction points can run into
this effect: T1 creates O, creates & starts T2, accesses O and terminates
before T2 runs. When T2 runs, it only sees access to O from an already
terminated thread and therefore treats this as a clean handover. Even if
T2 would break at the access, there is no CG that would bring T1 back
into the state between creation and access of O, hence T1 never breaks
on that access.
Unfortunately, this case has a tendency to happen in simple race examples