Instead of embedding Ruby into a C program with a main() function I want 
to embed Ruby in a C library.  The library is then linked with some other 
code which has a main() function.  Here's my C code:

//begin C code
#include <ruby.h>

static VALUE
protected_require()
{   //TODO: for testing only, add protection later
    return rb_require("foo.rb");
}
static int initialized = 0;

static VALUE summer ;

static  initialize_ruby()
{
  if (!initialized)  //only initialize once
  {
    int value;
    ruby_init();
    ruby_init_loadpath();
    ruby_script("embedded");
    rb_protect(protected_require, Qnil, &value);
    if (value) {
      VALUE err = rb_inspect(rb_gv_get("$!"));
      fprintf(stderr, "ERR %s\n", StringValuePtr(err));
    }
    summer = rb_class_new_instance(0,0, 
rb_const_get(rb_cObject,rb_intern("Summer")));
    initialized = 1;
  }
}

int sum(int max)
{
  initialize_ruby();
  int id_sum = rb_intern("sum");
  VALUE result = rb_funcall(summer, id_sum,1,INT2NUM(max));
  //ruby_finalize(); //seems to work OK without it
  return NUM2INT(result);
}

int foo(int max)
{
  initialize_ruby();
  int id_foo = rb_intern("foo");
  VALUE result = rb_funcall(summer, id_foo,1,INT2NUM(max));
  //ruby_finalize(); //seems to work OK without it
  return NUM2INT(result);
	
}

//end C code

So I keep track of whether or not ruby has been initialized.  Each of the 
functions in the library calls the initialize_ruby() function first 
thing.  initialize_ruby() only really initializes ruby the first time 
(in order to save some time - I don't want to have to startup ruby for 
every function call and then finalize ruby at the end of each function 
call).  Since I don't know what the last call to the function library 
might be, I don't call ruby_finalize() in any of the library functions.  
I used to do this, but eliminating the ruby_finalize() call seems to have 
no ill-effects.  What are the consequences of not calling ruby_finalize()?

Phil