From badbaa8d766a4740ebcd9e276d6cf4885b70f687 Mon Sep 17 00:00:00 2001 From: SHANKS Date: Fri, 21 Dec 2018 15:58:38 +0800 Subject: [PATCH 1/2] Fix RCTImageLoader multi thread crash --- Libraries/Network/RCTHTTPRequestHandler.mm | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/Libraries/Network/RCTHTTPRequestHandler.mm b/Libraries/Network/RCTHTTPRequestHandler.mm index 863fea857ddfd7..dd47230a20ecf8 100644 --- a/Libraries/Network/RCTHTTPRequestHandler.mm +++ b/Libraries/Network/RCTHTTPRequestHandler.mm @@ -23,13 +23,16 @@ @implementation RCTHTTPRequestHandler } @synthesize bridge = _bridge; +@synthesize methodQueue = _methodQueue; RCT_EXPORT_MODULE() - (void)invalidate { - [_session invalidateAndCancel]; - _session = nil; + dispatch_async(self->_methodQueue, ^{ + [self->_session invalidateAndCancel]; + self->_session = nil; + }); } - (BOOL)isValid @@ -73,8 +76,10 @@ - (NSURLSessionDataTask *)sendRequest:(NSURLRequest *)request valueOptions:NSPointerFunctionsStrongMemory capacity:0]; } - - NSURLSessionDataTask *task = [_session dataTaskWithRequest:request]; + __block NSURLSessionDataTask *task = nil; + dispatch_async(self->_methodQueue, ^{ + task = [self->_session dataTaskWithRequest:request]; + }); { std::lock_guard lock(_mutex); [_delegates setObject:delegate forKey:task]; From d9a40557b77e083b11498097202b08357081c6e2 Mon Sep 17 00:00:00 2001 From: SHANKS Date: Fri, 21 Dec 2018 17:07:12 +0800 Subject: [PATCH 2/2] async->sync --- Libraries/Network/RCTHTTPRequestHandler.mm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Libraries/Network/RCTHTTPRequestHandler.mm b/Libraries/Network/RCTHTTPRequestHandler.mm index dd47230a20ecf8..2ddbb8a52b7e1d 100644 --- a/Libraries/Network/RCTHTTPRequestHandler.mm +++ b/Libraries/Network/RCTHTTPRequestHandler.mm @@ -77,7 +77,7 @@ - (NSURLSessionDataTask *)sendRequest:(NSURLRequest *)request capacity:0]; } __block NSURLSessionDataTask *task = nil; - dispatch_async(self->_methodQueue, ^{ + dispatch_sync(self->_methodQueue, ^{ task = [self->_session dataTaskWithRequest:request]; }); {