Browse Source

Fix completion queue creation and initial metadata storage allocation.

Tim Burks 8 years ago
parent
commit
18624e86f1

+ 6 - 14
Sources/CgRPC/shim/channel.c

@@ -29,12 +29,7 @@ cgrpc_channel *cgrpc_channel_create(const char *address) {
   grpc_channel_args channel_args;
   grpc_channel_args channel_args;
   channel_args.num_args = 0;
   channel_args.num_args = 0;
   c->channel = grpc_insecure_channel_create(address, &channel_args, NULL);
   c->channel = grpc_insecure_channel_create(address, &channel_args, NULL);
-  grpc_completion_queue_attributes attr;
-  attr.version = 1;
-  attr.cq_completion_type = GRPC_CQ_CURRENT_VERSION;
-  attr.cq_polling_type = GRPC_CQ_DEFAULT_POLLING;
-  grpc_completion_queue_factory *factory = grpc_completion_queue_factory_lookup(&attr);
-  c->completion_queue = grpc_completion_queue_create(factory, &attr, NULL);
+  c->completion_queue = grpc_completion_queue_create_for_next(NULL);
   return c;
   return c;
 }
 }
 
 
@@ -66,12 +61,7 @@ cgrpc_channel *cgrpc_channel_create_secure(const char *address,
 
 
   grpc_channel_credentials *creds = grpc_ssl_credentials_create(pem_root_certs, NULL, NULL);
   grpc_channel_credentials *creds = grpc_ssl_credentials_create(pem_root_certs, NULL, NULL);
   c->channel = grpc_secure_channel_create(creds, address, channelArgs, NULL);
   c->channel = grpc_secure_channel_create(creds, address, channelArgs, NULL);
-  grpc_completion_queue_attributes attr;
-  attr.version = 1;
-  attr.cq_completion_type = GRPC_CQ_CURRENT_VERSION;
-  attr.cq_polling_type = GRPC_CQ_DEFAULT_POLLING;
-  grpc_completion_queue_factory *factory = grpc_completion_queue_factory_lookup(&attr);
-  c->completion_queue = grpc_completion_queue_create(factory, &attr, NULL);
+  c->completion_queue = grpc_completion_queue_create_for_next(NULL);
   return c;
   return c;
 }
 }
 
 
@@ -86,19 +76,21 @@ void cgrpc_channel_destroy(cgrpc_channel *c) {
   free(c);
   free(c);
 }
 }
 
 
