Evgeniy Moiseenko
Evgeniy Moiseenko
This PR implements a refactoring to introduce separate internal event trackers API: - `MonitorTracker` tracks monitor events (lock, unlock, wait, notify) - `ParkingTracker` tracks parking events (park, unpark) - `ObjectTracker`...
Events from coroutine resumptions were not printed before. Moreover, the "stack trace recovery after resumption" logic seem to be broken too. This PR fixes these problems. See the output of...
We need to improve atomic sections model, and possibly introduce another new kind of "silent" sections. This should help us shorten the trace output by hiding internal details of stdlib...
`System.arraycopy(...)` call is not considered as modification by static memory snapshot tracker, so overridden values will not be remembered. This call is used in `ArrayList::remove(...)` for example. It also prevent...
The trace can contain several consecutive thread switches to the blocks of the same spin-loop. Example: ``` | /* The following events repeat infinitely: */ | | ┌╶> state ➜...
Due to some bug, spin loops can be represented incorrectly: spin-loop arrow and spin-loop nestedness is broken. Example: ``` | BlockingEventLoop#1.processNextEvent(): 9223372036854775807 at BlockingCoroutine.joinBlocking(Builders.kt:85) | | | | | isCompleted():...
Currently, the for `` methods Lincheck applies different set of bytecode transformers, compared to regular methods. This often leads to bugs. We need to revisit this logic, and unify the...
As an optimization, we currently use lazy instrumentation logic to re-transform only those classes related to the test. This lazy instrumentation mechanism utilizes the fact that managed strategy can intercept...
Currently, hidden classes cannot be instrumented by Lincheck, because we use dynamic agent attachment and class re-transformation. However, hidden classes are not modifiable and thus cannot be redefined or re-transformed:...
We observe a performance degradation somewhere after `Lincheck-2.36` release.