diff options
author | Craig Tiller <ctiller@google.com> | 2015-06-25 12:55:16 -0700 |
---|---|---|
committer | Craig Tiller <ctiller@google.com> | 2015-06-25 12:55:16 -0700 |
commit | 13ec8719cacd43972762cc07f3c4befd6f67bc6d (patch) | |
tree | e6a596941ff313dd8734f4003cd7fd51e6072bf9 | |
parent | 54df47eaa5ba26466b2b14f1b213084f4b78c2ba (diff) | |
parent | d5c5de9a5c836af2baf8aff4ffbecd74327a8dd8 (diff) |
Merge github.com:grpc/grpc into tis-but-thy-name
-rw-r--r-- | src/compiler/objective_c_generator.cc | 23 | ||||
-rw-r--r-- | src/objective-c/GRPCClient/private/GRPCWrappedCall.m | 20 | ||||
-rw-r--r-- | src/objective-c/tests/InteropTests.m | 8 | ||||
-rwxr-xr-x | src/php/bin/determine_extension_dir.sh | 49 | ||||
-rwxr-xr-x | src/php/bin/interop_client.sh | 11 | ||||
-rwxr-xr-x | src/php/bin/run_gen_code_test.sh | 11 | ||||
-rwxr-xr-x | src/php/bin/run_tests.sh | 35 |
7 files changed, 97 insertions, 60 deletions
diff --git a/src/compiler/objective_c_generator.cc b/src/compiler/objective_c_generator.cc index b235911479..79a84b4a7a 100644 --- a/src/compiler/objective_c_generator.cc +++ b/src/compiler/objective_c_generator.cc @@ -68,18 +68,19 @@ void PrintMethodSignature(Printer *printer, printer->Print(vars, "- ($return_type$)$method_name$With"); if (method->client_streaming()) { - printer->Print("RequestsWriter:(id<GRXWriter>)request"); + printer->Print("RequestsWriter:(id<GRXWriter>)requestWriter"); } else { printer->Print(vars, "Request:($request_class$ *)request"); } // TODO(jcanizales): Put this on a new line and align colons. - // TODO(jcanizales): eventHandler for server streaming? - printer->Print(" handler:(void(^)("); if (method->server_streaming()) { - printer->Print("BOOL done, "); + printer->Print(vars, " eventHandler:(void(^)(BOOL done, " + "$response_class$ *response, NSError *error))eventHandler"); + } else { + printer->Print(vars, " handler:(void(^)($response_class$ *response, " + "NSError *error))handler"); } - printer->Print(vars, "$response_class$ *response, NSError *error))handler"); } void PrintSimpleSignature(Printer *printer, @@ -125,11 +126,15 @@ void PrintSimpleImplementation(Printer *printer, printer->Print("{\n"); printer->Print(vars, " [[self RPCTo$method_name$With"); if (method->client_streaming()) { - printer->Print("RequestsWriter:request"); + printer->Print("RequestsWriter:requestWriter"); } else { printer->Print("Request:request"); } - printer->Print(" handler:handler] start];\n"); + if (method->server_streaming()) { + printer->Print(" eventHandler:eventHandler] start];\n"); + } else { + printer->Print(" handler:handler] start];\n"); + } printer->Print("}\n"); } @@ -141,7 +146,7 @@ void PrintAdvancedImplementation(Printer *printer, printer->Print(" requestsWriter:"); if (method->client_streaming()) { - printer->Print("request\n"); + printer->Print("requestWriter\n"); } else { printer->Print("[GRXWriter writerWithValue:request]\n"); } @@ -150,7 +155,7 @@ void PrintAdvancedImplementation(Printer *printer, printer->Print(" responsesWriteable:[GRXWriteable "); if (method->server_streaming()) { - printer->Print("writeableWithStreamHandler:handler]];\n"); + printer->Print("writeableWithStreamHandler:eventHandler]];\n"); } else { printer->Print("writeableWithSingleValueHandler:handler]];\n"); } 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); }; } diff --git a/src/objective-c/tests/InteropTests.m b/src/objective-c/tests/InteropTests.m index 684f7c2ff6..74f6b231cf 100644 --- a/src/objective-c/tests/InteropTests.m +++ b/src/objective-c/tests/InteropTests.m @@ -174,7 +174,7 @@ __block int index = 0; [_service streamingOutputCallWithRequest:request - handler:^(BOOL done, + eventHandler:^(BOOL done, RMTStreamingOutputCallResponse *response, NSError *error){ XCTAssertNil(error, @"Finished with unexpected error: %@", error); @@ -211,7 +211,7 @@ [requestsBuffer writeValue:request]; [_service fullDuplexCallWithRequestsWriter:requestsBuffer - handler:^(BOOL done, + eventHandler:^(BOOL done, RMTStreamingOutputCallResponse *response, NSError *error) { XCTAssertNil(error, @"Finished with unexpected error: %@", error); @@ -242,7 +242,7 @@ - (void)testEmptyStreamRPC { __weak XCTestExpectation *expectation = [self expectationWithDescription:@"EmptyStream"]; [_service fullDuplexCallWithRequestsWriter:[GRXWriter emptyWriter] - handler:^(BOOL done, + eventHandler:^(BOOL done, RMTStreamingOutputCallResponse *response, NSError *error) { XCTAssertNil(error, @"Finished with unexpected error: %@", error); @@ -283,7 +283,7 @@ [requestsBuffer writeValue:request]; __block ProtoRPC *call = [_service RPCToFullDuplexCallWithRequestsWriter:requestsBuffer - handler:^(BOOL done, + eventHandler:^(BOOL done, RMTStreamingOutputCallResponse *response, NSError *error) { if (receivedResponse) { diff --git a/src/php/bin/determine_extension_dir.sh b/src/php/bin/determine_extension_dir.sh new file mode 100755 index 0000000000..6fc392afc0 --- /dev/null +++ b/src/php/bin/determine_extension_dir.sh @@ -0,0 +1,49 @@ +#!/bin/bash +# Copyright 2015, Google Inc. +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions are +# met: +# +# * Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# * Redistributions in binary form must reproduce the above +# copyright notice, this list of conditions and the following disclaimer +# in the documentation and/or other materials provided with the +# distribution. +# * Neither the name of Google Inc. nor the names of its +# contributors may be used to endorse or promote products derived from +# this software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +set -e +default_extension_dir=$(php -i | grep extension_dir | sed 's/.*=> //g') +if command -v brew >/dev/null && [ -d $(brew --prefix)/opt/grpc-php ]; then + # homebrew and the grpc-php formula are installed + extension_dir="-d extension_dir="$(brew --prefix)/opt/grpc-php +elif [ ! -f $default_extension_dir/grpc.so ]; then + # the grpc extension is not found in the default PHP extension dir + # try the source modules directory + module_dir=../ext/grpc/modules + if [ ! -f $module_dir/grpc.so ]; then + echo "Please run 'phpize && ./configure && make' from ext/grpc first" + exit 1 + fi + # sym-link in system supplied extensions + for f in $default_extension_dir/*.so; do + ln -s $f $module_dir/$(basename $f) &> /dev/null || true + done + extension_dir="-d extension_dir="$module_dir +fi diff --git a/src/php/bin/interop_client.sh b/src/php/bin/interop_client.sh index 4fe63788c1..42e075cbe8 100755 --- a/src/php/bin/interop_client.sh +++ b/src/php/bin/interop_client.sh @@ -1,4 +1,4 @@ -#!/bin/sh +#!/bin/bash # Copyright 2015, Google Inc. # All rights reserved. # @@ -28,11 +28,8 @@ # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -set +e +set -e cd $(dirname $0) - -module_dir=../ext/grpc/modules - -php -d extension_dir=$module_dir -d extension=grpc.so \ +source ./determine_extension_dir.sh +php $extension_dir -d extension=grpc.so \ ../tests/interop/interop_client.php $@ 1>&2 diff --git a/src/php/bin/run_gen_code_test.sh b/src/php/bin/run_gen_code_test.sh index 1be2ed3f72..03a9101a45 100755 --- a/src/php/bin/run_gen_code_test.sh +++ b/src/php/bin/run_gen_code_test.sh @@ -1,4 +1,4 @@ -# Runs the generated code test against the ruby server +#!/bin/bash # Copyright 2015, Google Inc. # All rights reserved. # @@ -28,10 +28,11 @@ # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +set -e cd $(dirname $0) -GRPC_TEST_HOST=localhost:50051 php -d extension_dir=../ext/grpc/modules/ \ - -d extension=grpc.so `which phpunit` -v --debug --strict \ +source ./determine_extension_dir.sh +export GRPC_TEST_HOST=localhost:7071 +php $extension_dir -d extension=grpc.so $(which phpunit) -v --debug --strict \ ../tests/generated_code/GeneratedCodeTest.php -GRPC_TEST_HOST=localhost:50051 php -d extension_dir=../ext/grpc/modules/ \ - -d extension=grpc.so `which phpunit` -v --debug --strict \ +php $extension_dir -d extension=grpc.so $(which phpunit) -v --debug --strict \ ../tests/generated_code/GeneratedCodeWithCallbackTest.php diff --git a/src/php/bin/run_tests.sh b/src/php/bin/run_tests.sh index 422757bb44..4c37285455 100755 --- a/src/php/bin/run_tests.sh +++ b/src/php/bin/run_tests.sh @@ -1,4 +1,4 @@ -#!/bin/sh +#!/bin/bash # Copyright 2015, Google Inc. # All rights reserved. # @@ -32,33 +32,6 @@ # against it set -e cd $(dirname $0) -default_extension_dir=`php -i | grep extension_dir | sed 's/.*=> //g'` - -if command -v brew >/dev/null && [ -d `brew --prefix`/opt/grpc-php ] -then - # homebrew and the grpc-php formula are installed - extension_dir="-d extension_dir="`brew --prefix`/opt/grpc-php -elif [ ! -e $default_extension_dir/grpc.so ] -then - # the grpc extension is not found in the default PHP extension dir - # try the source modules directory - module_dir=../ext/grpc/modules - if [ ! -d $module_dir ] - then - echo "Please run 'phpize && ./configure && make' from ext/grpc first" - exit 1 - fi - - # sym-link in system supplied extensions - for f in $default_extension_dir/*.so - do - ln -s $f $module_dir/$(basename $f) &> /dev/null || true - done - - extension_dir='-d extension_dir='$module_dir -fi - -php \ - $extension_dir \ - -d extension=grpc.so \ - `which phpunit` -v --debug --strict ../tests/unit_tests +source ./determine_extension_dir.sh +php $extension_dir -d extension=grpc.so $(which phpunit) -v --debug --strict \ + ../tests/unit_tests |