@@ -172,8 +172,10 @@ void Stack::IteratePointers(StackVisitor* visitor) const {
172
172
visitor, reinterpret_cast <const void * const *>(context_->stack_marker ),
173
173
stack_start_, asan_fake_stack);
174
174
175
- for (const auto & stack : inactive_stacks_) {
176
- IteratePointersInStack (visitor, stack.top , stack.start , asan_fake_stack);
175
+ if (inactive_stacks_) {
176
+ for (const auto & stack : *inactive_stacks_) {
177
+ IteratePointersInStack (visitor, stack.top , stack.start , asan_fake_stack);
178
+ }
177
179
}
178
180
179
181
IterateUnsafeStackIfNecessary (visitor);
@@ -234,9 +236,12 @@ void Stack::ClearContext(bool check_invariant) {
234
236
235
237
void Stack::AddStackSegment (const void * start, const void * top) {
236
238
DCHECK_LE (top, start);
237
- inactive_stacks_.push_back ({start, top});
239
+ if (!inactive_stacks_) {
240
+ inactive_stacks_ = std::make_unique<std::remove_reference_t <decltype (*inactive_stacks_)>>();
241
+ }
242
+ inactive_stacks_->push_back ({start, top});
238
243
}
239
244
240
- void Stack::ClearStackSegments () { inactive_stacks_. clear (); }
245
+ void Stack::ClearStackSegments () { if ( inactive_stacks_) inactive_stacks_-> clear (); }
241
246
242
247
} // namespace heap::base
0 commit comments