Thanks for all the help with my last set of questions.

I'm writing a function in my C extension where I copy a variable from my 
object structure to a temporary location.  Then, I put a new instance in 
the new location.  However, Ruby keeps garbage collecting the new 
variable.  I fixed this error by disabling GC for awhile, then 
re-enabling it when I'm done.  Is there a nicer way to do that?

Code snippet:

static VALUE
pop_reproduce(VALUE self, VALUE payoffs) {
    rb_gc_disable();
    Population* p;
    Data_Get_Struct(self, Population, p);

    VALUE oldArray = p->popArray;
    p->popArray = rb_ary_new2(p->size);
   
    /*...do some stuff...*/

    rb_gc_enable();
    return self;
}

In this code snippet, p->popArray is the one getting GC'd.  My mark 
function only does this:

void pop_mark(VALUE self) {
    Population* p;
    Data_Get_Struct(self, Population, p);
    rb_gc_mark(p->popArray);
}

It's possible that popArray isn't what is getting GC'ed; did I write the 
mark function wrong?  Here's where I register the mark function:

VALUE
pop_new(VALUE class, VALUE size, VALUE tagsize, VALUE strategysize) {
    Population* p = ALLOC(Population);
    /* do some stuff to the struct*/
    VALUE obj = Data_Wrap_Struct(class, pop_mark, free, p);
    VALUE argv[3];
    argv[0]=size;
    argv[1]=tagsize;
    argv[2]=strategysize;
    rb_obj_call_init(obj, 3, argv);
    return obj;
}

Anyway, I realize that's a lot of code to paste... I'm just wondering if 
there's any way to fix this short of actually disabling the GC.

Thanks,
Austin McDonald