From 9e7c2b69828c513fea4c57bdb39a829da2e8eded Mon Sep 17 00:00:00 2001 From: Diego Sanchez Date: Wed, 18 Jul 2018 08:05:10 -0700 Subject: [PATCH] Wraps receiving callback into an autoreleasepool Summary: The receiving callbacks are executed from a thread that doesn't have an autorelease pool. That results in autoreleased objects leaking Reviewed By: schaitoff Differential Revision: D8889915 fbshipit-source-id: 07e9129954e6f9afea56473b590125c63ecd7092 --- .../CppBridge/SonarCppBridgingConnection.mm | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/iOS/SonarKit/CppBridge/SonarCppBridgingConnection.mm b/iOS/SonarKit/CppBridge/SonarCppBridgingConnection.mm index 48a9eadcd..9a9c05d73 100644 --- a/iOS/SonarKit/CppBridge/SonarCppBridgingConnection.mm +++ b/iOS/SonarKit/CppBridge/SonarCppBridgingConnection.mm @@ -33,13 +33,15 @@ - (void)receive:(NSString *)method withBlock:(SonarReceiver)receiver { - const auto lambda = [receiver](const folly::dynamic &message, - std::unique_ptr responder) { - SonarCppBridgingResponder *const objCResponder = + const auto lambda = [receiver](const folly::dynamic &message, + std::unique_ptr responder) { + @autoreleasepool { + SonarCppBridgingResponder *const objCResponder = [[SonarCppBridgingResponder alloc] initWithCppResponder:std::move(responder)]; - receiver(facebook::cxxutils::convertFollyDynamicToId(message), objCResponder); - }; - conn_->receive([method UTF8String], lambda); + receiver(facebook::cxxutils::convertFollyDynamicToId(message), objCResponder); + } + }; + conn_->receive([method UTF8String], lambda); } @end