Hi Blake,
I am in the process of embedding ABCL into a web server application I have. While it is okay for an error to either be caught and handled, or not handled and having the thread terminate, it definitely is not okay for an error condition to kill the entire server.
I am executing a (load "file") command (where "file" doesn't exist) from Java and it kills the entire server. I tried enclosing it in a try/catch block (I tried Exception & Throwable) and it still killed the server.
That's not very nice indeed. Because of your report, I checked our use of System.exit(). Fortunately its use is limited: once in Autoload.java, which should probably be replaced by something not as drastic (how about IrrecoverableSituationException?) and once by Interpreter.java. Unfortunately, the latter is in a function called kill() which also has two usages. The main use being in a function called Lisp.exit(). That function unfortunately has 13 uses.
Those will need to be reviewed and replaced one by one. I'll have a look.
I then replaced the load with (without a try/catch):
File file = null; file.canRead();
And the error didn't kill the server. I just got a backtrace and the thread ended. (I think the error was caught higher up.)
Is ABCL calling System.exit() or doing something similar?
Are there any other forbidden functions for "well behaving" libraries?
Regards,
Erik.