From 65aaa9c045006b2b73b6d2c4c6d95cb1f25147ec Mon Sep 17 00:00:00 2001 From: Pieter De Baets Date: Mon, 15 May 2017 03:36:58 -0700 Subject: [PATCH] Fix memory leak in RN fbsystrace support Reviewed By: alexeylang Differential Revision: D5060485 fbshipit-source-id: f2ab38023f1870992c16bea08ee887261d0ca34b --- React/Profiler/RCTProfile.m | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/React/Profiler/RCTProfile.m b/React/Profiler/RCTProfile.m index ec1046c03..9b65302f7 100644 --- a/React/Profiler/RCTProfile.m +++ b/React/Profiler/RCTProfile.m @@ -71,7 +71,7 @@ if (!RCTProfileIsProfiling()) { \ static RCTProfileCallbacks *callbacks; static char *systrace_buffer; -static systrace_arg_t *systraceArgsFromDictionary(NSDictionary *args) +static systrace_arg_t *newSystraceArgsFromDictionary(NSDictionary *args) { if (args.count == 0) { return NULL; @@ -547,7 +547,9 @@ void _RCTProfileBeginEvent( CHECK(); if (callbacks != NULL) { - callbacks->begin_section(tag, name.UTF8String, args.count, systraceArgsFromDictionary(args)); + systrace_arg_t *systraceArgs = newSystraceArgsFromDictionary(args); + callbacks->begin_section(tag, name.UTF8String, args.count, systraceArgs); + free(systraceArgs); return; } @@ -610,8 +612,9 @@ NSUInteger RCTProfileBeginAsyncEvent( NSUInteger currentEventID = ++eventID; if (callbacks != NULL) { - callbacks->begin_async_section(tag, name.UTF8String, (int)(currentEventID % INT_MAX), - args.count, systraceArgsFromDictionary(args)); + systrace_arg_t *systraceArgs = newSystraceArgsFromDictionary(args); + callbacks->begin_async_section(tag, name.UTF8String, (int)(currentEventID % INT_MAX), args.count, systraceArgs); + free(systraceArgs); } else { dispatch_async(RCTProfileGetQueue(), ^{ RCTProfileOngoingEvents[@(currentEventID)] = @[