-
Notifications
You must be signed in to change notification settings - Fork 502
Open
Description
我们在使用read-throttle的分支,发现eventloop崩溃了。

原因在于:
if triggerWrite {
if operator.OnWrite != nil {
// for non-connection
operator.OnWrite(p)
} else {
// only for connection
var bs, supportZeroCopy = operator.Outputs(barriers[i].bs)
if len(bs) > 0 {
// TODO: Let the upper layer pass in whether to use ZeroCopy.
var n, err = iosend(operator.FD, bs, barriers[i].ivs, false && supportZeroCopy)
operator.OutputAck(n)
if err != nil {
p.appendHup(operator)
continue
}
}
}
}
operator.done()
}
上述这段代码在read-throttle和develop分支是一样的。触发bug的原因是,添加限流以后,var n, err = iosend(operator.FD, bs, barriers[i].ivs, false && supportZeroCopy) 触发了内核关闭连接,然而这里没有对iosend返回的错误进行判断(可能连接已经不可用了),直接outputAck了,导致panic.
Metadata
Metadata
Assignees
Labels
No labels