Skip to content
Snippets Groups Projects
Commit 91633cb2 authored by murgatroid99's avatar murgatroid99
Browse files

Fix undefined reference in Ruby code, add linker warning

parent 91991a23
No related branches found
No related tags found
No related merge requests found
...@@ -92,6 +92,7 @@ if grpc_config == 'gcov' ...@@ -92,6 +92,7 @@ if grpc_config == 'gcov'
end end
$LDFLAGS << ' -Wl,-wrap,memcpy' if RUBY_PLATFORM =~ /linux/ $LDFLAGS << ' -Wl,-wrap,memcpy' if RUBY_PLATFORM =~ /linux/
$LDFLAGS << ' -Wl,--no-undefined'
$LDFLAGS << ' -static' if windows $LDFLAGS << ' -static' if windows
$CFLAGS << ' -std=c99 ' $CFLAGS << ' -std=c99 '
......
...@@ -40,6 +40,7 @@ ...@@ -40,6 +40,7 @@
#include <grpc/grpc_security.h> #include <grpc/grpc_security.h>
#include <grpc/support/alloc.h> #include <grpc/support/alloc.h>
#include <grpc/support/log.h> #include <grpc/support/log.h>
#include <grpc/support/time.h>
#include "rb_grpc.h" #include "rb_grpc.h"
#include "rb_call.h" #include "rb_call.h"
#include "rb_channel_args.h" #include "rb_channel_args.h"
...@@ -71,6 +72,7 @@ typedef struct grpc_rb_channel { ...@@ -71,6 +72,7 @@ typedef struct grpc_rb_channel {
/* The actual channel */ /* The actual channel */
grpc_channel *wrapped; grpc_channel *wrapped;
grpc_completion_queue *queue;
} grpc_rb_channel; } grpc_rb_channel;
/* Destroys Channel instances. */ /* Destroys Channel instances. */
...@@ -83,6 +85,7 @@ static void grpc_rb_channel_free(void *p) { ...@@ -83,6 +85,7 @@ static void grpc_rb_channel_free(void *p) {
if (ch->wrapped != NULL) { if (ch->wrapped != NULL) {
grpc_channel_destroy(ch->wrapped); grpc_channel_destroy(ch->wrapped);
grpc_rb_completion_queue_destroy(ch->queue);
} }
xfree(p); xfree(p);
...@@ -165,6 +168,7 @@ static VALUE grpc_rb_channel_init(int argc, VALUE *argv, VALUE self) { ...@@ -165,6 +168,7 @@ static VALUE grpc_rb_channel_init(int argc, VALUE *argv, VALUE self) {
} }
rb_ivar_set(self, id_target, target); rb_ivar_set(self, id_target, target);
wrapper->wrapped = ch; wrapper->wrapped = ch;
wrapper->queue = grpc_completion_queue_create(NULL);
return self; return self;
} }
...@@ -203,16 +207,18 @@ static VALUE grpc_rb_channel_get_connectivity_state(int argc, VALUE *argv, ...@@ -203,16 +207,18 @@ static VALUE grpc_rb_channel_get_connectivity_state(int argc, VALUE *argv,
the completion queue with success=0 */ the completion queue with success=0 */
static VALUE grpc_rb_channel_watch_connectivity_state(VALUE self, static VALUE grpc_rb_channel_watch_connectivity_state(VALUE self,
VALUE last_state, VALUE last_state,
VALUE cqueue, VALUE deadline) {
VALUE deadline,
VALUE tag) {
grpc_rb_channel *wrapper = NULL; grpc_rb_channel *wrapper = NULL;
grpc_channel *ch = NULL; grpc_channel *ch = NULL;
grpc_completion_queue *cq = NULL; grpc_completion_queue *cq = NULL;
cq = grpc_rb_get_wrapped_completion_queue(cqueue); void *tag = wrapper;
grpc_event event;
TypedData_Get_Struct(self, grpc_rb_channel, &grpc_channel_data_type, wrapper); TypedData_Get_Struct(self, grpc_rb_channel, &grpc_channel_data_type, wrapper);
ch = wrapper->wrapped; ch = wrapper->wrapped;
cq = wrapper->queue;
if (ch == NULL) { if (ch == NULL) {
rb_raise(rb_eRuntimeError, "closed!"); rb_raise(rb_eRuntimeError, "closed!");
return Qnil; return Qnil;
...@@ -222,9 +228,16 @@ static VALUE grpc_rb_channel_watch_connectivity_state(VALUE self, ...@@ -222,9 +228,16 @@ static VALUE grpc_rb_channel_watch_connectivity_state(VALUE self,
(grpc_connectivity_state)NUM2LONG(last_state), (grpc_connectivity_state)NUM2LONG(last_state),
grpc_rb_time_timeval(deadline, /* absolute time */ 0), grpc_rb_time_timeval(deadline, /* absolute time */ 0),
cq, cq,
ROBJECT(tag)); tag);
return Qnil; event = rb_completion_queue_pluck(cq, tag,
gpr_inf_future(GPR_CLOCK_REALTIME), NULL);
if (event.success) {
return Qtrue;
} else {
return Qfalse;
}
} }
/* Create a call given a grpc_channel, in order to call method. The request /* Create a call given a grpc_channel, in order to call method. The request
......
...@@ -38,9 +38,6 @@ ...@@ -38,9 +38,6 @@
#include <grpc/grpc.h> #include <grpc/grpc.h>
/* Gets the wrapped completion queue from the ruby wrapper */
grpc_completion_queue *grpc_rb_get_wrapped_completion_queue(VALUE v);
void grpc_rb_completion_queue_destroy(grpc_completion_queue *cq); void grpc_rb_completion_queue_destroy(grpc_completion_queue *cq);
/** /**
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment