@@ -36,7 +36,7 @@ type Message struct {
3636
3737// Wait at least a second before canceling a request
3838// if the context gets canceled.
39- var MinimumRequestWaitTime = time .Second
39+ var MinimumRequestWaitTime = 10 * time .Second
4040
4141// WriteContext calls Write with the provided context.
4242// Note that Message cannot be reused if this function returns a context error.
@@ -47,18 +47,7 @@ func (msg *Message) WriteContext(ctx context.Context, w io.Writer) error {
4747 ch <- msg .Write (w )
4848 }()
4949
50- select {
51- case err := <- ch :
52- return err
53- case <- time .After (MinimumRequestWaitTime ):
54- }
55-
56- select {
57- case <- ctx .Done ():
58- return ctx .Err ()
59- case err := <- ch :
60- return err
61- }
50+ return waitContext (ctx , ch )
6251}
6352
6453// Write writes an iRODS message to w
@@ -138,18 +127,7 @@ func (msg *Message) ReadContext(ctx context.Context, r io.Reader) error {
138127 ch <- msg .Read (r )
139128 }()
140129
141- select {
142- case err := <- ch :
143- return err
144- case <- time .After (MinimumRequestWaitTime ):
145- }
146-
147- select {
148- case <- ctx .Done ():
149- return ctx .Err ()
150- case err := <- ch :
151- return err
152- }
130+ return waitContext (ctx , ch )
153131}
154132
155133// Read decodes an iRODS message from r.
@@ -220,3 +198,30 @@ func (body *Body) Read(r io.Reader, header Header) error {
220198
221199 return nil
222200}
201+
202+ func waitContext (ctx context.Context , ch chan error ) error {
203+ timer := time .NewTimer (MinimumRequestWaitTime )
204+
205+ defer timer .Stop ()
206+
207+ select {
208+ case err := <- ch :
209+ return err
210+ case <- ctx .Done ():
211+ logrus .Warnf ("%s, but waiting %s for in-flight request to complete..." , ctx .Err (), MinimumRequestWaitTime )
212+
213+ select {
214+ case err := <- ch :
215+ return err
216+ case <- timer .C :
217+ return ctx .Err ()
218+ }
219+ case <- timer .C :
220+ select {
221+ case <- ctx .Done ():
222+ return ctx .Err ()
223+ case err := <- ch :
224+ return err
225+ }
226+ }
227+ }
0 commit comments