@@ -12,6 +12,12 @@ namespace dfly {
12
12
namespace {
13
13
thread_local AllocationTracker g_tracker;
14
14
thread_local absl::InsecureBitGen g_bitgen;
15
+
16
+ bool CanCallVlog (std::string_view trace) {
17
+ // GLOG fails when logging while flushing the current log under a mutex
18
+ return trace.find (" LogMessage::Flush" ) == std::string::npos;
19
+ }
20
+
15
21
} // namespace
16
22
17
23
AllocationTracker& AllocationTracker::Get () {
@@ -75,9 +81,13 @@ void AllocationTracker::ProcessNew(void* ptr, size_t size) {
75
81
}
76
82
77
83
size_t usable = mi_usable_size (ptr);
78
- DCHECK_GE (usable, size);
79
- LOG (INFO) << " Allocating " << usable << " bytes (" << ptr
80
- << " ). Stack: " << util::fb2::GetStacktrace ();
84
+ std::string trace = util::fb2::GetStacktrace ();
85
+
86
+ if (CanCallVlog (trace)) {
87
+ DCHECK_GE (usable, size);
88
+ LOG (INFO) << " Allocating " << usable << " bytes (" << ptr << " ). Stack: " << trace;
89
+ }
90
+
81
91
break ;
82
92
}
83
93
inside_tracker_ = false ;
@@ -94,8 +104,9 @@ void AllocationTracker::ProcessDelete(void* ptr) {
94
104
if (tracking_.size () == 1 && tracking_.front ().sample_odds == 1 ) {
95
105
size_t usable = mi_usable_size (ptr);
96
106
if (usable <= tracking_.front ().upper_bound && usable >= tracking_.front ().lower_bound ) {
97
- LOG (INFO) << " Deallocating " << usable << " bytes (" << ptr << " )\n "
98
- << util::fb2::GetStacktrace ();
107
+ std::string trace = util::fb2::GetStacktrace ();
108
+ LOG_IF (INFO, CanCallVlog (trace)) << " Deallocating " << usable << " bytes (" << ptr << " )\n "
109
+ << trace;
99
110
}
100
111
}
101
112
inside_tracker_ = false ;
0 commit comments