Raymond Toy pushed to branch rtoy-fix-issue-41 at cmucl / cmucl

Commits:

2 changed files:

Changes:

  • src/code/run-program.lisp
    ... ... @@ -85,7 +85,7 @@
    85 85
         (declare (ignore ret))
    
    86 86
         (when (plusp pid)
    
    87 87
           (values pid      
    
    88
    -	      (aref #(nil :signaled :stopped :continued :exited) what)
    
    88
    +	      (aref #(:signaled :stopped :continued :exited) what)
    
    89 89
     	      code
    
    90 90
     	      (not (zerop corep))))))
    
    91 91
     
    
    ... ... @@ -217,7 +217,8 @@
    217 217
       (declare (type process proc))
    
    218 218
       (let ((status (process-status proc)))
    
    219 219
         (if (or (eq status :running)
    
    220
    -	    (eq status :stopped))
    
    220
    +	    (eq status :stopped)
    
    221
    +	    (eq status :continued))
    
    221 222
           t
    
    222 223
           nil)))
    
    223 224
     
    

  • src/lisp/runprog.c
    ... ... @@ -3,6 +3,8 @@
    3 3
      *
    
    4 4
      */
    
    5 5
     
    
    6
    +#include <stdio.h>
    
    7
    +
    
    6 8
     #include <sys/ioctl.h>
    
    7 9
     #include <errno.h>
    
    8 10
     #include <fcntl.h>
    
    ... ... @@ -85,6 +87,17 @@ spawn(char *program, char *argv[], char *envp[], char *pty_name,
    85 87
      * core   - true (non-zero) if a core was produced
    
    86 88
      */
    
    87 89
     
    
    90
    +/*
    
    91
    + * Status codes.  Must be in the same order as in ext::prog-status in
    
    92
    + * run-program.lisp
    
    93
    + */
    
    94
    +enum status_code {
    
    95
    +    SIGNALED,
    
    96
    +    STOPPED,
    
    97
    +    CONTINUED,
    
    98
    +    EXITED
    
    99
    +};
    
    100
    +    
    
    88 101
     void
    
    89 102
     prog_status(pid_t* pid, int* what, int* code, int* corep)
    
    90 103
     {
    
    ... ... @@ -100,21 +113,23 @@ prog_status(pid_t* pid, int* what, int* code, int* corep)
    100 113
         }
    
    101 114
     
    
    102 115
         if (WIFEXITED(status)) {
    
    103
    -        *what = 4;
    
    116
    +        *what = EXITED;
    
    104 117
             *code = WEXITSTATUS(status);
    
    105 118
             *corep = 0;
    
    106 119
         } else if (WIFSIGNALED(status)) {
    
    107
    -        *what = 1;
    
    120
    +        *what = SIGNALED;
    
    108 121
             *code = WTERMSIG(status);
    
    109 122
             *corep = WCOREDUMP(status);
    
    110 123
         } else if (WIFSTOPPED(status)) {
    
    111
    -        *what = 2;
    
    124
    +        *what = STOPPED;
    
    112 125
             *code = WSTOPSIG(status);
    
    113 126
             *corep = 0;
    
    114 127
         } else if (WIFCONTINUED(status)) {
    
    115
    -        *what = 3;
    
    128
    +        *what = CONTINUED;
    
    116 129
             *code = 0;
    
    117 130
             *corep = 0;
    
    131
    +    } else {
    
    132
    +        fprintf(stderr, "pid = %d, status = 0x%x\n", *pid, status);
    
    118 133
         }
    
    119 134
     
    
    120 135
         return;