X-Git-Url: http://repo.macrolet.net/gitweb/?a=blobdiff_plain;f=contrib%2Fsb-posix%2Finterface.lisp;h=5c8a87774fca7b7ec4f239d888a75d476385acd7;hb=838316d0ad9affb2a4284ece65798aed6313d7e7;hp=9d248ddf01e503a1956b2f1abb4716120eccee39;hpb=dca20740848a3e316371460a25be29fd574850ed;p=sbcl.git diff --git a/contrib/sb-posix/interface.lisp b/contrib/sb-posix/interface.lisp index 9d248dd..5c8a877 100644 --- a/contrib/sb-posix/interface.lisp +++ b/contrib/sb-posix/interface.lisp @@ -283,27 +283,27 @@ + ;; FIXME this is a lie, of course this can fail, but there's no + ;; error handling here yet! #+mach-exception-handler - (progn - ;; FIXME this is a lie, of course this can fail, but there's no - ;; error handling here yet! - (define-call "setup_mach_exceptions" void never-fails) - (define-call ("posix_fork" :c-name "fork") pid-t minusp) - (defun fork () - (tagbody - (sb-thread::with-all-threads-lock - (when (cdr sb-thread::*all-threads*) - (go :error)) - (let ((pid (posix-fork))) - (when (= pid 0) - (setup-mach-exceptions)) - (return-from fork pid))) - :error - (error "Cannot fork with multiple threads running."))) - (export 'fork :sb-posix)) - - #-mach-exception-handler - (define-call "fork" pid-t minusp) + (define-call "setup_mach_exceptions" void never-fails) + (define-call ("posix_fork" :c-name "fork") pid-t minusp) + (defun fork () + "Forks the current process, returning 0 in the new process and the PID of +the child process in the parent. Forking while multiple threads are running is +not supported." + (tagbody + (sb-thread::with-all-threads-lock + (when (cdr sb-thread::*all-threads*) + (go :error)) + (let ((pid (posix-fork))) + #+mach-exception-handler + (when (= pid 0) + (setup-mach-exceptions)) + (return-from fork pid))) + :error + (error "Cannot fork with multiple threads running."))) + (export 'fork :sb-posix) (define-call "getpgid" pid-t minusp (pid pid-t)) (define-call "getppid" pid-t never-fails)