From dfe4b750e6907902c3bbcb357fb4051c1f777f2e Mon Sep 17 00:00:00 2001 From: Ivan Topolnjak Date: Sun, 12 Oct 2014 02:26:09 +0200 Subject: = core: fix NPE when finishing segments, fixes #88 --- kamon-core/src/main/scala/kamon/trace/TraceContext.scala | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) (limited to 'kamon-core') diff --git a/kamon-core/src/main/scala/kamon/trace/TraceContext.scala b/kamon-core/src/main/scala/kamon/trace/TraceContext.scala index 6ea30511..a15a4326 100644 --- a/kamon-core/src/main/scala/kamon/trace/TraceContext.scala +++ b/kamon-core/src/main/scala/kamon/trace/TraceContext.scala @@ -26,6 +26,8 @@ import kamon.trace.TraceContextAware.DefaultTraceContextAware import kamon.trace.TraceContext.SegmentIdentity import kamon.metric.TraceMetrics.TraceMetricRecorder +import scala.annotation.tailrec + trait TraceContext { def name: String def token: String @@ -136,10 +138,12 @@ class SimpleMetricCollectionContext(traceName: String, val token: String, metada } } - private def drainFinishedSegments(metricRecorder: TraceMetricRecorder): Unit = { - while (!finishedSegments.isEmpty) { - val segmentData = finishedSegments.poll() - metricRecorder.segmentRecorder(segmentData.identity).record(segmentData.duration) + @tailrec private def drainFinishedSegments(metricRecorder: TraceMetricRecorder): Unit = { + val segment = finishedSegments.poll() + if(segment != null) { + metricRecorder.segmentRecorder(segment.identity).record(segment.duration) + println("CLOSED") + drainFinishedSegments(metricRecorder) } } -- cgit v1.2.3