itrc: do not exit on EINTR from read - plan9port - [fork] Plan 9 from user space Err mx1.adamsgaard.dk 70 hgit clone git://src.adamsgaard.dk/plan9port URL:git://src.adamsgaard.dk/plan9port mx1.adamsgaard.dk 70 1Log /src/plan9port/log.gph mx1.adamsgaard.dk 70 1Files /src/plan9port/files.gph mx1.adamsgaard.dk 70 1Refs /src/plan9port/refs.gph mx1.adamsgaard.dk 70 1README /src/plan9port/file/README.md.gph mx1.adamsgaard.dk 70 1LICENSE /src/plan9port/file/LICENSE.gph mx1.adamsgaard.dk 70 i--- Err mx1.adamsgaard.dk 70 1commit c3ae85a004c8714fc653629a983327d9a15b36da /src/plan9port/commit/c3ae85a004c8714fc653629a983327d9a15b36da.gph mx1.adamsgaard.dk 70 1parent 0cc1faf015a253ef64b97a8453b6fc959c0ee512 /src/plan9port/commit/0cc1faf015a253ef64b97a8453b6fc959c0ee512.gph mx1.adamsgaard.dk 70 hAuthor: Russ Cox URL:mailto:rsc@swtch.com mx1.adamsgaard.dk 70 iDate: Thu, 14 Jan 2021 09:59:54 -0500 Err mx1.adamsgaard.dk 70 i Err mx1.adamsgaard.dk 70 irc: do not exit on EINTR from read Err mx1.adamsgaard.dk 70 i Err mx1.adamsgaard.dk 70 iThis happens if lldb attaches to rc. Err mx1.adamsgaard.dk 70 i Err mx1.adamsgaard.dk 70 iDiffstat: Err mx1.adamsgaard.dk 70 i M src/cmd/rc/io.c | 11 ++++++++++- Err mx1.adamsgaard.dk 70 i Err mx1.adamsgaard.dk 70 i1 file changed, 10 insertions(+), 1 deletion(-) Err mx1.adamsgaard.dk 70 i--- Err mx1.adamsgaard.dk 70 1diff --git a/src/cmd/rc/io.c b/src/cmd/rc/io.c /src/plan9port/file/src/cmd/rc/io.c.gph mx1.adamsgaard.dk 70 it@@ -1,4 +1,5 @@ Err mx1.adamsgaard.dk 70 i #include Err mx1.adamsgaard.dk 70 i+#include Err mx1.adamsgaard.dk 70 i #include "rc.h" Err mx1.adamsgaard.dk 70 i #include "exec.h" Err mx1.adamsgaard.dk 70 i #include "io.h" Err mx1.adamsgaard.dk 70 it@@ -257,7 +258,15 @@ int Err mx1.adamsgaard.dk 70 i emptybuf(io *f) Err mx1.adamsgaard.dk 70 i { Err mx1.adamsgaard.dk 70 i int n; Err mx1.adamsgaard.dk 70 i- if(f->fd==-1 || (n = Read(f->fd, f->buf, NBUF))<=0) return EOF; Err mx1.adamsgaard.dk 70 i+ if(f->fd==-1) Err mx1.adamsgaard.dk 70 i+ return EOF; Err mx1.adamsgaard.dk 70 i+Loop: Err mx1.adamsgaard.dk 70 i+ errno = 0; Err mx1.adamsgaard.dk 70 i+ n = Read(f->fd, f->buf, NBUF); Err mx1.adamsgaard.dk 70 i+ if(n < 0 && errno == EINTR) Err mx1.adamsgaard.dk 70 i+ goto Loop; Err mx1.adamsgaard.dk 70 i+ if(n <= 0) Err mx1.adamsgaard.dk 70 i+ return EOF; Err mx1.adamsgaard.dk 70 i f->bufp = f->buf; Err mx1.adamsgaard.dk 70 i f->ebuf = f->buf+n; Err mx1.adamsgaard.dk 70 i return *f->bufp++&0xff; Err mx1.adamsgaard.dk 70 .