-
Notifications
You must be signed in to change notification settings - Fork 17
Open
Description
In current implementation of asyncProducer kafka wrapper, there is a potential for panic without recovery.
pinpoint-go-agent/plugin/sarama-IBM/asyncproducer.go
Lines 121 to 126 in 61e9abb
| go func() { | |
| defer close(wrapped.inputContext) | |
| defer close(wrapped.input) | |
| defer close(wrapped.successes) | |
| defer close(wrapped.errors) | |
pinpoint-go-agent/plugin/sarama/asyncproducer.go
Lines 121 to 126 in 61e9abb
| go func() { | |
| defer close(wrapped.inputContext) | |
| defer close(wrapped.input) | |
| defer close(wrapped.successes) | |
| defer close(wrapped.errors) | |
go func() {
defer close(wrapped.inputContext)
defer close(wrapped.input)
defer close(wrapped.successes)
defer close(wrapped.errors)
for {
select {
case msg, ok := <-producer.Successes():
if !ok || wrapped.isClosed {
return
}
endAsyncProducerTracer(wrapped, msg, nil)
wrapped.successes <- msg
proposal
go func() {
defer func() {
_ = recover() // or log
close(wrapped.inputContext)
close(wrapped.input)
close(wrapped.successes)
close(wrapped.errors)
}()
Metadata
Metadata
Assignees
Labels
No labels