Use linuxerr.Equals to check for equality with linuxerr.ErrWouldBlock.

Now that hostinet is enabled, we sometimes get EAGAIN which is not equal to
ErrWouldBlock, so we must use linuxerr.Equals to compare them.

PiperOrigin-RevId: 508501889
This commit is contained in:
Nicolas Lacasse
2023-02-09 16:13:53 -08:00
committed by gVisor bot
parent 5419f17710
commit 13448f9e87
+7 -7
View File
@@ -152,7 +152,7 @@ func Splice(t *kernel.Task, args arch.SyscallArguments) (uintptr, *kernel.Syscal
panic("at least one end of splice must be a pipe")
}
if n != 0 || err != linuxerr.ErrWouldBlock || nonBlock {
if n != 0 || !linuxerr.Equals(linuxerr.ErrWouldBlock, err) || nonBlock {
break
}
if err = dw.waitForBoth(t); err != nil {
@@ -245,7 +245,7 @@ func Tee(t *kernel.Task, args arch.SyscallArguments) (uintptr, *kernel.SyscallCo
defer dw.destroy()
for {
n, err = pipe.Tee(t, outPipeFD, inPipeFD, count)
if n != 0 || err != linuxerr.ErrWouldBlock || nonBlock {
if n != 0 || !linuxerr.Equals(linuxerr.ErrWouldBlock, err) || nonBlock {
break
}
if err = dw.waitForBoth(t); err != nil {
@@ -255,7 +255,7 @@ func Tee(t *kernel.Task, args arch.SyscallArguments) (uintptr, *kernel.SyscallCo
if n != 0 {
// If a partial write is completed, the error is dropped. Log it here.
if err != nil && err != io.EOF && err != linuxerr.ErrWouldBlock {
if err != nil && err != io.EOF && !linuxerr.Equals(linuxerr.ErrWouldBlock, err) {
log.Debugf("tee completed a partial write with error: %v", err)
err = nil
}
@@ -370,7 +370,7 @@ func Sendfile(t *kernel.Task, args arch.SyscallArguments) (uintptr, *kernel.Sysc
err = linuxerr.ErrInterrupted
break
}
if err == linuxerr.ErrWouldBlock && !nonBlock {
if linuxerr.Equals(linuxerr.ErrWouldBlock, err) && !nonBlock {
err = dw.waitForBoth(t)
}
if err != nil {
@@ -408,7 +408,7 @@ func Sendfile(t *kernel.Task, args arch.SyscallArguments) (uintptr, *kernel.Sysc
var writeN int64
writeN, err = outFile.Write(t, usermem.BytesIOSequence(wbuf), vfs.WriteOptions{})
wbuf = wbuf[writeN:]
if err == linuxerr.ErrWouldBlock && !nonBlock {
if linuxerr.Equals(linuxerr.ErrWouldBlock, err) && !nonBlock {
err = dw.waitForOut(t)
}
if err != nil {
@@ -441,7 +441,7 @@ func Sendfile(t *kernel.Task, args arch.SyscallArguments) (uintptr, *kernel.Sysc
err = linuxerr.ErrInterrupted
break
}
if err == linuxerr.ErrWouldBlock && !nonBlock {
if linuxerr.Equals(linuxerr.ErrWouldBlock, err) && !nonBlock {
err = dw.waitForBoth(t)
}
if err != nil {
@@ -459,7 +459,7 @@ func Sendfile(t *kernel.Task, args arch.SyscallArguments) (uintptr, *kernel.Sysc
}
if total != 0 {
if err != nil && err != io.EOF && err != linuxerr.ErrWouldBlock {
if err != nil && err != io.EOF && !linuxerr.Equals(linuxerr.ErrWouldBlock, err) {
// If a partial write is completed, the error is dropped. Log it here.
log.Debugf("sendfile completed a partial write with error: %v", err)
err = nil