external-process-wait: handle stopped process

we have a few possibilities here. Handle them correctly.
This commit is contained in:
Daniel Kochmański 2017-02-19 14:41:25 +01:00
parent 4554336fae
commit 2701310046

View file

@ -34,10 +34,15 @@
(let ((pid (external-process-pid process)))
(when pid
(multiple-value-bind (status code pid) (si:waitpid pid wait)
(unless (and wait (null status) (null code) (null pid))
(setf (external-process-pid process) pid
(external-process-%status process) status
(external-process-%code process) code)))))
(case status
((:exitted :signalled :abort :error)
(setf (external-process-pid process) nil
(external-process-%status process) status
(external-process-%code process) code))
((:stopped :running)
(setf (external-process-pid process) pid
(external-process-%status process) status
(external-process-%code process) code))))))
(values (external-process-%status process)
(external-process-%code process)))