Avoid deadlocks in message sender.

pull/1/head
Matthew Chen 7 years ago
parent d5e61dac9f
commit a19882baaa

@ -1,5 +1,5 @@
//
// Copyright (c) 2017 Open Whisper Systems. All rights reserved.
// Copyright (c) 2018 Open Whisper Systems. All rights reserved.
//
/**
@ -27,6 +27,9 @@ extern NSString *const TSNetworkManagerDomain;
BOOL IsNSErrorNetworkFailure(NSError *_Nullable error);
typedef void (^TSNetworkManagerSuccess)(NSURLSessionDataTask *task, id responseObject);
typedef void (^TSNetworkManagerFailure)(NSURLSessionDataTask *task, NSError *error);
@interface TSNetworkManager : NSObject
- (instancetype)init NS_UNAVAILABLE;
@ -34,8 +37,13 @@ BOOL IsNSErrorNetworkFailure(NSError *_Nullable error);
+ (instancetype)sharedManager;
- (void)makeRequest:(TSRequest *)request
success:(void (^)(NSURLSessionDataTask *task, id responseObject))success
failure:(void (^)(NSURLSessionDataTask *task, NSError *error))failure NS_SWIFT_NAME(makeRequest(_:success:failure:));
success:(TSNetworkManagerSuccess)success
failure:(TSNetworkManagerFailure)failure NS_SWIFT_NAME(makeRequest(_:success:failure:));
- (void)makeRequest:(TSRequest *)request
shouldCompleteOnMainQueue:(BOOL)shouldCompleteOnMainQueue
success:(TSNetworkManagerSuccess)success
failure:(TSNetworkManagerFailure)failure NS_SWIFT_NAME(makeRequest(_:shouldCompleteOnMainQueue:success:failure:));
@end

@ -55,9 +55,21 @@ typedef void (^failureBlock)(NSURLSessionDataTask *task, NSError *error);
#pragma mark Manager Methods
- (void)makeRequest:(TSRequest *)request
success:(void (^)(NSURLSessionDataTask *task, id responseObject))success
failure:(void (^)(NSURLSessionDataTask *task, NSError *error))failureBlock
success:(TSNetworkManagerSuccess)success
failure:(TSNetworkManagerFailure)failure
{
return [self makeRequest:request shouldCompleteOnMainQueue:YES success:success failure:failure];
}
- (void)makeRequest:(TSRequest *)request
shouldCompleteOnMainQueue:(BOOL)shouldCompleteOnMainQueue
success:(TSNetworkManagerSuccess)success
failure:(TSNetworkManagerFailure)failureBlock
{
OWSAssert(request);
OWSAssert(success);
OWSAssert(failureBlock);
DDLogInfo(@"%@ Making request: %@", self.logTag, request);
if (!CurrentAppContext().isMainApp) {
if (![request isKindOfClass:[TSRecipientPrekeyRequest class]]
@ -73,6 +85,11 @@ typedef void (^failureBlock)(NSURLSessionDataTask *task, NSError *error);
[TSNetworkManager errorPrettifyingForFailureBlock:failureBlock];
AFHTTPSessionManager *sessionManager = [OWSSignalService sharedInstance].signalServiceSessionManager;
if (shouldCompleteOnMainQueue) {
sessionManager.completionQueue = dispatch_get_main_queue();
} else {
sessionManager.completionQueue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);
}
if ([request isKindOfClass:[TSVerifyCodeRequest class]]) {
// We plant the Authorization parameter ourselves, no need to double add.

@ -205,7 +205,6 @@ NSString *const kNSNotificationName_IsCensorshipCircumventionActiveDidChange =
sessionManager.requestSerializer = [AFJSONRequestSerializer serializer];
[sessionManager.requestSerializer setValue:self.censorshipConfiguration.signalServiceReflectorHost forHTTPHeaderField:@"Host"];
sessionManager.responseSerializer = [AFJSONResponseSerializer serializer];
return sessionManager;

Loading…
Cancel
Save