[slime-devel] Re: Slime hanging on foreign function calls with Lispworks

Glenn Ehrlich glenn.ehrlich at specastro.com
Tue Jul 5 19:40:02 UTC 2005

Glenn Ehrlich <glenn.ehrlich <at> specastro.com> writes:

> Edi Weitz <edi <at> agharta.de> writes:
> > 
> > On Wed, 29 Jun 2005 13:02:09 -0400, "Shawn Nicholson" <shawn.nicholson <at>
> dnamerican.com> wrote:
> > 
> > >   My question can be disregarded.  I see in the known problems
> > > document that this issue does not currently have a known reason or
> > > solution.
> > 
> > You might also want to search Gmane for a thread called "Problems with
> > LWW FFI" or something like that.  Martin Simmons there describes what
> > he thinks is the underlying problem.  No solution yet, though...
> > 
> > Cheers,
> > Edi.
> > 
> This is really weird.  Before the July 3 CVS, SLIME hanged for me when calling
> FFI (using LispWorks 4.4.5 Personal Edition), but with the July 3 CVS, I can
> call foreign functions just fine from SLIME.  This is with a DLL that was
> built
> with MS Visual C++ version 6.0 and MinGW, both built with default options, and
> not doing anything different than I had before.
> I'd like to see this stay fixed :)

Edi asked me to try out the test.dll that appeared in this post:


so I downloaded <http://zappa.agharta.de/test.dll> to a working directory, ,cd
in the slime repl to that directory and did this:

CL-USER> (fli:register-module "test.dll")
CL-USER> (fli:define-foreign-function foo
	     ((x :int))
	   :result-type :int)
CL-USER> (foo 21)

So, the particulars are:

Windows 2000, SP4
"GNU Emacs 21.3.1 (i386-mingw-nt5.0.2195) of 2004-03-10 on NYAUMO"
(the standard download from fsf)
SLIME 2005-07-03
LispWorks 4.4.5 Personal Edition

Just checked on a cleaned out version of SLIME 2005-06-21 and test.dll also

In other messages in the same thread, doing:
(capi:display-message "foo")
is supposed to hang in a fresh SLIME as well, and for me, I get the message box.

I thought it might be because I called fli:register-module "test.dll"), but
here's a fresh slime where I don't (I'm in some other directory other than

; SLIME 2005-06-21
CL-USER> (fli:define-foreign-function foo
	     ((x :int))
	   :result-type :int
	   :module "c:/home/glenn/test.dll")
CL-USER> (foo 21)

Just to be totally tedious, here's all of my slime related setup:

(require 'slime)
(slime-setup :autodoc t)
(add-hook 'lisp-mode-hook (lambda () (slime-mode t)))
(add-hook 'inferior-lisp-mode-hook (lambda () (inferior-slime-mode t)))
(define-key slime-mode-map [(control c) (control backspace)] 'cltl2-lookup)
(setq common-lisp-hyperspec-root "file:///usr/local/doc/HyperSpec/")
(define-key slime-mode-map [(control c) (s)] 'slime-selector)

(defun go-slime-lispworks ()
  (shell-command (expand-file-name "~/bin/start_lispworks.vbs"))
  (slime-connect "" 4005))

I start up emacs, M-x go-slime-lispworks, which starts up lispworks via this VB

Dim Wsh
Set Wsh = WScript.CreateObject("WScript.Shell")

rem Start LispWorks

rem Wait for a few seconds for it to start

rem Press the OK button on the splash screen
Wsh.AppActivate "Upgrade LispWorks"
Wsh.SendKeys "{ENTER}"

rem Load the SLIME startup code
rem Wsh.AppActivate "LispWorks Personal Edition 4.4.5"
Wsh.AppActivate "Listener 1"
str = "load " & """c:/home/glenn/bin/slime.lisp"""
Wsh.SendKeys (str)
Wsh.SendKeys "{ENTER}"

rem Toggle back to Emacs
rem Wsh.SendKeys "%{TAB}"

The above script calls my ~/bin/slime.lisp:

(load "/usr/local/share/emacs/slime/swank-loader.lisp")
(swank::create-swank-server 4005 :spawn #'swank::simple-announce-function t)
(load "/usr/local/share/emacs/slime/present")
(load "/home/glenn/.lispworks")

The .lispworks just does a bunch of asdf stuff and sets the compiler options.

Other than I was getting the hanging just last week, I can't explain why it's
all of sudden working with 2 recent versions of slime.

Just another check, I was wondering if anything I was loading via asdf from my
.lispworks was helping out, so I started a fresh LispWorks (not via my VB
script), manually started up swank (just the 2 lines above, I didn't load
present.lisp or my .lispworks).  Then I did a slime-connect, and I still got a
successful result.

For the life of me, I can't make it break at the moment.

Hope some of this might help.


More information about the slime-devel mailing list