Polish interceptor/transport manager logic

pull/20107/head
Muxi Yan 6 years ago
parent f1521d0693
commit 9094826cf5
  1. 2
      src/objective-c/GRPCClient/GRPCInterceptor.h
  2. 13
      src/objective-c/GRPCClient/GRPCInterceptor.m
  3. 2
      src/objective-c/GRPCClient/private/GRPCTransport+Private.h
  4. 4
      src/objective-c/GRPCClient/private/GRPCTransport+Private.m

@ -182,6 +182,8 @@ NS_ASSUME_NONNULL_BEGIN
/**
* Notify the manager that the interceptor has shut down and the manager should release references
* to other interceptors and stop forwarding requests/responses.
*
* The method can only be called by the manager's associated interceptor.
*/
- (void)shutDown;

@ -68,12 +68,11 @@
}
- (void)shutDown {
dispatch_async(_dispatchQueue, ^{
self->_nextInterceptor = nil;
self->_previousInterceptor = nil;
self->_thisInterceptor = nil;
self->_shutDown = YES;
});
// immediately releases reference; should not queue to dispatch queue.
_nextInterceptor = nil;
_previousInterceptor = nil;
_thisInterceptor = nil;
_shutDown = YES;
}
- (void)createNextInterceptor {
@ -203,6 +202,8 @@
return;
}
id<GRPCResponseHandler> copiedPreviousInterceptor = _previousInterceptor;
// no more callbacks should be issued to the previous interceptor
_previousInterceptor = nil;
dispatch_async(copiedPreviousInterceptor.dispatchQueue, ^{
[copiedPreviousInterceptor didCloseWithTrailingMetadata:trailingMetadata error:error];
});

@ -43,6 +43,8 @@ NS_ASSUME_NONNULL_BEGIN
/**
* Notify the manager that the transport has shut down and the manager should release references to
* its response handler and stop forwarding requests/responses.
*
* The method can only be called by the manager's associated transport instance.
*/
- (void)shutDown;

@ -46,8 +46,8 @@
return self;
}
// Must be called on _dispatchQueue or queues targeted by _dispatchQueue
- (void)shutDown {
// immediately releases reference; should not queue to dispatch queue.
_transport = nil;
_previousInterceptor = nil;
}
@ -111,6 +111,8 @@
return;
}
id<GRPCResponseHandler> copiedPreviousInterceptor = _previousInterceptor;
// no more callbacks should be issued to the previous interceptor
_previousInterceptor = nil;
dispatch_async(copiedPreviousInterceptor.dispatchQueue, ^{
[copiedPreviousInterceptor didCloseWithTrailingMetadata:trailingMetadata error:error];
});

Loading…
Cancel
Save