StackOwningThreadInfo::~StackOwningThreadInfo() { PseudoStack* stack = Stack(); if (stack) { stack->deref(); } }
void mozilla_sampler_shutdown() { sInitCount--; if (sInitCount > 0) return; // Save the profile on shutdown if requested. TableTicker *t = tlsTicker.get(); if (t) { const char *val = PR_GetEnv("MOZ_PROFILER_SHUTDOWN"); if (val) { std::ofstream stream; stream.open(val); if (stream.is_open()) { t->ToStreamAsJSON(stream); stream.close(); } } } profiler_stop(); set_stderr_callback(nullptr); Sampler::Shutdown(); PseudoStack *stack = tlsPseudoStack.get(); stack->deref(); tlsPseudoStack.set(nullptr); }
void StackOwningThreadInfo::SetPendingDelete() { PseudoStack* stack = Stack(); if (stack) { stack->deref(); } ThreadInfo::SetPendingDelete(); }
void mozilla_sampler_unregister_thread() { // Don't check sInitCount count here -- we may be unregistering the // thread after the sampler was shut down. if (!stack_key_initialized) { return; } PseudoStack *stack = tlsPseudoStack.get(); if (!stack) { return; } stack->deref(); tlsPseudoStack.set(nullptr); Sampler::UnregisterCurrentThread(); }
void mozilla_sampler_shutdown() { sInitCount--; if (sInitCount > 0) return; // Save the profile on shutdown if requested. GeckoSampler *t = tlsTicker.get(); if (t) { const char *val = getenv("MOZ_PROFILER_SHUTDOWN"); if (val) { std::ofstream stream; stream.open(val); if (stream.is_open()) { t->ToStreamAsJSON(stream); stream.close(); } } } profiler_stop(); #ifndef SPS_STANDALONE set_stderr_callback(nullptr); #endif Sampler::Shutdown(); #ifdef SPS_STANDALONE mozilla::TimeStamp::Shutdown(); #endif PseudoStack *stack = tlsPseudoStack.get(); stack->deref(); tlsPseudoStack.set(nullptr); #ifdef MOZ_TASK_TRACER mozilla::tasktracer::ShutdownTaskTracer(); #endif }