@@ -35,6 +35,12 @@ import (
35
35
"time"
36
36
)
37
37
38
+ var (
39
+ errAcquireFromClosedPool = errors .New ("cannot acquire a LineSender from a closed LineSenderPool" )
40
+ errHttpOnlySender = errors .New ("tcp/s not supported for pooled senders, use http/s only" )
41
+ errPooledSenderClose = errors .New ("error closing one or more LineSenders in the pool" )
42
+ )
43
+
38
44
// LineSenderPool wraps a mutex-protected slice of [LineSender]. It allows a goroutine to
39
45
// Acquire a sender from the pool and Release it back to the pool when it's done being used.
40
46
//
@@ -72,7 +78,7 @@ type LineSenderPoolOption func(*LineSenderPool)
72
78
// [WithMaxSenders] option.
73
79
func PoolFromConf (conf string , opts ... LineSenderPoolOption ) (* LineSenderPool , error ) {
74
80
if strings .HasPrefix (conf , "tcp" ) {
75
- return nil , errors . New ( "tcp/s not supported for pooled senders, use http/s only" )
81
+ return nil , errHttpOnlySender
76
82
}
77
83
78
84
pool := & LineSenderPool {
@@ -145,14 +151,18 @@ func (p *LineSenderPool) Sender(ctx context.Context) (LineSender, error) {
145
151
defer p .mu .Unlock ()
146
152
147
153
if p .closed {
148
- return nil , errors . New ( "cannot Acquire a LineSender from a closed LineSenderPool" )
154
+ return nil , errAcquireFromClosedPool
149
155
}
150
156
151
157
// We may have to wait for a free sender
152
158
for len (p .freeSenders ) == 0 && p .numSenders == p .maxSenders {
153
159
p .cond .Wait ()
154
160
}
155
161
162
+ if p .closed {
163
+ return nil , errAcquireFromClosedPool
164
+ }
165
+
156
166
if len (p .freeSenders ) > 0 {
157
167
// Pop sender off the slice and return it
158
168
s := p .freeSenders [len (p .freeSenders )- 1 ]
@@ -168,7 +178,7 @@ func (p *LineSenderPool) Sender(ctx context.Context) (LineSender, error) {
168
178
for _ , opt := range p .opts {
169
179
opt (conf )
170
180
if conf .senderType == tcpSenderType {
171
- return nil , errors . New ( "tcp/s not supported for pooled senders, use http/s only" )
181
+ return nil , errHttpOnlySender
172
182
}
173
183
}
174
184
s , err = newHttpLineSender (conf )
@@ -247,7 +257,7 @@ func (p *LineSenderPool) Close(ctx context.Context) error {
247
257
return nil
248
258
}
249
259
250
- err := errors . New ( "error closing one or more LineSenders in the pool" )
260
+ err := errPooledSenderClose
251
261
for _ , senderErr := range senderErrors {
252
262
err = fmt .Errorf ("%s %w" , err , senderErr )
253
263
}
@@ -340,7 +350,7 @@ func (ps *pooledSender) Flush(ctx context.Context) error {
340
350
341
351
func (ps * pooledSender ) Close (ctx context.Context ) error {
342
352
if atomic .AddUint64 (& ps .tick , 1 )& 1 == 1 {
343
- return errors . New ( "double pooled sender close" )
353
+ return errDoubleSenderClose
344
354
}
345
355
return ps .pool .free (ctx , ps )
346
356
}
0 commit comments