SETUP-SLAVE-PTY: close PTY in case of error
authorStelian Ionescu <sionescu@cddr.org>
Tue, 2 Apr 2013 19:55:05 +0000 (2 21:55 +0200)
committerStelian Ionescu <sionescu@cddr.org>
Tue, 2 Apr 2013 19:55:05 +0000 (2 21:55 +0200)
src/os/create-process-unix.lisp

index 0bc18c1..41a1d67 100644 (file)
 
 (defun setup-slave-pty (new-ctty-p)
   (if new-ctty-p
-      (let ((ptmfd (isys:openpt (logior isys:o-rdwr isys:o-noctty isys:o-cloexec))))
-        (isys:grantpt ptmfd)
-        (isys:unlockpt ptmfd)
-        (values ptmfd (isys:ptsname ptmfd)))
+      (let (ptmfd)
+        (unwind-protect-case ()
+            (progn
+              (setf ptmfd (isys:openpt (logior isys:o-rdwr isys:o-noctty isys:o-cloexec)))
+              (isys:grantpt ptmfd)
+              (isys:unlockpt ptmfd)
+              (values ptmfd (isys:ptsname ptmfd)))
+          (:abort (when ptmfd (isys:close ptmfd)))))
       (values nil nil)))
 
 (defmacro with-pty ((new-ctty-p ptmfd pts) &body body)