diff --git a/common/src/main/java/com/lightstep/tracer/shared/AbstractTracer.java b/common/src/main/java/com/lightstep/tracer/shared/AbstractTracer.java index 05cabbcd..787fbbf2 100644 --- a/common/src/main/java/com/lightstep/tracer/shared/AbstractTracer.java +++ b/common/src/main/java/com/lightstep/tracer/shared/AbstractTracer.java @@ -243,30 +243,40 @@ private void doStopReporting() { */ private void maybeStartReporting() { // We set both reporting/metrics thread in a single step. - if (reportingThread != null) { - return; + boolean buildFirstSpan = false; + synchronized (this) { + if (reportingThread != null) { + return; + } + + reportingThread = new Thread(reportingLoop, LightStepConstants.Internal.REPORTING_THREAD_NAME); + reportingThread.setDaemon(true); + reportingThread.start(); + + if (metaEventLoggingEnabled && !firstReportHasRun) { + firstReportHasRun = true; + buildFirstSpan = true; + } + + if (!disableMetricsReporting && safeMetrics != null) { + // Can be null, if running on jdk1.7 + metricsThread = safeMetrics.createMetricsThread(componentName, auth.getAccessToken(), + serviceVersion, metricsUrl, LightStepConstants.Metrics.DEFAULT_INTERVAL_SECS); + if (metricsThread != null) { + metricsThread.setDaemon(true); + metricsThread.start(); + } + + } } - if (metaEventLoggingEnabled && !firstReportHasRun) { + + if (buildFirstSpan) { buildSpan(LightStepConstants.MetaEvents.TracerCreateOperation) .ignoreActiveSpan() .withTag(LightStepConstants.MetaEvents.MetaEventKey, true) .withTag(LightStepConstants.MetaEvents.TracerGuidKey, reporter.getReporterId()) .start() .finish(); - firstReportHasRun = true; - } - reportingThread = new Thread(reportingLoop, LightStepConstants.Internal.REPORTING_THREAD_NAME); - reportingThread.setDaemon(true); - reportingThread.start(); - - if (!disableMetricsReporting && safeMetrics != null) { - // Can be null, if running on jdk1.7 - metricsThread = safeMetrics.createMetricsThread(componentName, auth.getAccessToken(), - serviceVersion, metricsUrl, LightStepConstants.Metrics.DEFAULT_INTERVAL_SECS); - if (metricsThread != null) { - metricsThread.setDaemon(true); - metricsThread.start(); - } } } diff --git a/common/src/main/java/com/lightstep/tracer/shared/ClockState.java b/common/src/main/java/com/lightstep/tracer/shared/ClockState.java index db4c3e0e..b68036ec 100644 --- a/common/src/main/java/com/lightstep/tracer/shared/ClockState.java +++ b/common/src/main/java/com/lightstep/tracer/shared/ClockState.java @@ -154,9 +154,7 @@ long offsetMicros() { * in the current offset. */ boolean isReady() { - synchronized (mutex) { - return samples.size() > 3; - } + return activeSampleCount() > 3; } int activeSampleCount() {