aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorGravatar Craig Tiller <ctiller@google.com>2015-06-25 12:55:16 -0700
committerGravatar Craig Tiller <ctiller@google.com>2015-06-25 12:55:16 -0700
commit13ec8719cacd43972762cc07f3c4befd6f67bc6d (patch)
treee6a596941ff313dd8734f4003cd7fd51e6072bf9
parent54df47eaa5ba26466b2b14f1b213084f4b78c2ba (diff)
parentd5c5de9a5c836af2baf8aff4ffbecd74327a8dd8 (diff)
Merge github.com:grpc/grpc into tis-but-thy-name
-rw-r--r--src/compiler/objective_c_generator.cc23
-rw-r--r--src/objective-c/GRPCClient/private/GRPCWrappedCall.m20
-rw-r--r--src/objective-c/tests/InteropTests.m8
-rwxr-xr-xsrc/php/bin/determine_extension_dir.sh49
-rwxr-xr-xsrc/php/bin/interop_client.sh11
-rwxr-xr-xsrc/php/bin/run_gen_code_test.sh11
-rwxr-xr-xsrc/php/bin/run_tests.sh35
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