Index: /trunk/source/level-0/l0-cfm-support.lisp
===================================================================
--- /trunk/source/level-0/l0-cfm-support.lisp	(revision 14154)
+++ /trunk/source/level-0/l0-cfm-support.lisp	(revision 14155)
@@ -311,10 +311,5 @@
                      
 
-(defun open-shared-library (name)
-  "If the library denoted by name can be loaded by the operating system,
-return an object of type SHLIB that describes the library; if the library
-is already open, increment a reference count. If the library can't be
-loaded, signal a SIMPLE-ERROR which contains an often-cryptic message from
-the operating system."
+(defun open-shared-library-internal (name)
   (let* ((handle (with-cstrs ((name name))
                         (ff-call
@@ -401,10 +396,5 @@
 
 
-(defun open-shared-library (name)
-  "If the library denoted by name can be loaded by the operating system,
-return an object of type SHLIB that describes the library; if the library
-is already open, increment a reference count. If the library can't be
-loaded, signal a SIMPLE-ERROR which contains an often-cryptic message from
-the operating system."
+(defun open-shared-library-internal (name)
   (rlet ((type :signed))
     (let ((result (with-cstrs ((cname name))
@@ -589,10 +579,5 @@
 
 
-  (defun open-shared-library (name)
-    "If the library denoted by name can be loaded by the operating system,
-return an object of type SHLIB that describes the library; if the library
-is already open, increment a reference count. If the library can't be
-loaded, signal a SIMPLE-ERROR which contains an often-cryptic message from
-the operating system."
+  (defun open-shared-library-internal (name)
     (let* ((hmodule (with-cstrs ((name name))
                       (ff-call
@@ -990,3 +975,20 @@
               *fvs*))))
 
-
+(defun open-shared-library (name &optional (process #+darwin-target :initial
+                                                    #-darwin-target :current))
+  "If the library denoted by name can be loaded by the operating system,
+return an object of type SHLIB that describes the library; if the library
+is already open, increment a reference count. If the library can't be
+loaded, signal a SIMPLE-ERROR which contains an often-cryptic message from
+the operating system."
+  (if (or (eq process :current)
+          (eq process *current-process*)
+          (and (eq process :initial)
+               (eq *current-process* *initial-process*)))
+    (open-shared-library-internal name)
+    (call-in-process (lambda () (open-shared-library name))
+                     (if (eq process :initial)
+                       *initial-process*
+                       process))))
+
+
