From eab498bef453e221abd4602e6ceff16da659b3c1 Mon Sep 17 00:00:00 2001 From: Muxi Yan Date: Wed, 10 Oct 2018 16:44:00 -0700 Subject: [PATCH] Handle GRPCCall2:start: twice --- src/objective-c/GRPCClient/GRPCCall.h | 2 +- src/objective-c/GRPCClient/GRPCCall.m | 6 ++++++ 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/src/objective-c/GRPCClient/GRPCCall.h b/src/objective-c/GRPCClient/GRPCCall.h index 8554860aded..5f6afab08cb 100644 --- a/src/objective-c/GRPCClient/GRPCCall.h +++ b/src/objective-c/GRPCClient/GRPCCall.h @@ -235,7 +235,7 @@ extern id const kGRPCTrailersKey; responseHandler:(id)responseHandler; /** - * Starts the call. Can only be called once. + * Starts the call. This function should only be called once; additional calls will be discarded. */ - (void)start; diff --git a/src/objective-c/GRPCClient/GRPCCall.m b/src/objective-c/GRPCClient/GRPCCall.m index 6eb9e2e4066..9cb4aa34c24 100644 --- a/src/objective-c/GRPCClient/GRPCCall.m +++ b/src/objective-c/GRPCClient/GRPCCall.m @@ -92,6 +92,7 @@ const char *kCFStreamVarName = "grpc_cfstream"; BOOL _initialMetadataPublished; GRXBufferedPipe *_pipe; dispatch_queue_t _dispatchQueue; + bool _started; } - (instancetype)initWithRequestOptions:(GRPCRequestOptions *)requestOptions @@ -108,6 +109,7 @@ const char *kCFStreamVarName = "grpc_cfstream"; _initialMetadataPublished = NO; _pipe = [GRXBufferedPipe pipe]; _dispatchQueue = dispatch_queue_create(NULL, DISPATCH_QUEUE_SERIAL); + _started = NO; } return self; @@ -120,6 +122,10 @@ const char *kCFStreamVarName = "grpc_cfstream"; - (void)start { dispatch_async(_dispatchQueue, ^{ + if (self->_started) { + return; + } + self->_started = YES; if (!self->_callOptions) { self->_callOptions = [[GRPCCallOptions alloc] init]; }