From: Robert J. M. <tb...@ro...> - 2006-12-18 22:09:44
|
On Mon, Dec 18, 2006 at 09:32:52PM +0100, Edi Weitz wrote: > This doesn't happen with LispWorks, though. At the moment, I have no > idea what the problem is. Maybe an SBCL expert is reading this and > can help. Definitely an SBCL bug. Paring it down, it's hanging at the call to make-instance -- it looks like any make-instance will do, it's not something socket-specific. That is, this is a minimal testcase which shows the problem is: (defclass foo () ()) (defun foo (&aux done) (flet ((do-it () (make-instance 'foo) (setf done t))) (sb-thread:make-thread #'do-it) (loop until done do (sleep 0.1)))) (foo) Remove the make-instance, and it terminates. Move the make-instance into the main thread, and it terminates. Leave it there, it hangs (and never gets to the point of running things like shared-initialize or lsof would report the socket is created). CC'd sbcl-devel, since getting into CLOS+thread bugs is way beyond my level of SBCL knowledge. I hope that's an open list, as I'm not subscribed there with this address. For those on that list but not tbnl-devel: compile-file + load'ing the above snippet hangs SBCL. -- Robert Macomber tb...@ro... |
From: Christophe R. <cs...@ca...> - 2006-12-18 22:14:37
|
"Robert J. Macomber" <tb...@ro...> writes: > Definitely an SBCL bug. Paring it down, it's hanging at the call to > make-instance -- it looks like any make-instance will do, it's not > something socket-specific. That is, this is a minimal testcase which > shows the problem is: > > (defclass foo () ()) > (defun foo (&aux done) > (flet ((do-it () > (make-instance 'foo) > (setf done t))) > (sb-thread:make-thread #'do-it) > (loop until done do (sleep 0.1)))) > (foo) > > Remove the make-instance, and it terminates. Move the make-instance > into the main thread, and it terminates. Leave it there, it hangs > (and never gets to the point of running things like shared-initialize > or lsof would report the socket is created). Loading a FASL file takes the big compiler lock. The first call to MAKE-INSTANCE in compiled code with constant class-name and initargs compiles an optimized constructor (a "ctor"). The end. > CC'd sbcl-devel, since getting into CLOS+thread bugs is way beyond my > level of SBCL knowledge. I hope that's an open list, as I'm not > subscribed there with this address. For those on that list but not > tbnl-devel: compile-file + load'ing the above snippet hangs SBCL. sbcl-devel is open, yes. tbnl-devel trimmed. Cheers, Christophe |