1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
|
From 7b6c571182661cfffa0987c1a88a2cb5a3230bcd Mon Sep 17 00:00:00 2001
From: Georg Fritzsche <georg.fritzsche@googlemail.com>
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<ScopedXPCOMStartup> mScopedXPCOM;
- UniquePtr<base::StatisticsRecorder> mStatisticsRecorder;
nsAutoPtr<mozilla::ScopedAppData> 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<base::StatisticsRecorder>();
-
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
|