aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/objective-c/GRPCClient/private/GRPCWrappedCall.m
diff options
context:
space:
mode:
authorGravatar Muxi Yan <mxyan@google.com>2018-11-18 22:47:35 -0800
committerGravatar Muxi Yan <mxyan@google.com>2018-11-18 22:47:35 -0800
commitf0cbcde73195b8e17130538c3479d4c0e3bcd2a2 (patch)
tree06483748c28dc85c4927eec35e88b6001923999e /src/objective-c/GRPCClient/private/GRPCWrappedCall.m
parent87abab45c99ab4b40718557cbc1c25dcd7f5a418 (diff)
New channel pool design
Diffstat (limited to 'src/objective-c/GRPCClient/private/GRPCWrappedCall.m')
-rw-r--r--src/objective-c/GRPCClient/private/GRPCWrappedCall.m31
1 files changed, 11 insertions, 20 deletions
diff --git a/src/objective-c/GRPCClient/private/GRPCWrappedCall.m b/src/objective-c/GRPCClient/private/GRPCWrappedCall.m
index ae7f07f119..5c402250cc 100644
--- a/src/objective-c/GRPCClient/private/GRPCWrappedCall.m
+++ b/src/objective-c/GRPCClient/private/GRPCWrappedCall.m
@@ -238,7 +238,7 @@
@implementation GRPCWrappedCall {
GRPCCompletionQueue *_queue;
- GRPCChannel *_channel;
+ GRPCPooledChannel *_channel;
grpc_call *_call;
}
@@ -257,21 +257,15 @@
// consuming too many threads and having contention of multiple calls in a single completion
// queue. Currently we use a singleton queue.
_queue = [GRPCCompletionQueue completionQueue];
- BOOL disconnected = NO;
- do {
- _channel = [[GRPCChannelPool sharedInstance] channelWithHost:host callOptions:callOptions];
- if (_channel == nil) {
- NSAssert(_channel != nil, @"Failed to get a channel for the host.");
- NSLog(@"Failed to get a channel for the host.");
- return nil;
- }
- _call = [_channel unmanagedCallWithPath:path
- completionQueue:_queue
- callOptions:callOptions
- disconnected:&disconnected];
- // Try create another channel if the current channel is disconnected (due to idleness or
- // connectivity monitor disconnection).
- } while (_call == NULL && disconnected);
+ _channel = [[GRPCChannelPool sharedInstance] channelWithHost:host callOptions:callOptions];
+ if (_channel == nil) {
+ NSAssert(_channel != nil, @"Failed to get a channel for the host.");
+ NSLog(@"Failed to get a channel for the host.");
+ return nil;
+ }
+ _call = [_channel unmanagedCallWithPath:path
+ completionQueue:_queue
+ callOptions:callOptions];
if (_call == nil) {
NSAssert(_channel != nil, @"Failed to get a channel for the host.");
NSLog(@"Failed to create a call.");
@@ -326,10 +320,7 @@
}
- (void)dealloc {
- if (_call) {
- grpc_call_unref(_call);
- }
- [_channel unref];
+ [_channel unrefUnmanagedCall:_call];
_channel = nil;
}