Hi all,
I'm currently testing an environment with embedding ruby and found an
issue when allocating a large amount of ruby string objects in external
C calls. Im not sure, whether I misunderstood the correct usage.
The Ruby version used is 1.8.4, own compile on red hat EL update 5.
The C environment is:
···
---------------------------------
#include "ruby.h"
int main (int argc, char *argv[])
{
VALUE cModule;
VALUE message;
ruby_init();
cModule = rb_define_module("CModule");
rb_require("MemCheck.rb");
for (long long l=0; l<1000LL; l++) {
// convert C string to Ruby object
message = rb_str_new2("C says Hello to Ruby."
"ABCDEFGHIJKLMNOPQRSTUVWXYZ"
"ABCDEFGHIJKLMNOPQRSTUVWXYZ"
"ABCDEFGHIJKLMNOPQRSTUVWXYZ");
rb_funcall(cModule, rb_intern("sendToRuby"), 1, message);
}
return 0;
}
-------------------------
The Ruby script:
-------------------------
print("This is Ruby, required MemCheck.rb\n");
module CModule
def CModule.sendToRuby(msgFromC)
end
end
--------------------------
If I use valgrind to check for memory leaks, all is OK. If I now change
the loop count from 1000LL to 10000LL, valgrind throws errors:
==7903== Conditional jump or move depends on uninitialised value(s)
==7903== at 0x806C904: gc_mark_children (gc.c:758)
==7903== by 0x806C88F: gc_mark (gc.c:731)
==7903== by 0x806C6C2: mark_locations_array (gc.c:626)
==7903== by 0x806C6EF: rb_gc_mark_locations (gc.c:639)
(in total 496 errors from 39 contexts)
Has anybody seen this behavior? Where am I wrong?
Any help is appreciated, best regards
Heiko