Skip to content

Commit

Permalink
Showing 6 changed files with 19 additions and 10 deletions.
7 changes: 4 additions & 3 deletions core/src/main/java/org/jruby/Main.java
Original file line number Diff line number Diff line change
@@ -198,6 +198,10 @@ public static void main(String[] args) {

try {
Status status = main.run(args);

printTruffleTimeMetric("after-main");
printTruffleMemoryMetric();

if (status.isExit()) {
System.exit(status.getStatus());
}
@@ -221,9 +225,6 @@ public static void main(String[] args) {

System.exit(1);
}

printTruffleTimeMetric("after-main");
printTruffleMemoryMetric();
}

public Status run(String[] args) {
Original file line number Diff line number Diff line change
@@ -32,6 +32,10 @@ public class MainExitException extends RuntimeException implements Unrescuable {
int status;
private boolean aborted;

public MainExitException(int status) {
this(status, true);
}

public MainExitException(int status, String message) {
super(message);

Original file line number Diff line number Diff line change
@@ -722,6 +722,11 @@ public Integer block() throws InterruptedException {
}
});

/*
* We really do want to just exit here as opposed to throwing a MainExitException and tidying up, as we're
* pretending that we did exec and so replaced this process with a new one.
*/

System.exit(exitCode);
}

Original file line number Diff line number Diff line change
@@ -14,6 +14,7 @@
import com.oracle.truffle.api.object.DynamicObject;
import com.oracle.truffle.api.source.SourceSection;

import org.jruby.exceptions.MainExitException;
import org.jruby.truffle.nodes.RubyNode;
import org.jruby.truffle.nodes.cast.IntegerCastNode;
import org.jruby.truffle.nodes.cast.IntegerCastNodeGen;
@@ -47,12 +48,9 @@ public Object execute(VirtualFrame frame) {
}

getContext().shutdown();
final int status = statusFromException(lastException);
System.exit(status);
}

// unreachable
return nil();
throw new MainExitException(statusFromException(lastException));
}
}

private int statusFromException(DynamicObject exception) {
Original file line number Diff line number Diff line change
@@ -50,6 +50,7 @@
import jnr.posix.Times;

import org.jcodings.specific.UTF8Encoding;
import org.jruby.exceptions.MainExitException;
import org.jruby.truffle.nodes.RubyGuards;
import org.jruby.truffle.nodes.RubyNode;
import org.jruby.truffle.nodes.core.BasicObjectNodes;
@@ -155,8 +156,7 @@ public VMExitPrimitiveNode(RubyContext context, SourceSection sourceSection) {
@Specialization
public Object vmExit(int status) {
getContext().shutdown();
System.exit(status);
return nil();
throw new MainExitException(status);
}

@Fallback
Original file line number Diff line number Diff line change
@@ -61,6 +61,7 @@ public void run(MaterializedFrame frame, Node currentNode) {
return;

case "exit":
// We're in the debugger, not normal Ruby, so just hard exit here
System.exit(0);
break;

0 comments on commit 7187bb2

Please sign in to comment.