5
0
mirror of https://github.com/cwinfo/yggdrasil-go.git synced 2024-09-20 07:12:34 +00:00

Merge pull request #447 from Arceliar/bugfixes

Another Conn bugfix
This commit is contained in:
Arceliar 2019-07-01 19:09:36 -05:00 committed by GitHub
commit b2607a7205
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -159,6 +159,12 @@ func (c *Conn) Read(b []byte) (int, error) {
sinfo.bytesRecvd += uint64(len(b)) sinfo.bytesRecvd += uint64(len(b))
} }
// Hand over to the session worker // Hand over to the session worker
defer func() {
if recover() != nil {
err = errors.New("read failed, session already closed")
close(done)
}
}() // In case we're racing with a close
select { // Send to worker select { // Send to worker
case sinfo.worker <- workerFunc: case sinfo.worker <- workerFunc:
case <-timer.C: case <-timer.C:
@ -238,7 +244,8 @@ func (c *Conn) Write(b []byte) (bytesWritten int, err error) {
// Hand over to the session worker // Hand over to the session worker
defer func() { defer func() {
if recover() != nil { if recover() != nil {
err = errors.New("write failed") err = errors.New("write failed, session already closed")
close(done)
} }
}() // In case we're racing with a close }() // In case we're racing with a close
select { // Send to worker select { // Send to worker