[slime-devel] Hints needed on why "Process inferior-lisp hangup" occurs

Willem Rein Oudshoorn woudshoo at xs4all.nl
Tue Jun 2 21:12:04 UTC 2009


Helmut Eller <heller at common-lisp.net> writes:

>> 1 Start slime with one of the two lisp implementaitons mentioned above
>> 2 Open "/dev/tty.NXT-DevB-1", which is a serial blue tooth connection
>>   to a Lego NXT brick.
>> 3 Turn of the Lego NXT brick (the other side of the serial connection)
>
> Fancy toys.

Yes, a great present from my girlfriend.

>> In contrast, if I do not run this through slime, but just run it from a
>> terminal the lisp implementaiton is not killed.  
>
> To me it looks like the subprocess receives a SIGHUP when the serial
> connection goes down.  At least http://en.wikipedia.org/wiki/SIGHUP
> mentions that as the historical usage of SIGHUP.

This is indeed the problem, see below for what happens.

> Perhaps it helps if you install a signal handler for SIGHUP to ignore
> it. 

This works.

> It might also help to bind process-connection-type in
> slime-start-lisp to 'pty instead of nil.

This does not work.

After some playing around, I have some better idea of what happens.

* SIGHUP is send if darwin detects that the controlling terminal of a
  process is disconnected.
* SIGHUP kills the lisp process
* If lisp is started from the command line, the lisp process has a
  controlling terminal, presumably setup by the shell.
* If lisp is started by slime, the lisp process does not have a
  controlling terminal.
* If the lisp image opens the /dev/tty.NXT-DevB-1 device and the lisp
  process does not have a controlling terminal, the /dev/tty.NXT-DevB-1
  becomes a controlling terminal.

The upshot is, that:

1 - If lisp is started through slime, the NXT device will become a
controlling terminal and therefore, breaking the connection will send a
SIGHUP to the lisp process. Duefully killing the lisp process.

2- If lisp is started from the command line, the NXT device does NOT
become a controlling terminal and therefore lisp is not killed
by breaking the bluetooth connection.


So it seems that everything works as it should.  Although, I rather not
spend my time debugging these kind of issues :-(.

I assume now that I have to use implementation dependend hacks to 
configure the /dev/tty.NXT-DevB-1 device to configure the terminal
NOT to send SIGHUP when connection goes away, or make sure the terminal
will not be a controlling terminal.  Bleh.

Anyway, thanks for the help, it has been educational.

Wim Oudshoorn.


  






More information about the slime-devel mailing list