aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/objective-c/GRPCClient/private
diff options
context:
space:
mode:
authorGravatar Jorge Canizales <jcanizales@google.com>2015-06-25 11:39:23 -0700
committerGravatar Jorge Canizales <jcanizales@google.com>2015-06-25 11:39:23 -0700
commit88412083cf6fa6d21d80128b3f8a89efbe12fc8d (patch)
tree5c089b575fc9cb92d4ffe51238ccc396a17d9753 /src/objective-c/GRPCClient/private
parente25ec146011254dad0a7fe4a7d5cc99acea6bce1 (diff)
parent231103ba39303cc713631280deccb3b96d165174 (diff)
Merge pull request #2211 from murgatroid99/objective_c_retain_cycle
Fixed retain cycles in GRPCWrappedCall.m
Diffstat (limited to 'src/objective-c/GRPCClient/private')
-rw-r--r--src/objective-c/GRPCClient/private/GRPCWrappedCall.m20
1 files changed, 16 insertions, 4 deletions
diff --git a/src/objective-c/GRPCClient/private/GRPCWrappedCall.m b/src/objective-c/GRPCClient/private/GRPCWrappedCall.m
index 4ccd5723c6..d94b25091e 100644
--- a/src/objective-c/GRPCClient/private/GRPCWrappedCall.m
+++ b/src/objective-c/GRPCClient/private/GRPCWrappedCall.m
@@ -132,8 +132,12 @@
grpc_metadata_array_init(&_headers);
_op.data.recv_initial_metadata = &_headers;
if (handler) {
+ // Prevent reference cycle with _handler
+ __weak typeof(self) weakSelf = self;
_handler = ^{
- NSDictionary *metadata = [NSDictionary grpc_dictionaryFromMetadataArray:_headers];
+ __strong typeof(self) strongSelf = weakSelf;
+ NSDictionary *metadata = [NSDictionary
+ grpc_dictionaryFromMetadataArray:strongSelf->_headers];
handler(metadata);
};
}
@@ -160,8 +164,11 @@
_op.op = GRPC_OP_RECV_MESSAGE;
_op.data.recv_message = &_receivedMessage;
if (handler) {
+ // Prevent reference cycle with _handler
+ __weak typeof(self) weakSelf = self;
_handler = ^{
- handler(_receivedMessage);
+ __strong typeof(self) strongSelf = weakSelf;
+ handler(strongSelf->_receivedMessage);
};
}
}
@@ -190,9 +197,14 @@
grpc_metadata_array_init(&_trailers);
_op.data.recv_status_on_client.trailing_metadata = &_trailers;
if (handler) {
+ // Prevent reference cycle with _handler
+ __weak typeof(self) weakSelf = self;
_handler = ^{
- NSError *error = [NSError grpc_errorFromStatusCode:_statusCode details:_details];
- NSDictionary *trailers = [NSDictionary grpc_dictionaryFromMetadataArray:_trailers];
+ __strong typeof(self) strongSelf = weakSelf;
+ NSError *error = [NSError grpc_errorFromStatusCode:strongSelf->_statusCode
+ details:strongSelf->_details];
+ NSDictionary *trailers = [NSDictionary
+ grpc_dictionaryFromMetadataArray:strongSelf->_trailers];
handler(error, trailers);
};
}