8000 reorder writers over readers for Close() and transmitError() · etherscan-io/sftp@c276d4b · GitHub
[go: up one dir, main page]

Skip to content

Commit c276d4b

Browse files
committed
reorder writers over readers for Close() and transmitError()
1 parent 161b43c commit c276d4b

File tree

1 file changed

+8
-6
lines changed

1 file changed

+8
-6
lines changed

request.go

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -140,20 +140,22 @@ func (r *Request) close() error {
140140
}()
141141

142142
r.state.RLock()
143-
rd := r.state.readerAt
144143
wr := r.state.writerAt
144+
rd := r.state.readerAt
145145
r.state.RUnlock()
146146

147147
var err error
148148

149-
if c, ok := rd.(io.Closer); ok {
149+
// Close errors on a Writer are far more likely to be the important one.
150+
// As they can be information that there was a loss of data.
151+
if c, ok := wr.(io.Closer); ok {
150152
if err2 := c.Close(); err == nil {
151153
// update error if it is still nil
152154
err = err2
153155
}
154156
}
155157

156-
if c, ok := wr.(io.Closer); ok {
158+
if c, ok := rd.(io.Closer); ok {
157159
if err2 := c.Close(); err == nil {
158160
// update error if it is still nil
159161
err = err2
@@ -170,15 +172,15 @@ func (r *Request) transferError(err error) {
170172
}
171173

172174
r.state.RLock()
173-
rd := r.state.readerAt
174175
wr := r.state.writerAt
176+
rd := r.state.readerAt
175177
r.state.RUnlock()
176178

177-
if t, ok := rd.(TransferError); ok {
179+
if t, ok := wr.(TransferError); ok {
178180
t.TransferError(err)
179181
}
180182

181-
if t, ok := wr.(TransferError); ok {
183+
if t, ok := rd.(TransferError); ok {
182184
t.TransferError(err)
183185
}
184186
}

0 commit comments

Comments
 (0)
0