Summary:
We need to keep LockedPtr returned by rlock/wlock alive for the entire duration
of the loop. Else we are working on a snapshot of the data structure, which
might not be what we want.
Reviewed By: aary, ot, luciang
Differential Revision:
D6426613
fbshipit-source-id:
294c0a7b9d756f3116d5cdb3a7b3678f693e0754
namespace folly { namespace detail {
EventBaseLocalBase::~EventBaseLocalBase() {
- for (auto* evb : *eventBases_.rlock()) {
+ auto locked = eventBases_.rlock();
+ for (auto* evb : *locked) {
evb->runInEventBaseThread([ this, evb, key = key_ ] {
evb->localStorage_.erase(key);
evb->localStorageToDtor_.erase(this);