From ecb501b7f5c77cf3aff3603b22040824ae766b75 Mon Sep 17 00:00:00 2001
From: Sarang Masti <mssarang@fb.com>
Date: Tue, 28 Nov 2017 15:51:10 -0800
Subject: [PATCH] Fix incorrect usages of folly::Synchronized

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
---
 folly/io/async/EventBaseLocal.cpp | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/folly/io/async/EventBaseLocal.cpp b/folly/io/async/EventBaseLocal.cpp
index cda631137..c754ae7f1 100644
--- a/folly/io/async/EventBaseLocal.cpp
+++ b/folly/io/async/EventBaseLocal.cpp
@@ -22,7 +22,8 @@
 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);
-- 
2.26.2