+grpc_slice host_slice;
+
 cgrpc_call *cgrpc_channel_create_call(cgrpc_channel *channel,
 cgrpc_call *cgrpc_channel_create_call(cgrpc_channel *channel,
                                       const char *method,
                                       const char *method,
                                       const char *host,
                                       const char *host,
                                       double timeout) {
                                       double timeout) {
   // create call
   // create call
-  grpc_slice host_slice = grpc_slice_from_copied_string(host);
+  host_slice = grpc_slice_from_copied_string(host);
   gpr_timespec deadline = cgrpc_deadline_in_seconds_from_now(timeout);
   gpr_timespec deadline = cgrpc_deadline_in_seconds_from_now(timeout);
   grpc_call *channel_call = grpc_channel_create_call(channel->channel,
   grpc_call *channel_call = grpc_channel_create_call(channel->channel,
                                                      NULL,
                                                      NULL,
                                                      GRPC_PROPAGATE_DEFAULTS,
                                                      GRPC_PROPAGATE_DEFAULTS,
                                                      channel->completion_queue,
                                                      channel->completion_queue,
                                                      grpc_slice_from_copied_string(method),
                                                      grpc_slice_from_copied_string(method),
-                                                     &host_slice, // this might crash
+                                                     &host_slice,
                                                      deadline,
                                                      deadline,
                                                      NULL);
                                                      NULL);
   cgrpc_call *call = (cgrpc_call *) malloc(sizeof(cgrpc_call));
   cgrpc_call *call = (cgrpc_call *) malloc(sizeof(cgrpc_call));

+ 1 - 6
Sources/CgRPC/shim/handler.c

@@ -27,12 +27,7 @@ cgrpc_handler *cgrpc_handler_create_with_server(cgrpc_server *server) {
   handler->server = server;
   handler->server = server;
   grpc_metadata_array_init(&(handler->request_metadata_recv));
   grpc_metadata_array_init(&(handler->request_metadata_recv));
   grpc_call_details_init(&(handler->call_details));
   grpc_call_details_init(&(handler->call_details));
-  grpc_completion_queue_attributes attr;
-  attr.version = 1;
-  attr.cq_completion_type = GRPC_CQ_CURRENT_VERSION;
-  attr.cq_polling_type = GRPC_CQ_DEFAULT_POLLING;
-  grpc_completion_queue_factory *factory = grpc_completion_queue_factory_lookup(&attr);
-  handler->completion_queue = grpc_completion_queue_create(factory, &attr, NULL);
+  handler->completion_queue = grpc_completion_queue_create_for_next(NULL);
   return handler;
   return handler;
 }
 }
 
 

+ 1 - 2
Sources/CgRPC/shim/observers.c

@@ -114,8 +114,7 @@ void cgrpc_observer_apply(cgrpc_observer *observer, grpc_op *op) {
     case GRPC_OP_RECV_INITIAL_METADATA: {
     case GRPC_OP_RECV_INITIAL_METADATA: {
       cgrpc_observer_recv_initial_metadata *obs = (cgrpc_observer_recv_initial_metadata *) observer;
       cgrpc_observer_recv_initial_metadata *obs = (cgrpc_observer_recv_initial_metadata *) observer;
       grpc_metadata_array_init(&(obs->initial_metadata_recv));
       grpc_metadata_array_init(&(obs->initial_metadata_recv));
-      //REVIEW - possibly broken in upgrade to v1.4
-      // op->data.recv_initial_metadata = &(obs->initial_metadata_recv);
+      op->data.recv_initial_metadata.recv_initial_metadata = &(obs->initial_metadata_recv);
       break;
       break;
     }
     }
     case GRPC_OP_RECV_MESSAGE: {
     case GRPC_OP_RECV_MESSAGE: {

+ 2 - 12
Sources/CgRPC/shim/server.c

@@ -24,12 +24,7 @@
 cgrpc_server *cgrpc_server_create(const char *address) {
 cgrpc_server *cgrpc_server_create(const char *address) {
   cgrpc_server *server = (cgrpc_server *) malloc(sizeof (cgrpc_server));
   cgrpc_server *server = (cgrpc_server *) malloc(sizeof (cgrpc_server));
   server->server = grpc_server_create(NULL, NULL);
   server->server = grpc_server_create(NULL, NULL);
-  grpc_completion_queue_attributes attr;
-  attr.version = 1;
-  attr.cq_completion_type = GRPC_CQ_CURRENT_VERSION;
-  attr.cq_polling_type = GRPC_CQ_DEFAULT_POLLING;
-  grpc_completion_queue_factory *factory = grpc_completion_queue_factory_lookup(&attr);
-  server->completion_queue = grpc_completion_queue_create(factory, &attr, NULL);
+  server->completion_queue = grpc_completion_queue_create_for_next(NULL);
   grpc_server_register_completion_queue(server->server, server->completion_queue, NULL);
   grpc_server_register_completion_queue(server->server, server->completion_queue, NULL);
   // prepare the server to listen
   // prepare the server to listen
   server->port = grpc_server_add_insecure_http2_port(server->server, address);
   server->port = grpc_server_add_insecure_http2_port(server->server, address);
@@ -41,12 +36,7 @@ cgrpc_server *cgrpc_server_create_secure(const char *address,
                                          const char *cert_chain) {
                                          const char *cert_chain) {
   cgrpc_server *server = (cgrpc_server *) malloc(sizeof (cgrpc_server));
   cgrpc_server *server = (cgrpc_server *) malloc(sizeof (cgrpc_server));
   server->server = grpc_server_create(NULL, NULL);
   server->server = grpc_server_create(NULL, NULL);
-  grpc_completion_queue_attributes attr;
-  attr.version = 1;
-  attr.cq_completion_type = GRPC_CQ_CURRENT_VERSION;
-  attr.cq_polling_type = GRPC_CQ_DEFAULT_POLLING;
-  grpc_completion_queue_factory *factory = grpc_completion_queue_factory_lookup(&attr);
-  server->completion_queue = grpc_completion_queue_create(factory, &attr, NULL);
+  server->completion_queue = grpc_completion_queue_create_for_next(NULL);
   grpc_server_register_completion_queue(server->server, server->completion_queue, NULL);
   grpc_server_register_completion_queue(server->server, server->completion_queue, NULL);
 
 
   grpc_ssl_pem_key_cert_pair server_credentials;
   grpc_ssl_pem_key_cert_pair server_credentials;