X-Git-Url: http://repo.macrolet.net/gitweb/?a=blobdiff_plain;f=src%2Fcode%2Ftarget-thread.lisp;h=773fe9c9d38c74325b31918eb0c0113ec6a9b3bf;hb=c712f88b26cd7547ee984b90e18c134401335bc3;hp=ec60aab478db8af9d6ece68bdaba5e25276124fd;hpb=83fc8f3154fa6ffe1c9451399eb23586ae07357d;p=sbcl.git diff --git a/src/code/target-thread.lisp b/src/code/target-thread.lisp index ec60aab..773fe9c 100644 --- a/src/code/target-thread.lisp +++ b/src/code/target-thread.lisp @@ -1360,7 +1360,7 @@ Invoking the initial ABORT restart estabilished by MAKE-THREAD terminates the thread. See also: RETURN-FROM-THREAD, ABORT-THREAD." - #!-sb-thread (declare (ignore function name arguments)) + #!-sb-thread (declare (ignore function name arguments ephemeral)) #!-sb-thread (error "Not supported in unithread builds.") #!+sb-thread (assert (or (atom arguments) (null (cdr (last arguments)))) @@ -1368,10 +1368,9 @@ See also: RETURN-FROM-THREAD, ABORT-THREAD." "Argument passed to ~S, ~S, is an improper list." 'make-thread arguments) #!+sb-thread - (tagbody + (let ((thread (%make-thread :name name :%ephemeral-p ephemeral))) (with-mutex (*make-thread-lock*) - (let* ((thread (%make-thread :name name :%ephemeral-p ephemeral)) - (setup-sem (make-semaphore :name "Thread setup semaphore")) + (let* ((setup-sem (make-semaphore :name "Thread setup semaphore")) (real-function (coerce function 'function)) (arguments (if (listp arguments) arguments @@ -1461,15 +1460,11 @@ See also: RETURN-FROM-THREAD, ABORT-THREAD." ;; thread. (without-interrupts (with-pinned-objects (initial-function) - (let ((os-thread - (%create-thread - (get-lisp-obj-address initial-function)))) - (when (zerop os-thread) - (go :cant-spawn)) - (wait-on-semaphore setup-sem) - (return-from make-thread thread)))))) - :cant-spawn - (error "Could not create a new thread."))) + (if (zerop + (%create-thread (get-lisp-obj-address initial-function))) + (setf thread nil) + (wait-on-semaphore setup-sem)))))) + (or thread (error "Could not create a new thread.")))) (defun join-thread (thread &key (default nil defaultp) timeout) #!+sb-doc @@ -1610,12 +1605,12 @@ the state of a thread: (interrupt-thread thread #'break) Short version: be careful out there." - #!+win32 + #!+(and (not sb-thread) win32) + #!+(and (not sb-thread) win32) (declare (ignore thread)) - #!+win32 (with-interrupt-bindings (with-interrupts (funcall function))) - #!-win32 + #!-(and (not sb-thread) win32) (let ((os-thread (thread-os-thread thread))) (cond ((not os-thread) (error 'interrupt-thread-error :thread thread))