Skip to content

Commit

Permalink
rebase fixes
Browse files Browse the repository at this point in the history
  • Loading branch information
daumayr committed Apr 24, 2017
1 parent 3565af3 commit 2b2cd50
Show file tree
Hide file tree
Showing 5 changed files with 70 additions and 64 deletions.
2 changes: 1 addition & 1 deletion src/som/VM.java
Original file line number Diff line number Diff line change
Expand Up @@ -245,7 +245,7 @@ public void shutdownAndExit(final int errorCode) {
if (TracingActors.ReplayActor.printMissingMessages() && errorCode == 0) {
code = 1;
}
if(lastExitCode == 0) {
if (lastExitCode == 0) {
FutureAssertion.checkFutureAssertions();
}
engine.dispose();
Expand Down
9 changes: 6 additions & 3 deletions src/som/interpreter/actors/Actor.java
Original file line number Diff line number Diff line change
Expand Up @@ -264,9 +264,8 @@ private void execute(final EventualMessage msg,
final ActorProcessingThread currentThread, final WebDebugger dbg, final int i) {
currentThread.currentMessage = msg;
handleBreakPoints(msg, dbg);
if (VmSettings.ENABLE_ASSERTIONS && ! (msg instanceof UntracedMessage)) {
((TracingActor) actor).checkReceiveHooks(msg);
((TracingActor) actor).checkAssertions(msg);
if (VmSettings.ENABLE_ASSERTIONS && !(msg instanceof UntracedMessage)) {
((TracingActor) actor).checkReceiveHooks(msg, vm);
}

if (i >= 0 && VmSettings.MESSAGE_TIMESTAMPS) {
Expand All @@ -275,6 +274,10 @@ private void execute(final EventualMessage msg,

try {
msg.execute();

if (VmSettings.ENABLE_ASSERTIONS && !(msg instanceof UntracedMessage)) {
((TracingActor) actor).checkAssertions(msg, vm);
}
} finally {
if (VmSettings.ACTOR_TRACING) {
currentThread.currentMessageId += 1;
Expand Down
8 changes: 4 additions & 4 deletions src/som/interpreter/actors/EventualSendNode.java
Original file line number Diff line number Diff line change
Expand Up @@ -190,7 +190,7 @@ protected void sendDirectMessage(final Object[] args, final Actor owner,
owner, resolver, onReceive,
messageReceiverBreakpoint.executeCheckIsSetAndEnabled(), promiseResolverBreakpoint.executeCheckIsSetAndEnabled());
if (VmSettings.ENABLE_ASSERTIONS) {
((TracingActor) owner).checkSendHooks(msg);
((TracingActor) owner).checkSendHooks(msg, this.getRootNode().getLanguage(SomLanguage.class).getVM());
}
target.send(msg, actorPool);
}
Expand All @@ -204,7 +204,7 @@ protected void sendPromiseMessage(final Object[] args, final SPromise rcvr,
rcvr.getOwner(), resolver, onReceive,
messageReceiverBreakpoint.executeCheckIsSetAndEnabled(), promiseResolverBreakpoint.executeCheckIsSetAndEnabled());
if (VmSettings.ENABLE_ASSERTIONS) {
((TracingActor) EventualMessage.getActorCurrentMessageIsExecutionOn()).checkSendHooks(msg);
((TracingActor) EventualMessage.getActorCurrentMessageIsExecutionOn()).checkSendHooks(msg, this.getRootNode().getLanguage(SomLanguage.class).getVM());
}
registerNode.register(rcvr, msg, rcvr.getOwner());
}
Expand Down Expand Up @@ -254,7 +254,7 @@ public final SPromise toNearRefWithResultPromise(final Object[] args) {
resolver, onReceive,
messageReceiverBreakpoint.executeCheckIsSetAndEnabled(), promiseResolverBreakpoint.executeCheckIsSetAndEnabled());
if (VmSettings.ENABLE_ASSERTIONS) {
((TracingActor) current).checkSendHooks(msg);
((TracingActor) current).checkSendHooks(msg, this.getRootNode().getLanguage(SomLanguage.class).getVM());
}
current.send(msg, actorPool);

Expand Down Expand Up @@ -286,7 +286,7 @@ public final Object toNearRefWithoutResultPromise(final Object[] args) {
null, onReceive,
messageReceiverBreakpoint.executeCheckIsSetAndEnabled(), promiseResolverBreakpoint.executeCheckIsSetAndEnabled());
if (VmSettings.ENABLE_ASSERTIONS) {
((TracingActor) current).checkSendHooks(msg);
((TracingActor) current).checkSendHooks(msg, this.getRootNode().getLanguage(SomLanguage.class).getVM());
}
current.send(msg, actorPool);
return Nil.nilObject;
Expand Down
60 changes: 28 additions & 32 deletions src/tools/concurrency/Assertion.java
Original file line number Diff line number Diff line change
Expand Up @@ -2,10 +2,12 @@

import java.util.HashSet;
import java.util.Set;
import java.util.concurrent.ForkJoinPool;

import com.oracle.truffle.api.CompilerDirectives;
import com.oracle.truffle.api.nodes.Node.Child;

import som.interpreter.SomLanguage;
import som.interpreter.actors.EventualMessage;
import som.interpreter.actors.ResolvePromiseNode;
import som.interpreter.actors.SPromise;
Expand All @@ -30,28 +32,28 @@ public Assertion(final SBlock statement, final SResolver result) {
wrapper = WrapReferenceNodeGen.create();
}

public void evaluate(final TracingActor actor, final EventualMessage msg) {
public void evaluate(final TracingActor actor, final EventualMessage msg, final ForkJoinPool actorPool) {
boolean result = (boolean) statement.getMethod().invoke(new Object[] {statement});
if (!result) {
fail();
fail(actorPool);
} else {
success();
success(actorPool);
}
}

protected void fail() {
protected void fail(final ForkJoinPool actorPool) {
ResolvePromiseNode.resolve(Resolution.SUCCESSFUL, wrapper,
result.getPromise(), false,
result.getPromise().getOwner(), false);
result.getPromise().getOwner(), actorPool, false);
}

protected void success() {
protected void success(final ForkJoinPool actorPool) {
ResolvePromiseNode.resolve(Resolution.SUCCESSFUL, wrapper,
result.getPromise(), true,
result.getPromise().getOwner(), false);
result.getPromise().getOwner(), actorPool, false);
}

public static class UntilAssertion extends Assertion{
public static class UntilAssertion extends Assertion {
SBlock until;

public UntilAssertion(final SBlock statement, final SResolver result, final SBlock until) {
Expand All @@ -60,17 +62,17 @@ public UntilAssertion(final SBlock statement, final SResolver result, final SBlo
}

@Override
public void evaluate(final TracingActor actor, final EventualMessage msg) {
public void evaluate(final TracingActor actor, final EventualMessage msg, final ForkJoinPool actorPool) {
boolean result = (boolean) until.getMethod().invoke(new Object[] {until});
if (!result) {
boolean result2 = (boolean) statement.getMethod().invoke(new Object[] {statement});
if (!result2) {
fail();
fail(actorPool);
} else {
actor.addAssertion(this);
}
} else {
success();
success(actorPool);
}
}
}
Expand All @@ -84,17 +86,17 @@ public ReleaseAssertion(final SBlock statement, final SResolver result, final SB
}

@Override
public void evaluate(final TracingActor actor, final EventualMessage msg) {
public void evaluate(final TracingActor actor, final EventualMessage msg, final ForkJoinPool actorPool) {
boolean result = (boolean) release.getMethod().invoke(new Object[] {release});
if (!result) {
fail();
fail(actorPool);
}

boolean result2 = (boolean) statement.getMethod().invoke(new Object[] {statement});
if (!result2) {
actor.addAssertion(this);
} else {
success();
success(actorPool);
}
}
}
Expand All @@ -117,31 +119,26 @@ public FutureAssertion(final SBlock statement, final SResolver result) {
}

@Override
public void evaluate(final TracingActor actor, final EventualMessage msg) {
public void evaluate(final TracingActor actor, final EventualMessage msg, final ForkJoinPool actorPool) {
boolean result = (boolean) statement.getMethod().invoke(new Object[] {statement});
if (result) {
synchronized (futureAssertions) {
futureAssertions.remove(this);
}
success();
success(actorPool);
} else {
actor.addAssertion(this);
}
}

public void finalCheck() {
boolean result = (boolean) statement.getMethod().invoke(new Object[] {statement});
if (result) {
success();
} else {
fail();
}
}

public static void checkFutureAssertions() {
if (futureAssertions.size() > 0) {
for (FutureAssertion fa: futureAssertions) {
fa.finalCheck();
if(fa instanceof ResultUsedAssertion){
((ResultUsedAssertion) fa).finalCheck();
}else{
fa.fail(fa.statement.getMethod().getCallTarget().getRootNode().getLanguage(SomLanguage.class).getVM().getActorPool());
}
}
}
}
Expand All @@ -158,10 +155,10 @@ public GloballyAssertion(final SBlock statement, final SResolver result) {
// only get's removed if a check fails

@Override
public void evaluate(final TracingActor actor, final EventualMessage msg) {
public void evaluate(final TracingActor actor, final EventualMessage msg, final ForkJoinPool actorPool) {
boolean result = (boolean) statement.getMethod().invoke(new Object[] {statement});
if (!result) {
fail();
fail(actorPool);
} else {
actor.addAssertion(this);
}
Expand All @@ -177,24 +174,23 @@ public ResultUsedAssertion(final SPromise statement, final SResolver result) {
}

@Override
public void evaluate(final TracingActor actor, final EventualMessage msg) {
public void evaluate(final TracingActor actor, final EventualMessage msg, final ForkJoinPool actorPool) {
synchronized (checkedPromise) {
if (checkedPromise.isResultUsed()) {
synchronized (futureAssertions) {
futureAssertions.remove(this);
}
success();
success(actorPool);
} else {
actor.addAssertion(this);
}
}
}

@Override
public void finalCheck() {
synchronized (checkedPromise) {
if (!checkedPromise.isResultUsed()) {
fail();
fail(checkedPromise.getSOMClass().getMethods()[0].getInvokable().getRootNode().getLanguage(SomLanguage.class).getVM().getActorPool());
}
}
}
Expand Down
55 changes: 31 additions & 24 deletions src/tools/concurrency/TracingActors.java
Original file line number Diff line number Diff line change
Expand Up @@ -81,7 +81,7 @@ public void addReceiveHook(final SSymbol msg, final SBlock block) {
receiveHooks.put(msg, block);
}

public void checkAssertions(final EventualMessage msg) {
public void checkAssertions(final EventualMessage msg, final VM vm) {
if (activeAssertions == null || activeAssertions.size() == 0) {
return;
}
Expand All @@ -92,16 +92,17 @@ public void checkAssertions(final EventualMessage msg) {

try {
for (Assertion a : temp) {
a.evaluate(this, msg);
a.evaluate(this, msg, vm.getActorPool());
}
} catch (SomException t) {
t.printStackTrace();
VM.errorExit("EventualMessage failed with Exception.");

vm.errorExit("EventualMessage failed with Exception.");
}
}

@TruffleBoundary
public void checkSendHooks(final EventualMessage msg) {
public void checkSendHooks(final EventualMessage msg, final VM vm) {
if (sendHooks != null) {
if (sendHooks.containsKey(msg.getSelector())) {
SBlock block = sendHooks.get(msg.getSelector());
Expand All @@ -111,9 +112,9 @@ public void checkSendHooks(final EventualMessage msg) {
}

if (block.getMethod().getNumberOfArguments() > 0) {
invokeBlock(block, msg.getArgs());
invokeBlock(block, msg.getArgs(), vm);
} else {
invokeBlock(block);
invokeBlock(block, vm);
}
} else if (sendHooks.size() > 0) {
throw new AssertionError("sending Message: " + msg.getSelector() + " violates the message protocol!");
Expand All @@ -122,41 +123,44 @@ public void checkSendHooks(final EventualMessage msg) {
}

@TruffleBoundary
public void checkReceiveHooks(final EventualMessage msg) {
public void checkReceiveHooks(final EventualMessage msg, final VM vm) {
if (receiveHooks != null) {
if (receiveHooks.containsKey(msg.getSelector())) {
SBlock block = receiveHooks.get(msg.getSelector());
receiveHooks.clear();
if (sendHooks != null) {
sendHooks.clear();
}
invokeBlock(block, msg.getArgs());
invokeBlock(block, msg.getArgs(), vm);
} else if (receiveHooks.size() > 0) {
throw new AssertionError("receiving Message: " + msg.getSelector() + " violates the message protocol!");
}
}
}
}

private void invokeBlock(final SBlock block, final Object[] args, final VM vm) {
try {
block.getMethod().invoke(new Object[] {block, SArguments.getArgumentsWithoutReceiver(args)});
} catch (SomException t) {
t.printStackTrace();

private static void invokeBlock(final SBlock block, final Object[] args){
try {
block.getMethod().invoke(new Object[] {block, SArguments.getArgumentsWithoutReceiver(args)});
} catch (SomException t) {
t.printStackTrace();
VM.errorExit("EventualMessage failed with Exception.");
vm.errorExit("EventualMessage failed with Exception.");
}
}
}

private static void invokeBlock(final SBlock block){
try {
block.getMethod().invoke(new Object[] {block});
} catch (SomException t) {
t.printStackTrace();
VM.errorExit("EventualMessage failed with Exception.");
private void invokeBlock(final SBlock block, final VM vm) {
try {
block.getMethod().invoke(new Object[] {block});
} catch (SomException t) {
t.printStackTrace();
vm.errorExit("EventualMessage failed with Exception.");
}
}
}




public static final class ReplayActor extends TracingActor {
protected int children;
protected final long replayId;
Expand Down Expand Up @@ -379,10 +383,13 @@ protected void processCurrentMessages(final ActorProcessingThread currentThread,
currentThread.currentMessage = msg;
handleBreakPoints(firstMessage, dbg);
if (!(msg instanceof UntracedMessage)) {
((TracingActor) actor).checkReceiveHooks(msg);
((TracingActor) actor).checkAssertions(msg);
((TracingActor) actor).checkReceiveHooks(msg, vm);
}
msg.execute();
if (!(msg instanceof UntracedMessage)) {
((TracingActor) actor).checkAssertions(msg, vm);
}

currentThread.currentMessageId += 1;
}

Expand Down

0 comments on commit 2b2cd50

Please sign in to comment.