<div class="gmail_quote">On Mon, Mar 8, 2010 at 12:41 AM, Tobias C. Rittweiler <span dir="ltr"><<a href="mailto:tcr@freebits.de">tcr@freebits.de</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;">
We overwrite si:terminal-interrupt in Slime. May there be a better<br>
solution involving that servicing thread in case ECL was built with<br>
threads?</blockquote><div><br></div><div>No, there is none. The servicing thread is not a normal lisp thread. It runs with interrupts disabled and polls for asynchronous signals using sigwait(). This is mandated by POSIX. Any other way is deemed unsafe, for signal handlers can not execute almost any C function -- and by that rule, they can not execute arbitrary lisp code.</div>
<div><br></div><div>Indeed the problem is the single-threaded version of ECL, which is not POSIX compliant in this respect. And from what I know about other lisps, they are also not POSIX compliant, even in the multithreaded case. This includes the whole process-interrupt business which is available in lisp implementations, including ECL: it is a nasty function and should be banned completely, as it causes a lot of problems from the implementation point of view, leading to horrible hacks and performance sinks.</div>
<div><br></div><div>Juanjo</div></div><br>-- <br>Instituto de Física Fundamental, CSIC<br>c/ Serrano, 113b, Madrid 28006 (Spain) <br><a href="http://juanjose.garciaripoll.googlepages.com">http://juanjose.garciaripoll.googlepages.com</a><br>