From 7b6c571182661cfffa0987c1a88a2cb5a3230bcd Mon Sep 17 00:00:00 2001 From: Georg Fritzsche Date: Tue, 18 Aug 2015 19:21:40 +0200 Subject: [PATCH] Bug 1193038 - Purposely leak StatisticsReport object and suppress the leak report. r=glandium,mccr8,njn, a=lizzard --HG-- extra : source : 346b9ee524d1a704ea953ef16237f3d0c7ee56d1 extra : intermediate-source : 48b17faad125691454ebba9bdef0a5def9128f11 --- build/valgrind/cross-architecture.sup | 9 +++++++++ toolkit/xre/nsAppRunner.cpp | 22 +++++++++++++++------- 2 files changed, 24 insertions(+), 7 deletions(-) diff --git a/build/valgrind/cross-architecture.sup b/build/valgrind/cross-architecture.sup index 9215d3b..1e9d7ab 100644 --- a/build/valgrind/cross-architecture.sup +++ b/build/valgrind/cross-architecture.sup @@ -34,6 +34,15 @@ fun:_ZN13CrashReporter14SetupExtraDataEP7nsIFileRK19nsACString_internal ... } +{ + We purposely leak the StatisticsReporter object + Memcheck:Leak + fun:malloc + fun:moz_xmalloc + fun:operator new + fun:_Z21XRE_CreateStatsObjectv + ... +} #################################### # Leaks in third party libraries # diff --git a/toolkit/xre/nsAppRunner.cpp b/toolkit/xre/nsAppRunner.cpp index 5334a05..037aeac 100644 --- a/toolkit/xre/nsAppRunner.cpp +++ b/toolkit/xre/nsAppRunner.cpp @@ -20,6 +20,7 @@ #include "mozilla/Poison.h" #include "mozilla/Preferences.h" #include "mozilla/Telemetry.h" +#include "mozilla/MemoryChecking.h" #include "nsAppRunner.h" #include "mozilla/AppData.h" @@ -3004,7 +3005,6 @@ public: ~XREMain() { mScopedXPCOM = nullptr; - mStatisticsRecorder = nullptr; mAppData = nullptr; } @@ -3023,7 +3023,6 @@ public: #endif UniquePtr mScopedXPCOM; - UniquePtr mStatisticsRecorder; nsAutoPtr mAppData; nsXREDirProvider mDirProvider; @@ -4268,10 +4267,6 @@ XREMain::XRE_main(int argc, char* argv[], const nsXREAppData* aAppData) NS_ENSURE_TRUE(aAppData, 2); - // A initializer to initialize histogram collection, a chromium - // thing used by Telemetry. - mStatisticsRecorder = MakeUnique(); - mAppData = new ScopedAppData(aAppData); if (!mAppData) return 1; @@ -4345,7 +4340,6 @@ XREMain::XRE_main(int argc, char* argv[], const nsXREAppData* aAppData) } mScopedXPCOM = nullptr; - mStatisticsRecorder = nullptr; // unlock the profile after ScopedXPCOMStartup object (xpcom) // has gone out of scope. see bug #386739 for more details @@ -4531,11 +4525,25 @@ XRE_StopLateWriteChecks(void) { mozilla::StopLateWriteChecks(); } +// Separate stub function to let us specifically suppress it in Valgrind +void +XRE_CreateStatsObject() +{ + // A initializer to initialize histogram collection, a chromium + // thing used by Telemetry (and effectively a global; it's all static). + // Note: purposely leaked + base::StatisticsRecorder* statistics_recorder = new base::StatisticsRecorder(); + MOZ_LSAN_INTENTIONALLY_LEAK_OBJECT(statistics_recorder); + unused << statistics_recorder; +} + int XRE_main(int argc, char* argv[], const nsXREAppData* aAppData, uint32_t aFlags) { #if !defined(MOZ_METRO) || !defined(XP_WIN) XREMain main; + + XRE_CreateStatsObject(); int result = main.XRE_main(argc, argv, aAppData); mozilla::RecordShutdownEndTimeStamp(); return result; -- 2.5.0