Skip to content

Commit ca3b864

Browse files
committed
Detect broken pipe errors on stdout/stderr
1 parent 5b839b9 commit ca3b864

File tree

2 files changed

+8
-0
lines changed
  • graalpython

2 files changed

+8
-0
lines changed

graalpython/com.oracle.graal.python.shell/src/com/oracle/graal/python/shell/GraalPythonMain.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,8 @@
2727

2828
import java.io.EOFException;
2929
import java.io.File;
30+
import java.io.FileDescriptor;
31+
import java.io.FileOutputStream;
3032
import java.io.IOException;
3133
import java.io.InputStream;
3234
import java.io.OutputStream;
@@ -385,6 +387,9 @@ private String getExecutable() {
385387

386388
@Override
387389
protected void launch(Builder contextBuilder) {
390+
// prevent the use of System.out/err - they are PrintStreams which suppresses exceptions
391+
contextBuilder.out(new FileOutputStream(FileDescriptor.out));
392+
contextBuilder.err(new FileOutputStream(FileDescriptor.err));
388393
if (!ignoreEnv) {
389394
String pythonpath = System.getenv("PYTHONPATH");
390395
if (pythonpath != null) {

graalpython/com.oracle.graal.python/src/com/oracle/graal/python/builtins/objects/exception/OSErrorEnum.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -312,6 +312,9 @@ private static String getReason(FileSystemException e) {
312312

313313
@TruffleBoundary
314314
private static OSErrorEnum tryFindErrnoFromMessage(Exception e) {
315+
if (e.getMessage().contains("Broken pipe")) {
316+
return OSErrorEnum.EPIPE;
317+
}
315318
Matcher m = ERRNO_PATTERN.matcher(e.getMessage());
316319
if (m.find()) {
317320
return fromNumber(Integer.parseInt(m.group(1)));

0 commit comments

Comments
 (0)