Skip to content

Commit 065bcb0

Browse files
authored
Merge pull request #419 from wangzlei/master
suppress Panic in Emitter
2 parents 4cdaf99 + 16febea commit 065bcb0

File tree

2 files changed

+20
-0
lines changed

2 files changed

+20
-0
lines changed

xray/default_emitter.go

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ package xray
1111
import (
1212
"encoding/json"
1313
"net"
14+
"runtime/debug"
1415
"sync"
1516

1617
"github.com/aws/aws-xray-sdk-go/internal/logger"
@@ -57,6 +58,11 @@ func (de *DefaultEmitter) refresh(raddr *net.UDPAddr) (err error) {
5758
// Emit segment or subsegment if root segment is sampled.
5859
// seg has a write lock acquired by the caller.
5960
func (de *DefaultEmitter) Emit(seg *Segment) {
61+
defer func() {
62+
if r := recover(); r != nil {
63+
logger.Errorf("Panic emitting segment: %s\n%s", r, string(debug.Stack()))
64+
}
65+
}()
6066
HeaderBytes := []byte(Header)
6167

6268
if seg == nil || !seg.ParentSegment.Sampled {

xray/default_emitter_test.go

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -180,3 +180,17 @@ func BenchmarkDefaultEmitter(b *testing.B) {
180180
}
181181
})
182182
}
183+
184+
func TestDefaultEmitterWithPanic(t *testing.T) {
185+
seg := &Segment{
186+
ParentSegment: nil, // cause Panic
187+
}
188+
emitter, err := NewDefaultEmitter(&net.UDPAddr{
189+
IP: net.IPv4(127, 0, 0, 1),
190+
Port: 3000,
191+
})
192+
if err != nil {
193+
t.Fatal(err)
194+
}
195+
emitter.Emit(seg)
196+
}

0 commit comments

Comments
 (0)