X-Git-Url: http://repo.macrolet.net/gitweb/?a=blobdiff_plain;f=src%2Fcode%2Fforeign.lisp;h=a735e7646fccdcae00bb506c6b0a0ae3c2a3bfe9;hb=d720bc359f03734ccb9baf66cb45dc01d623f369;hp=cd838675613687198af7227565cda9821a3aadfa;hpb=b43d36ddab647b955432acc51a6d2aec3a128482;p=sbcl.git diff --git a/src/code/foreign.lisp b/src/code/foreign.lisp index cd83867..a735e76 100644 --- a/src/code/foreign.lisp +++ b/src/code/foreign.lisp @@ -16,7 +16,8 @@ (defun extern-alien-name (name) (handler-case - (coerce name 'base-string) + #!-win32 (coerce name 'base-string) + #!+win32 (concatenate 'base-string "_" name) (error () (error "invalid external alien name: ~S" name)))) @@ -138,7 +139,10 @@ if the symbol isn't found." (symbol-address unsigned))) (dladdr (function unsigned unsigned (* (struct dl-info))) :extern "dladdr")) - (let ((err (alien-funcall dladdr addr (addr info)))) + (let ((err (without-gcing + ;; On eg. Darwin GC can could otherwise interrupt + ;; the call while dladdr is holding a lock. + (alien-funcall dladdr addr (addr info))))) (if (zerop err) nil (slot info 'symbol))))