aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/objective-c/GRPCClient/private/GRPCWrappedCall.m
diff options
context:
space:
mode:
authorGravatar murgatroid99 <mlumish@google.com>2015-06-24 16:55:55 -0700
committerGravatar murgatroid99 <mlumish@google.com>2015-06-24 16:55:55 -0700
commitdbda969039452c7431f2b0d60cfef0b7e08c0937 (patch)
treebd721d8ef825a093cf333c61ec4c581209b2955e /src/objective-c/GRPCClient/private/GRPCWrappedCall.m
parente7324878a9122bc53e5101e835427557dee2f496 (diff)
Fixed 'retain cycle' warnings in GRPCWrappedCall.m
Diffstat (limited to 'src/objective-c/GRPCClient/private/GRPCWrappedCall.m')
-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..8a556e155b 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);
};
}