@@ -97,13 +97,13 @@ awaitCopyInResponse:
97
97
err = parseError (r )
98
98
case 'Z' :
99
99
if err == nil {
100
- cn . bad = true
100
+ ci . setBad ()
101
101
errorf ("unexpected ReadyForQuery in response to COPY" )
102
102
}
103
103
cn .processReadyForQuery (r )
104
104
return nil , err
105
105
default :
106
- cn . bad = true
106
+ ci . setBad ()
107
107
errorf ("unknown response for copy query: %q" , t )
108
108
}
109
109
}
@@ -122,7 +122,7 @@ awaitCopyInResponse:
122
122
cn .processReadyForQuery (r )
123
123
return nil , err
124
124
default :
125
- cn . bad = true
125
+ ci . setBad ()
126
126
errorf ("unknown response for CopyFail: %q" , t )
127
127
}
128
128
}
@@ -143,7 +143,7 @@ func (ci *copyin) resploop() {
143
143
var r readBuf
144
144
t , err := ci .cn .recvMessage (& r )
145
145
if err != nil {
146
- ci .cn . bad = true
146
+ ci .setBad ()
147
147
ci .setError (err )
148
148
ci .done <- true
149
149
return
@@ -161,14 +161,27 @@ func (ci *copyin) resploop() {
161
161
err := parseError (& r )
162
162
ci .setError (err )
163
163
default :
164
- ci .cn . bad = true
164
+ ci .setBad ()
165
165
ci .setError (fmt .Errorf ("unknown response during CopyIn: %q" , t ))
166
166
ci .done <- true
167
167
return
168
168
}
169
169
}
170
170
}
171
171
172
+ func (ci * copyin ) setBad () {
173
+ ci .Lock ()
174
+ ci .cn .bad = true
175
+ ci .Unlock ()
176
+ }
177
+
178
+ func (ci * copyin ) isBad () bool {
179
+ ci .Lock ()
180
+ b := ci .cn .bad
181
+ ci .Unlock ()
182
+ return b
183
+ }
184
+
172
185
func (ci * copyin ) isErrorSet () bool {
173
186
ci .Lock ()
174
187
isSet := (ci .err != nil )
@@ -206,7 +219,7 @@ func (ci *copyin) Exec(v []driver.Value) (r driver.Result, err error) {
206
219
return nil , errCopyInClosed
207
220
}
208
221
209
- if ci .cn . bad {
222
+ if ci .isBad () {
210
223
return nil , driver .ErrBadConn
211
224
}
212
225
defer ci .cn .errRecover (& err )
@@ -244,7 +257,7 @@ func (ci *copyin) Close() (err error) {
244
257
}
245
258
ci .closed = true
246
259
247
- if ci .cn . bad {
260
+ if ci .isBad () {
248
261
return driver .ErrBadConn
249
262
}
250
263
defer ci .cn .errRecover (& err )
0 commit comments