Index: /branches/win64/level-1/linux-files.lisp
===================================================================
--- /branches/win64/level-1/linux-files.lisp	(revision 9550)
+++ /branches/win64/level-1/linux-files.lisp	(revision 9551)
@@ -1407,5 +1407,4 @@
   (unless (every #'(lambda (a) (typep a 'simple-string)) args)
     (error "Program args must all be simple strings : ~s" args))
-;  (push (native-untranslated-namestring program) args)
   (push program args)
   (let* ((token (list 0))
@@ -1456,9 +1455,11 @@
            )
       (dolist (fd close-in-parent) (fd-close fd))
-      (unless (external-process-pid proc)
-        (dolist (fd close-on-error) (fd-close fd)))
-      (when (and wait (external-process-pid proc))
-        (with-interrupts-enabled
-            (wait-on-semaphore (external-process-completed proc)))))
+      (if (external-process-pid proc)
+	(when (and wait (external-process-pid proc))
+	  (with-interrupts-enabled
+	      (wait-on-semaphore (external-process-completed proc))))
+        (progn
+	  (dolist (fd close-on-error) (fd-close fd))
+	  (error "Process execution failed"))))
     (and (external-process-pid proc) proc)))
 
@@ -1484,11 +1485,12 @@
 
 (defun run-external-process (proc in-fd out-fd error-fd &optional env)
-  ;; stub, stub
-  (let* ((args (external-process-args proc))
-	 (child-pid (exec-with-io-redirection in-fd out-fd error-fd args)))
-    (setf (external-process-pid proc) child-pid)
-    (add-external-process proc)
-    (signal-semaphore (external-process-signal proc))
-    (monitor-external-process proc)))
+  (handler-case
+      (let* ((args (external-process-args proc))
+	     (child-pid (exec-with-io-redirection in-fd out-fd error-fd args)))
+	(setf (external-process-pid proc) child-pid)
+	(add-external-process proc)
+	(signal-semaphore (external-process-signal proc))
+	(monitor-external-process proc))
+    (error (condition) (signal-semaphore (external-process-signal proc)))))
 
 (defun join-strings (strings)
