Skip to content

Commit

Permalink
Cause erlang:halt/[01] to actually halt
Browse files Browse the repository at this point in the history
We do this by thawing a special java.lang.Error-derived exception 
erjng.ErjangHalt, which is handles specially in the top-level
frames of erlang processes.

Should fix issue 59 trifork#59
except we still need to make kilim not print the stack trace.
  • Loading branch information
krestenkrab committed Sep 22, 2011
1 parent 94da399 commit d387520
Show file tree
Hide file tree
Showing 3 changed files with 16 additions and 1 deletion.
8 changes: 8 additions & 0 deletions src/main/java/erjang/EProc.java
Expand Up @@ -454,6 +454,9 @@ public void execute() throws Pausable {
result = e.reason();
death = e;

} catch (ErlangHalt e) {
throw e;

} catch (Throwable e) {

log.log(Level.SEVERE, "[java] exiting "+self_handle()+" with: ", e);
Expand All @@ -480,6 +483,8 @@ public void execute() throws Pausable {

try {
fun.invoke(this, new EObject[] { EString.fromString(msg) });
} catch (ErlangHalt e) {
throw e;
} catch (ThreadDeath e) {
throw e;
} catch (Throwable e) {
Expand All @@ -493,6 +498,9 @@ public void execute() throws Pausable {

do_proc_termination(result);

} catch (ErlangHalt e) {
throw e;

} catch (ThreadDeath e) {
throw e;

Expand Down
6 changes: 6 additions & 0 deletions src/main/java/erjang/ErlangHalt.java
@@ -0,0 +1,6 @@
package erjang;

/** thrown when erlang:halt is invoked */
public class ErlangHalt extends java.lang.Error {

}
3 changes: 2 additions & 1 deletion src/main/java/erjang/m/erlang/ErlProc.java
Expand Up @@ -51,6 +51,7 @@
import erjang.ErjangHibernateException;
import erjang.ErlangException;
import erjang.ErlangExit;
import erjang.ErlangHalt;
import erjang.ErlangUndefined;
import erjang.FunID;
import erjang.Import;
Expand Down Expand Up @@ -299,7 +300,7 @@ public static EObject halt(EProc proc, EObject value) {
}
ERT.shutdown();

return null;
throw new erjang.ErlangHalt();
}

@BIF
Expand Down

0 comments on commit d387520

Please sign in to comment.