Dave Balmain wrote:
> After reading your first email I found the same things behavior as you
> describe here. This is very frustrating because in this case I create
> completely independent Ruby objects. They don't reference the Ferret
> data space at all so this was the last place I expected to have
> garbage collection problems. It makes no sense to me at all that not

I'm so glad to hear it's not just me!

> freeing the offsets and positions arrays should make any difference at
> all. If you have any more ideas with regard to this problem I'd love
> to hear them as it has me a little stumped.

I've long thought this problem is a just a pointer gone rampaging, not 
really a garbage collector issue so much, it's just that that's where it 
shows up..... the fact that disabling memory de-allocation code causes 
it to go into remission suggested to me that it was in fact a memory 
management issue. But it sounds like we both think the code that manages 
those variables is correct. (It's not code that I'm familiar with, so 
it's good that we concur on this point.)

A workaround, even one that causes a memory leak, is important progress 
on this issue, as far as I'm concerned. It sounds like you came up with 
an even better workaround; I'll have to try it.

I'm afraid this is one of those really nassty c pointer bugs that is 
difficult to solve because the problem is very far away from the code 
that actually fails. Perhaps this is a situation that calls for 
valgrind, or something like that? Some kind of library or tool for 
debugging memory allocation problems could help prove that the code 
really really does operate the way the programmers think it should. I've 
played with using valgrind to debug ferret before; I think it was in 
connection with another bug. I couldn't get very far in part because 
ruby pre-allocates pools of objects which it manages itself. That 
behavior would have to be disabled to permit valgrind to do its magic.

Sticking lots of assertions into all the code that gets executed by the 
failing test script is another thing to try, I guess. That really more 
of a shot-gun approach... I'm sorry I can't offer anything but these 
really generic suggestions.

_______________________________________________
Ferret-talk mailing list
[email protected]
http://rubyforge.org/mailman/listinfo/ferret-talk

Reply via email to