diff --git a/src/clj/clojure/core.clj b/src/clj/clojure/core.clj index 1d02e13596..ac508a5454 100644 --- a/src/clj/clojure/core.clj +++ b/src/clj/clojure/core.clj @@ -7058,15 +7058,7 @@ fails, attempts to require sym's namespace and retries." {:added "1.1" :static true} [f] - (let [f (binding-conveyor-fn - (fn [& args] - (try - (apply f args) - (catch Throwable t - (clojure.storm.Tracer/handleThreadException - (Thread/currentThread) - t) - (throw t))))) + (let [f (binding-conveyor-fn f) fut (.submit clojure.lang.Agent/soloExecutor ^Callable f)] (reify clojure.lang.IDeref diff --git a/src/clj/clojure/main.clj b/src/clj/clojure/main.clj index 0a0a0e8b9a..65b5c0f324 100644 --- a/src/clj/clojure/main.clj +++ b/src/clj/clojure/main.clj @@ -450,8 +450,7 @@ by default when a new command-line REPL is started."} repl-requires (print value) (catch Throwable e (throw (ex-info nil {:clojure.error/phase :print-eval-result} e))))))) - (catch Throwable e - (clojure.storm.Tracer/handleThreadException (Thread/currentThread) e) + (catch Throwable e (caught e) (set! *e e))))] (with-bindings diff --git a/src/jvm/clojure/lang/Agent.java b/src/jvm/clojure/lang/Agent.java index 909d1b27b1..d730b989f3 100644 --- a/src/jvm/clojure/lang/Agent.java +++ b/src/jvm/clojure/lang/Agent.java @@ -119,8 +119,7 @@ static void doRun(Action action){ } catch(Throwable e) { - Tracer.handleThreadException(Thread.currentThread(), e); - error = e; + error = e; } if(error == null) diff --git a/src/jvm/clojure/lang/Compiler.java b/src/jvm/clojure/lang/Compiler.java index 55495f2edf..7b0491881d 100644 --- a/src/jvm/clojure/lang/Compiler.java +++ b/src/jvm/clojure/lang/Compiler.java @@ -7358,7 +7358,7 @@ public static Object eval(Object form) { if (ce instanceof CompilerException) { Throwable cause = ce.getCause(); - if(cause != null && (cause.getMessage().equals("Method code too large!"))) + if(cause != null && cause.getMessage() !=null && cause.getMessage().equals("Method code too large!")) { System.out.println("Method too large, re-evaluating without storm instrumentation."); Var.pushThreadBindings(RT.map(Emitter.INSTRUMENTATION_ENABLE, false)); diff --git a/src/jvm/clojure/storm/Tracer.java b/src/jvm/clojure/storm/Tracer.java index 497ecda6c3..6128449b7b 100644 --- a/src/jvm/clojure/storm/Tracer.java +++ b/src/jvm/clojure/storm/Tracer.java @@ -16,36 +16,19 @@ public class Tracer { private static IFn traceFnUnwindFn = null; private static IFn traceExprFn = null; private static IFn traceBindFn = null; - private static IFn handleExceptionFn = null; - + // TODO: this are depracated, remove when it is safe private static Keyword TRACE_FN_CALL_FN_KEY = Keyword.intern(null, "trace-fn-call-fn-key"); private static Keyword TRACE_FN_RETURN_FN_KEY = Keyword.intern(null, "trace-fn-return-fn-key"); private static Keyword TRACE_EXPR_FN_KEY = Keyword.intern(null, "trace-expr-fn-key"); private static Keyword TRACE_BIND_FN_KEY = Keyword.intern(null, "trace-bind-fn-key"); - private static Keyword HANDLE_EXCEPTION_FN_KEY = Keyword.intern(null, "handle-exception-fn-key"); - + private static Keyword TRACE_FN_CALL_FN = Keyword.intern(null, "trace-fn-call-fn"); private static Keyword TRACE_FN_RETURN_FN = Keyword.intern(null, "trace-fn-return-fn"); private static Keyword TRACE_FN_UNWIND_FN = Keyword.intern(null, "trace-fn-unwind-fn"); private static Keyword TRACE_EXPR_FN = Keyword.intern(null, "trace-expr-fn"); private static Keyword TRACE_BIND_FN = Keyword.intern(null, "trace-bind-fn"); - private static Keyword HANDLE_EXCEPTION_FN = Keyword.intern(null, "handle-exception-fn"); - - static - { - // For all new threads created - Thread.setDefaultUncaughtExceptionHandler((t, e) -> { - handleThreadException(t, e); - }); - - } - - public static void handleThreadException(Thread thread, Throwable ex) { - if (handleExceptionFn != null) - handleExceptionFn.invoke(thread, ex); - } - + static public void traceFnCall(Object[] fnArgs, String fnNs, String fnName, int formId) { if (traceFnCallFn != null) traceFnCallFn.invoke(null, fnNs, fnName, fnArgs, formId); @@ -103,10 +86,7 @@ public static void setTraceFnsCallbacks(IPersistentMap callbacks) { if (callbacks.valAt(TRACE_BIND_FN_KEY) != null) traceBindFn = (IFn) callbacks.valAt(TRACE_BIND_FN_KEY); - - if (callbacks.valAt(HANDLE_EXCEPTION_FN_KEY) != null) - handleExceptionFn = (IFn) callbacks.valAt(HANDLE_EXCEPTION_FN_KEY); - + // New keys if (callbacks.valAt(TRACE_FN_CALL_FN) != null) @@ -123,10 +103,6 @@ public static void setTraceFnsCallbacks(IPersistentMap callbacks) { if (callbacks.valAt(TRACE_BIND_FN) != null) traceBindFn = (IFn) callbacks.valAt(TRACE_BIND_FN); - - if (callbacks.valAt(HANDLE_EXCEPTION_FN) != null) - handleExceptionFn = (IFn) callbacks.valAt(HANDLE_EXCEPTION_FN); - }