-
Notifications
You must be signed in to change notification settings - Fork 34
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
New model checker algorithm #410
Draft
eupp
wants to merge
48
commits into
develop
Choose a base branch
from
new-mc
base: develop
Could not load branches
Branch not found: {{ refName }}
Loading
Could not load tags
Nothing to show
Loading
Are you sure you want to change the base?
Some commits from the old base branch may be removed from the timeline,
and old review comments may become outdated.
Draft
Conversation
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Signed-off-by: Evgeniy Moiseenko <[email protected]>
Signed-off-by: Evgeniy Moiseenko <[email protected]>
Signed-off-by: Evgeniy Moiseenko <[email protected]>
* fix monitor tests * fix parking tests (use Unsafe for reflective memory locations read/writes) * fix few bugs by adding `runInIgnoredSection` Signed-off-by: Evgeniy Moiseenko <[email protected]>
Signed-off-by: Evgeniy Moiseenko <[email protected]>
Signed-off-by: Evgeniy Moiseenko <[email protected]>
* fix `patchResultsClock` function * remove redundant `AtomicLongTest` * fix delta in managed strategy handler of `getAndIncrement()` and similar methods * remove obsolete code from EventStructureMemoryTracker * perform physical write to memory on successful CAS Signed-off-by: Evgeniy Moiseenko <[email protected]>
* track constructor calls to track allocations of objects whose base classes are not instrumented Signed-off-by: Evgeniy Moiseenko <[email protected]>
* move `loopDetector.initialize()` into `ManagedStrategy.initializeInvocation` * comment debug byte-code printing Signed-off-by: Evgeniy Moiseenko <[email protected]>
Signed-off-by: Evgeniy Moiseenko <[email protected]>
Signed-off-by: Evgeniy Moiseenko <[email protected]>
* fix `getFieldAccessMemoryLocation` (use actual runtime object's class name instead of compile-time access class name) * minor clean-up in MemoryTracker.kt Signed-off-by: Evgeniy Moiseenko <[email protected]>
Signed-off-by: Evgeniy Moiseenko <[email protected]>
…entstruct-mc branch Signed-off-by: Evgeniy Moiseenko <[email protected]>
…ent type is unknown Signed-off-by: Evgeniy Moiseenko <[email protected]>
… new invocation and on new actor start) Signed-off-by: Evgeniy Moiseenko <[email protected]>
Signed-off-by: Evgeniy Moiseenko <[email protected]>
* fix type computation for VarHandle accesses Signed-off-by: Evgeniy Moiseenko <[email protected]>
Signed-off-by: Evgeniy Moiseenko <[email protected]>
* testing new model checking strategy * ensure that the object read from an intercepted read is transformed * repair primitives tests * repair `VarHandleLocalObjectsTest` Signed-off-by: Evgeniy Moiseenko <[email protected]>
* fix expected outcomes for `testLincheckPromptCancellation` Signed-off-by: Evgeniy Moiseenko <[email protected]>
… initialization) Signed-off-by: Evgeniy Moiseenko <[email protected]>
Signed-off-by: Evgeniy Moiseenko <[email protected]>
Signed-off-by: Evgeniy Moiseenko <[email protected]>
Signed-off-by: Evgeniy Moiseenko <[email protected]>
Signed-off-by: Evgeniy Moiseenko <[email protected]>
Signed-off-by: Evgeniy Moiseenko <[email protected]>
Signed-off-by: Evgeniy Moiseenko <[email protected]>
Signed-off-by: Evgeniy Moiseenko <[email protected]>
Signed-off-by: Evgeniy Moiseenko <[email protected]>
Signed-off-by: Evgeniy Moiseenko <[email protected]>
Signed-off-by: Evgeniy Moiseenko <[email protected]>
Signed-off-by: Evgeniy Moiseenko <[email protected]>
Signed-off-by: Evgeniy Moiseenko <[email protected]>
Signed-off-by: Evgeniy Moiseenko <[email protected]>
Signed-off-by: Evgeniy Moiseenko <[email protected]>
Signed-off-by: Evgeniy Moiseenko <[email protected]>
Signed-off-by: Evgeniy Moiseenko <[email protected]>
… revisit this!) * decrease the number of loop iterations inside test's `operation()`, because currently large number of iterations triggers false-positive live-lock failure, due to naive implementation of spin-loops detection Signed-off-by: Evgeniy Moiseenko <[email protected]>
Signed-off-by: Evgeniy Moiseenko <[email protected]>
Signed-off-by: Evgeniy Moiseenko <[email protected]>
Signed-off-by: Evgeniy Moiseenko <[email protected]>
* So, apparently, the `context` used in the `ParallelThreadsRunner::Completion` can somehow escape between different invocations of the test. If this happens, everything becomes really FUCKED UP, and I spent hours trying to debug it. It leads to a situation, when on the new run of the test, an old `ParallelThreadRunnerInterceptor` object (stored in the `context`) from the previous invocation is used instead. To fix the issue, I changed the `Completion::reset` logic. Instead of creating new interceptor object, I re-use the same object by reset its state. Since we only use completions in a very specific way in `ParallelThreadsRunner` (basically one separate completion object for each suspending actor) this should not, in theory, lead to any problem. Still, only Gods know if this is truly correct way to fix this. Signed-off-by: Evgeniy Moiseenko <[email protected]>
Signed-off-by: Evgeniy Moiseenko <[email protected]>
Signed-off-by: Evgeniy Moiseenko <[email protected]>
Signed-off-by: Evgeniy Moiseenko <[email protected]>
Signed-off-by: Evgeniy Moiseenko <[email protected]>
eupp
commented
Oct 2, 2024
@@ -250,13 +254,27 @@ public static void afterReflectiveSetter(Object receiver, Object value) { | |||
getEventTracker().afterReflectiveSetter(receiver, value); | |||
} | |||
|
|||
public static void onArrayCopy(Object srcArray, int srcPos, Object dstArray, int dstPos, int length) { | |||
getEventTracker().onArrayCopy(srcArray, srcPos, dstArray, dstPos, length); | |||
} |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Add comment about System.arraycopy
eupp
commented
Oct 2, 2024
boolean isStatic, boolean isFinal) { | ||
if (!isStatic && obj == null) return false; // Ignore, NullPointerException will be thrown | ||
return getEventTracker().beforeReadField(obj, className, fieldName, codeLocation, isStatic, isFinal); | ||
return getEventTracker().beforeReadField(obj, className, fieldName, typeDescriptor, codeLocation, isStatic, isFinal); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Re-check if typeDescriptor
is required (find its usages).
Signed-off-by: Evgeniy Moiseenko <[email protected]>
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
No description provided.