aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/php/ext/grpc/call.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/php/ext/grpc/call.c')
-rw-r--r--src/php/ext/grpc/call.c12
1 files changed, 11 insertions, 1 deletions
diff --git a/src/php/ext/grpc/call.c b/src/php/ext/grpc/call.c
index b802f04f53..4a647ec7c2 100644
--- a/src/php/ext/grpc/call.c
+++ b/src/php/ext/grpc/call.c
@@ -230,7 +230,7 @@ PHP_METHOD(Call, __construct) {
}
wrapped_grpc_channel *channel = Z_WRAPPED_GRPC_CHANNEL_P(channel_obj);
gpr_mu_lock(&channel->wrapper->mu);
- if (channel->wrapper->wrapped == NULL) {
+ if (channel->wrapper == NULL || channel->wrapper->wrapped == NULL) {
zend_throw_exception(spl_ce_InvalidArgumentException,
"Call cannot be constructed from a closed Channel",
1 TSRMLS_CC);
@@ -251,6 +251,7 @@ PHP_METHOD(Call, __construct) {
grpc_slice_unref(method_slice);
grpc_slice_unref(host_slice);
call->owned = true;
+ call->channel = channel;
gpr_mu_unlock(&channel->wrapper->mu);
}
@@ -270,6 +271,15 @@ PHP_METHOD(Call, startBatch) {
zval *message_value;
zval *message_flags;
wrapped_grpc_call *call = Z_WRAPPED_GRPC_CALL_P(getThis());
+ if (call->channel) {
+ // startBatch in gRPC PHP server doesn't have channel in it.
+ if (call->channel->wrapper == NULL ||
+ call->channel->wrapper->wrapped == NULL) {
+ zend_throw_exception(spl_ce_RuntimeException,
+ "startBatch Error. Channel is closed",
+ 1 TSRMLS_CC);
+ }
+ }
grpc_op ops[8];
size_t op_num = 0;