Do not use std::containers in request roots
Summary:
The problem with using std::containers, is even if you write
your own custom scanner, the custom scanner cannot be called
in conservative mode. This is the same reason we cannot use
std::containers (of ponters) on the C++ stack.
This converts them to either folly::Optional(req::container),
for set/maps that allocate memory even when empty, or just
req::vector, which doesn't allocate memory until you insert
an element.
Stream::Wrapper subclasses: removed virtual scan() call. Either
the subclass is a static singleton, with no pointers, or req-heap
allocated with make_raw<T>, which makes it scannable.
HotProfilers: these were std allocated, but some contained req heap pointers.
made them all req::make_raw<T> allocated, since they (appear to) have
req-lifetime anyway.
Reviewed By: ricklavoie
Differential Revision:
D4051201
fbshipit-source-id:
2fbcc72b35911abc2747845e2362efb30d7e5ee1