<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
  
</head>
<body text="#000000" bgcolor="#ffffff">
You added  ccl:*quit-interrupt-hook*, which is called<br>
on SIGTERM.  Does it have these problems? It might<br>
not be that important for us, since what we're going<br>
to do is a shutdown anyway, but, if it's going to be<br>
flaky, I'd at least like to know what we're up against.<br>
Thanks.<br>
<br>
-- Dan<br>
<br>
Gary Byers wrote:
<blockquote type="cite" cite="mid:alpine.BSF.2.00.1007052106300.18093@abq.clozure.com"><br>
  <br>
On Mon, 5 Jul 2010, Scott L. Burson wrote:
  <br>
  <br>
  <blockquote type="cite">Hi,
    <br>
    <br>
I am porting a large, old application from Allegro to Clozure.  The app
runs
    <br>
under Emacs -- it has its own code, on both the Emacs and Lisp sides,
for
    <br>
doing this -- and Emacs sometimes gets the Lisp process's attention by
    <br>
sending it a Unix signal (normally SIGUSR1 or SIGUSR2, but this is
    <br>
configurable).
    <br>
    <br>
Allegro provides a relatively straightforward way to set up a Lisp
function
    <br>
to be called when a signal is received, but I don't see anything like
that
    <br>
in CCL.  Have I just overlooked it?  If not, how hard would it be to
create?
    <br>
  </blockquote>
  <br>
There isn't any general way of defining signal handlers in CCL.  The
issue
  <br>
comes up every few months on this list, and the response is usually
"yeah,
  <br>
we should offer that.  Someday."  It's almost certainly doable, but
there are
  <br>
threads/GC issues that make the implementation complicated.
  <br>
  <br>
Additionally, the implementation of things like PROCESS-INTERRUPT and
the
  <br>
mechanism that the GC uses to suspend/resume other threads involves
sending
  <br>
signals between threads; on some platforms (Darwin), the implementation
uses
  <br>
SIGUSR1 and SIGUSR2 and possibly something else that the OS never
raises, and
  <br>
it's not clear that there are any leftover unused signal numbers ...
  <br>
  <br>
It might be tempting to just do:
  <br>
  <br>
(defcallback my-signal-handler (:int signo :void)
  <br>
  (some-code-that-can-run-at-interrupt-time))
  <br>
  <br>
(#_signal #$some-signal my-signal-handler)
  <br>
  <br>
and that'd work some of the time.  It'd fail (subtly or spectacularly)
if the
  <br>
GC ran in some other thread and that signal handler interrupted some
lisp code.
  <br>
(The GC would likely not be able to see the lisp object references that
that
  <br>
interrupted code was making, and things would go downhill from there.) 
There
  <br>
are some other issues there, so any viable mechanism would have to deal
with
  <br>
those issues around a call to your code.
  <br>
  <br>
  <br>
  <blockquote type="cite"><br>
Alternatives exist, of course -- I could set up another stream with a
Lisp
    <br>
thread reading from it, and just send a character on the stream. 
Sounds
    <br>
like a bit of work, though I haven't looked into it; not sure if Emacs
will
    <br>
cooperate.  Anyway I wanted to explore the signal handling approach
first,
    <br>
since that is how it works with Allegro.
    <br>
    <br>
Any advice?
    <br>
    <br>
-- Scott
    <br>
    <br>
    <br>
    <br>
  </blockquote>
  <pre wrap="">
<hr width="90%" size="4">
_______________________________________________
Openmcl-devel mailing list
<a href="mailto:Openmcl-devel@clozure.com" class="moz-txt-link-abbreviated">Openmcl-devel@clozure.com</a>
<a href="http://clozure.com/mailman/listinfo/openmcl-devel" class="moz-txt-link-freetext">http://clozure.com/mailman/listinfo/openmcl-devel</a>
  </pre>
</blockquote>
</body>
</html>