Lisp HUG Maillist Archive

Starting multiprocessing without races with SLIME


Sometimes on restarting my saved image with SLIME I get this error:

NIL is not of type MP::BASIC-PROCESS when accessing slot MP:PROCESS-NAME.
   [Condition of type SIMPLE-TYPE-ERROR]
[...]
Backtrace:
  0: CONDITIONS::CONDITIONS-ERROR (:INVISIBLEP ..)
  1: SYSTEM::REQUIRE-IMP (:SWANK-ASDF #P"/amd/saturn/home/saturn/0/fremlin/.slime/fasl/2009-03-09/lispworks-5.1.2-linux-x86/contrib/swank-asdf.ufasl" *MODULES* NIL)
      Locals:
        SCM:MODULE-NAME = :SWANK-ASDF
        PATHNAME = #P"/amd/saturn/home/saturn/0/fremlin/.slime/fasl/2009-03-09/lispworks-5.1.2..
        SYSTEM::REGISTRY = *MODULES*
        FUNCTION = NIL
  2: REQUIRE (:SWANK-ASDF &OPTIONAL #P"/amd/saturn/home/saturn/0/fremlin/.slime/fasl/2009-03-09/lispworks-5.1.2-linux-x86/contrib/swank-asdf.ufasl")
  3: SWANK:SWANK-REQUIRE (:SWANK-ASDF &OPTIONAL NIL)
  4: SYSTEM::%INVOKE NIL
  5: SYSTEM::%EVAL ((SWANK:SWANK-REQUIRE :SWANK-ASDF))

This appears to be some sort of a race between starting multiprocessing
and starting SLIME, and it seems to occur more regularly when the Lisp
image is restarted a couple of times in quick succession.

I built the image with this script. I guess the most important bit is

(save-image (format nil "lispworks-~A" (expt 2 (ceiling (log (log most-positive-fixnum 2) 2))))
	    :restart-function 'mp:initialize-multiprocessing
	    :multiprocessing t
	    :console t 
	    :environment nil)


Is this the wrong way to build a Lispworks for use with SLIME?


Anyway here is the rest of the build script

(load-all-patches)

(load "/usr/share/common-lisp/source/cl-asdf/asdf.lisp")

(load "/usr/share/common-lisp/source/common-lisp-controller/common-lisp-controller.lisp")

(let ((type (lisp-implementation-type))
      (version (lisp-implementation-version)))
    
  #+allegro 
  (progn
    (setf type "allegro"))

  (setf version (subseq version 0 (position #\Space version)))
  
  (common-lisp-controller:init-common-lisp-controller-v4 
   (format nil "~A-~A-~A"  
	   type
	   version
	   (floor (log most-positive-fixnum 2)))))

(defun common-lisp-controller::get-uid ()
  0)

(asdf:operate 'asdf:load-op 'flexi-streams)

(load "/usr/share/common-lisp/source/common-lisp-controller/common-lisp-controller.lisp")

(save-image (format nil "lispworks-~A" (expt 2 (ceiling (log (log most-positive-fixnum 2) 2))))
	    :restart-function 'mp:initialize-multiprocessing
	    :multiprocessing t
	    :console t 
	    :environment nil)
(quit)


Updated at: 2020-12-10 08:41 UTC