JetBrains / lincheck

Framework for testing concurrent data structures
Mozilla Public License 2.0
587 stars 34 forks source link

Improve support of static initialization blocks and statically-reachable memory #389

Open eupp opened 1 month ago

eupp commented 1 month ago

Currently, if a Lincheck test execution both:

it can lead to non-determinism error (the Lincheck would not be able to replay the execution trace, because the content of the static memory changed).

[Above by statically-reachable memory we mean any mutable state reachable from static variables.]

Note that during the test statically-reachable memory can be modified both by

Thus, in order to fix possible non-determinism errors, we need to track modifications performed by <clinit> blocks, save them into trace, and manually re-perform them during replay (in the same order as in the original execution).