Commit 7c670176 authored by mevenson@1c010e3e-69d0-11dd-93a8-456734b0d56f's avatar mevenson@1c010e3e-69d0-11dd-93a8-456734b0d56f
Browse files

All LispThread objects can act on a ProcessingTerminated exception.

Without this modifications, threads created with the
THREADS:MAKE-THREADS cannot successfully call the EXT:QUIT or EXT:EXIT
functions.  This prevented the SLIME quit implementation from
successfully quitting implementations.

Note that all threads can always execute a form like

   (jstatic "exit" "java.lang.System" 0)

to uncermoniously exit the JVM, so there is nothing gained
security-wise by preventing threads from using the official Lisp
interfaces.
parent a8993940
......@@ -41,6 +41,8 @@ import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.ConcurrentLinkedQueue;
import java.util.concurrent.atomic.AtomicInteger;
import java.text.MessageFormat;
public final class LispThread extends LispObject
{
static boolean use_fast_calls = false;
......@@ -98,10 +100,17 @@ public final class LispThread extends LispObject
catch (ThreadDestroyed ignored) {
// Might happen.
}
catch (ProcessingTerminated e) {
System.exit(e.getStatus());
}
catch (Throwable t) { // any error: process thread interrupts
if (isInterrupted()) {
processThreadInterrupts();
}
String msg
= MessageFormat.format("Ignoring uncaught exception {0}.",
t.toString());
Debug.warn(msg);
}
finally {
// make sure the thread is *always* removed from the hash again
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment