Working on bug 184993: Writing to zombie process causes Ikarus to exit.
This commit is contained in:
parent
b00e56face
commit
264c58c4a4
|
@ -1172,7 +1172,8 @@
|
||||||
#| 18 |# "access fault"
|
#| 18 |# "access fault"
|
||||||
#| 19 |# "file already exists"
|
#| 19 |# "file already exists"
|
||||||
#| 20 |# "invalid file name"
|
#| 20 |# "invalid file name"
|
||||||
#| 21 |# "non-blocking operation would block"))
|
#| 21 |# "non-blocking operation would block"
|
||||||
|
#| 22 |# "broken pipe (e.g., writing to a closed process or socket)"))
|
||||||
|
|
||||||
(define (io-error who id err)
|
(define (io-error who id err)
|
||||||
(let ([err (fxnot err)])
|
(let ([err (fxnot err)])
|
||||||
|
|
|
@ -1 +1 @@
|
||||||
1358
|
1359
|
||||||
|
|
|
@ -34,6 +34,7 @@ ikrt_io_error(){
|
||||||
case EEXIST : return fix(-20);
|
case EEXIST : return fix(-20);
|
||||||
case EINVAL : return fix(-21);
|
case EINVAL : return fix(-21);
|
||||||
case EAGAIN : return fix(-22); /* hardcoded in ikarus.io.ss */
|
case EAGAIN : return fix(-22); /* hardcoded in ikarus.io.ss */
|
||||||
|
case EPIPE : return fix(-23);
|
||||||
}
|
}
|
||||||
return fix(-1);
|
return fix(-1);
|
||||||
}
|
}
|
||||||
|
|
|
@ -237,6 +237,18 @@ register_handlers(){
|
||||||
fprintf(stderr, "Sigaction Failed: %s\n", strerror(errno));
|
fprintf(stderr, "Sigaction Failed: %s\n", strerror(errno));
|
||||||
exit(-1);
|
exit(-1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* ignore sigpipes */
|
||||||
|
{
|
||||||
|
sigset_t set;
|
||||||
|
sigprocmask(0, 0, &set); /* get the set */
|
||||||
|
sigaddset(&set, SIGPIPE);
|
||||||
|
int err = sigprocmask(SIG_SETMASK, &set, &set);
|
||||||
|
if(err){
|
||||||
|
fprintf(stderr, "Sigprocmask Failed: %s\n", strerror(errno));
|
||||||
|
exit(-1);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue