diff --git a/events.go b/events.go index 88cf21c97..bf260263f 100644 --- a/events.go +++ b/events.go @@ -306,3 +306,24 @@ func (e *eventUnsupportedValue) Error() string { func (e *eventUnsupportedValue) Err() error { return e.err } + +const tracerDisabled = "the tracer has been disabled" + +// EventTracerDisabled occurs when a tracer is disabled by either the user or +// the collector. +type EventTracerDisabled interface { + Event + EventTracerDisabled() +} + +type eventTracerDisabled struct{} + +func newEventTracerDisabled() EventTracerDisabled { + return eventTracerDisabled{} +} + +func (eventTracerDisabled) Event() {} +func (eventTracerDisabled) EventTracerDisabled() {} +func (eventTracerDisabled) String() string { + return tracerDisabled +} diff --git a/tracer.go b/tracer.go index 0b812fc7d..669450c9f 100644 --- a/tracer.go +++ b/tracer.go @@ -302,16 +302,15 @@ func (tracer *tracerImpl) postFlush(flushEventError *eventFlushError) *eventStat func (tracer *tracerImpl) Disable() { tracer.lock.Lock() - defer tracer.lock.Unlock() - if tracer.disabled { + tracer.lock.Unlock() return } - - fmt.Printf("Disabling Runtime instance: %p", tracer) - - tracer.buffer.clear() tracer.disabled = true + tracer.buffer.clear() + tracer.lock.Unlock() + + emitEvent(newEventTracerDisabled()) } // Every MinReportingPeriod the reporting loop wakes up and checks to see if diff --git a/tracer_test.go b/tracer_test.go index f9265168d..c15a553f4 100644 --- a/tracer_test.go +++ b/tracer_test.go @@ -106,6 +106,7 @@ var _ = Describe("Tracer", func() { Context("when the tracer is disabled", func() { JustBeforeEach(func() { tracer.Disable() + Eventually(eventChan).Should(Receive()) }) It("should not flush spans", func() {