@@ -157,18 +157,19 @@ func New(ctx context.Context,
157
157
158
158
// ProcessRequests processes incoming requests for the given peer
159
159
func (rm * ResponseManager ) ProcessRequests (ctx context.Context , p peer.ID , requests []gsmsg.GraphSyncRequest ) {
160
- rm .send (& processRequestsMessage {p , requests }, ctx .Done ())
160
+ _ = rm .send (& processRequestsMessage {p , requests }, ctx .Done ())
161
161
}
162
162
163
163
// UnpauseResponse unpauses a response that was previously paused
164
164
func (rm * ResponseManager ) UnpauseResponse (ctx context.Context , requestID graphsync.RequestID , extensions ... graphsync.ExtensionData ) error {
165
165
response := make (chan error , 1 )
166
- rm .send (& unpauseRequestMessage {requestID , response , extensions }, ctx .Done ())
166
+ err := rm .send (& unpauseRequestMessage {requestID , response , extensions }, ctx .Done ())
167
+ if err != nil {
168
+ return err
169
+ }
167
170
select {
168
171
case <- rm .ctx .Done ():
169
172
return errors .New ("context cancelled" )
170
- case <- ctx .Done ():
171
- return ctx .Err ()
172
173
case err := <- response :
173
174
return err
174
175
}
@@ -177,12 +178,13 @@ func (rm *ResponseManager) UnpauseResponse(ctx context.Context, requestID graphs
177
178
// PauseResponse pauses an in progress response (may take 1 or more blocks to process)
178
179
func (rm * ResponseManager ) PauseResponse (ctx context.Context , requestID graphsync.RequestID ) error {
179
180
response := make (chan error , 1 )
180
- rm .send (& pauseRequestMessage {requestID , response }, ctx .Done ())
181
+ err := rm .send (& pauseRequestMessage {requestID , response }, ctx .Done ())
182
+ if err != nil {
183
+ return err
184
+ }
181
185
select {
182
186
case <- rm .ctx .Done ():
183
187
return errors .New ("context cancelled" )
184
- case <- ctx .Done ():
185
- return ctx .Err ()
186
188
case err := <- response :
187
189
return err
188
190
}
@@ -191,12 +193,13 @@ func (rm *ResponseManager) PauseResponse(ctx context.Context, requestID graphsyn
191
193
// CancelResponse cancels an in progress response
192
194
func (rm * ResponseManager ) CancelResponse (ctx context.Context , requestID graphsync.RequestID ) error {
193
195
response := make (chan error , 1 )
194
- rm .send (& errorRequestMessage {requestID , queryexecutor .ErrCancelledByCommand , response }, ctx .Done ())
196
+ err := rm .send (& errorRequestMessage {requestID , queryexecutor .ErrCancelledByCommand , response }, ctx .Done ())
197
+ if err != nil {
198
+ return err
199
+ }
195
200
select {
196
201
case <- rm .ctx .Done ():
197
202
return errors .New ("context cancelled" )
198
- case <- ctx .Done ():
199
- return ctx .Err ()
200
203
case err := <- response :
201
204
return err
202
205
}
@@ -205,12 +208,13 @@ func (rm *ResponseManager) CancelResponse(ctx context.Context, requestID graphsy
205
208
// UpdateRequest updates an in progress response
206
209
func (rm * ResponseManager ) UpdateResponse (ctx context.Context , requestID graphsync.RequestID , extensions ... graphsync.ExtensionData ) error {
207
210
response := make (chan error , 1 )
208
- rm .send (& updateRequestMessage {requestID , extensions , response }, ctx .Done ())
211
+ err := rm .send (& updateRequestMessage {requestID , extensions , response }, ctx .Done ())
212
+ if err != nil {
213
+ return err
214
+ }
209
215
select {
210
216
case <- rm .ctx .Done ():
211
217
return errors .New ("context cancelled" )
212
- case <- ctx .Done ():
213
- return ctx .Err ()
214
218
case err := <- response :
215
219
return err
216
220
}
@@ -219,7 +223,7 @@ func (rm *ResponseManager) UpdateResponse(ctx context.Context, requestID graphsy
219
223
// Synchronize is a utility method that blocks until all current messages are processed
220
224
func (rm * ResponseManager ) synchronize () {
221
225
sync := make (chan error )
222
- rm .send (& synchronizeMessage {sync }, nil )
226
+ _ = rm .send (& synchronizeMessage {sync }, nil )
223
227
select {
224
228
case <- rm .ctx .Done ():
225
229
case <- sync :
@@ -228,18 +232,18 @@ func (rm *ResponseManager) synchronize() {
228
232
229
233
// StartTask starts the given task from the peer task queue
230
234
func (rm * ResponseManager ) StartTask (task * peertask.Task , p peer.ID , responseTaskChan chan <- queryexecutor.ResponseTask ) {
231
- rm .send (& startTaskRequest {task , p , responseTaskChan }, nil )
235
+ _ = rm .send (& startTaskRequest {task , p , responseTaskChan }, nil )
232
236
}
233
237
234
238
// GetUpdates is called to read pending updates for a task and clear them
235
239
func (rm * ResponseManager ) GetUpdates (requestID graphsync.RequestID , updatesChan chan <- []gsmsg.GraphSyncRequest ) {
236
- rm .send (& responseUpdateRequest {requestID , updatesChan }, nil )
240
+ _ = rm .send (& responseUpdateRequest {requestID , updatesChan }, nil )
237
241
}
238
242
239
243
// FinishTask marks a task from the task queue as done
240
244
func (rm * ResponseManager ) FinishTask (task * peertask.Task , p peer.ID , err error ) {
241
245
done := make (chan struct {}, 1 )
242
- rm .send (& finishTaskRequest {task , p , err , done }, nil )
246
+ _ = rm .send (& finishTaskRequest {task , p , err , done }, nil )
243
247
select {
244
248
case <- rm .ctx .Done ():
245
249
case <- done :
@@ -249,7 +253,7 @@ func (rm *ResponseManager) FinishTask(task *peertask.Task, p peer.ID, err error)
249
253
// CloseWithNetworkError closes a request due to a network error
250
254
func (rm * ResponseManager ) CloseWithNetworkError (requestID graphsync.RequestID ) {
251
255
done := make (chan error , 1 )
252
- rm .send (& errorRequestMessage {requestID , queryexecutor .ErrNetworkError , done }, nil )
256
+ _ = rm .send (& errorRequestMessage {requestID , queryexecutor .ErrNetworkError , done }, nil )
253
257
select {
254
258
case <- rm .ctx .Done ():
255
259
case <- done :
@@ -259,7 +263,7 @@ func (rm *ResponseManager) CloseWithNetworkError(requestID graphsync.RequestID)
259
263
// TerminateRequest indicates a request has finished sending data and should no longer be tracked
260
264
func (rm * ResponseManager ) TerminateRequest (requestID graphsync.RequestID ) {
261
265
done := make (chan struct {}, 1 )
262
- rm .send (& terminateRequestMessage {requestID , done }, nil )
266
+ _ = rm .send (& terminateRequestMessage {requestID , done }, nil )
263
267
select {
264
268
case <- rm .ctx .Done ():
265
269
case <- done :
@@ -269,7 +273,7 @@ func (rm *ResponseManager) TerminateRequest(requestID graphsync.RequestID) {
269
273
// PeerState gets current state of the outgoing responses for a given peer
270
274
func (rm * ResponseManager ) PeerState (p peer.ID ) peerstate.PeerState {
271
275
response := make (chan peerstate.PeerState )
272
- rm .send (& peerStateMessage {p , response }, nil )
276
+ _ = rm .send (& peerStateMessage {p , response }, nil )
273
277
select {
274
278
case <- rm .ctx .Done ():
275
279
return peerstate.PeerState {}
@@ -278,11 +282,20 @@ func (rm *ResponseManager) PeerState(p peer.ID) peerstate.PeerState {
278
282
}
279
283
}
280
284
281
- func (rm * ResponseManager ) send (message responseManagerMessage , done <- chan struct {}) {
285
+ func (rm * ResponseManager ) send (message responseManagerMessage , done <- chan struct {}) error {
286
+ // prioritize cancelled context
287
+ select {
288
+ case <- done :
289
+ return errors .New ("unable to send message before cancellation" )
290
+ default :
291
+ }
282
292
select {
283
293
case <- rm .ctx .Done ():
294
+ return rm .ctx .Err ()
284
295
case <- done :
296
+ return errors .New ("unable to send message before cancellation" )
285
297
case rm .messages <- message :
298
+ return nil
286
299
}
287
300
}
288
301
0 commit comments