[Git][cmucl/cmucl][rtoy-fix-issue-41] Fix up minor issues in implementation
Raymond Toy
rtoy at common-lisp.net
Sat Sep 16 05:51:00 UTC 2017
Raymond Toy pushed to branch rtoy-fix-issue-41 at cmucl / cmucl
Commits:
65ce358d by Raymond Toy at 2017-09-15T22:50:47-07:00
Fix up minor issues in implementation
- process-alive-p should return T for continued processes
- Simplify prog-status slightly by making the status code array start
:signaled instead of nil.
- Update prog_status with enum to specify the codes to make it
clearer what they mean and to make it clearer that it matches the
expectations in prog-status.
- - - - -
2 changed files:
- src/code/run-program.lisp
- src/lisp/runprog.c
Changes:
=====================================
src/code/run-program.lisp
=====================================
--- a/src/code/run-program.lisp
+++ b/src/code/run-program.lisp
@@ -85,7 +85,7 @@
(declare (ignore ret))
(when (plusp pid)
(values pid
- (aref #(nil :signaled :stopped :continued :exited) what)
+ (aref #(:signaled :stopped :continued :exited) what)
code
(not (zerop corep))))))
@@ -217,7 +217,8 @@
(declare (type process proc))
(let ((status (process-status proc)))
(if (or (eq status :running)
- (eq status :stopped))
+ (eq status :stopped)
+ (eq status :continued))
t
nil)))
=====================================
src/lisp/runprog.c
=====================================
--- a/src/lisp/runprog.c
+++ b/src/lisp/runprog.c
@@ -3,6 +3,8 @@
*
*/
+#include <stdio.h>
+
#include <sys/ioctl.h>
#include <errno.h>
#include <fcntl.h>
@@ -85,6 +87,17 @@ spawn(char *program, char *argv[], char *envp[], char *pty_name,
* core - true (non-zero) if a core was produced
*/
+/*
+ * Status codes. Must be in the same order as in ext::prog-status in
+ * run-program.lisp
+ */
+enum status_code {
+ SIGNALED,
+ STOPPED,
+ CONTINUED,
+ EXITED
+};
+
void
prog_status(pid_t* pid, int* what, int* code, int* corep)
{
@@ -100,21 +113,23 @@ prog_status(pid_t* pid, int* what, int* code, int* corep)
}
if (WIFEXITED(status)) {
- *what = 4;
+ *what = EXITED;
*code = WEXITSTATUS(status);
*corep = 0;
} else if (WIFSIGNALED(status)) {
- *what = 1;
+ *what = SIGNALED;
*code = WTERMSIG(status);
*corep = WCOREDUMP(status);
} else if (WIFSTOPPED(status)) {
- *what = 2;
+ *what = STOPPED;
*code = WSTOPSIG(status);
*corep = 0;
} else if (WIFCONTINUED(status)) {
- *what = 3;
+ *what = CONTINUED;
*code = 0;
*corep = 0;
+ } else {
+ fprintf(stderr, "pid = %d, status = 0x%x\n", *pid, status);
}
return;
View it on GitLab: https://gitlab.common-lisp.net/cmucl/cmucl/commit/65ce358d918559662672cb1ae7f47cbe0d0eb9af
---
View it on GitLab: https://gitlab.common-lisp.net/cmucl/cmucl/commit/65ce358d918559662672cb1ae7f47cbe0d0eb9af
You're receiving this email because of your account on gitlab.common-lisp.net.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://mailman.common-lisp.net/pipermail/cmucl-cvs/attachments/20170916/a3e1a986/attachment-0001.html>
More information about the cmucl-cvs
mailing list