Problem reloading Ruby runtimes

E

Eugene Elborran

I'm embedding Ruby in a C++ program. This is working fine when I load
the Ruby runtimes (ruby_init() etc), then do some Ruby things, and then
terminate the Ruby runtimes (ruby_finalize() etc).

But if I try to do this more than once, I get a segfault from within a
Ruby API. I'm using 1.9.2-p180 (built from source) on RH14 Linux and I
also get the same issue on Windows XP.

To hopefully better explain the issue, my code does this kind of setup:

ruby_init();
ruby_init_loadpath();

and then does what it needs to do with Ruby, and then does this kind of
clean-up:

ruby_finalize();
ruby_cleanup(0);

That works fine, but if I try to do that sequence again, I get a
segfault on the call to ruby_init_loadpath(). Running valgrind shows
that the first error is in ruby_init_loadpath_safe, like so:

==5644== Invalid read of size 4
==5644== at 0x411C581: ruby_init_loadpath_safe (ruby.c:439)
==5644== by 0x411C69D: ruby_init_loadpath (ruby.c:335)
==5644== by 0x8048800: doTest (rr.c:34)
==5644== by 0x804884C: main (rr.c:50)
==5644== Address 0x50 is not stack'd, malloc'd or (recently) free'd

Am I doing something silly (such as using the Ruby API incorrectly) or
does Ruby not support this kind of use?

I've attached a minimal C test program which shows the issue.

Thanks.

Attachments:
http://www.ruby-forum.com/attachment/6058/rr.c
 
R

Ryan Davis

I'm embedding Ruby in a C++ program. This is working fine when I load
the Ruby runtimes (ruby_init() etc), then do some Ruby things, and = then
terminate the Ruby runtimes (ruby_finalize() etc).

You should send this to ruby-core@ instead... but afaik, ruby (at least =
it was the case in 1.8) is just not very good at reinitializing the =
runtime. That may have changed in 1.9, but I doubt it was much of a =
priority. Python and Lua are excellent at this tho, so worst case you =
can switch to one of them.
 
E

Eugene Elborran

Thanks for the suggestion, yes I'll try ruby-core.

We did consider using Lua for this project, it would be more flexible
for embedding but the language isn't as good as Ruby.
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

Forum statistics

Threads
473,769
Messages
2,569,579
Members
45,053
Latest member
BrodieSola

Latest Threads

Top