Laurent,
Could you enter "thread apply all bt" into the debugger shell and paste us the result?
Here it is. I don't understand much. The only information I can add is that thread 4 do not systematically appear. Besides that, the backtraces are consistent. [...]
I looked at your project and I was able to reproduce the crashes, which smelled like memory smashers. Then, looking at the code, I saw bad usage of the Pointer class.
An example:
@light_position = Pointer.new_with_type('f') @light_position[0] = -2.0 @light_position[1] = 2.0 @light_position[2] = 1.0 @light_position[3] = 0.0
This is not good, because this creates a pointer to a float of 1 element (exactly like malloc(sizeof(float)) in C) but then you set objects to indexes (1, 2, 3) out of the pointer's bounds.
The correct code should be:
@light_position = Pointer.new_with_type('f', 4) @light_position[0] = -2.0 @light_position[1] = 2.0 @light_position[2] = 1.0 @light_position[3] = 0.0
The second argument allows you to specify the number of elements the Pointer will hold (by default, it's 1).
As in C, it's very easy to corrupt memory or crash the program. Sometimes we get pointers from C or Objective-C, we wrap them inside Pointer objects and we do not know the number of elements, but in this case, when the Pointer is constructed by Ruby itself, I believe MacRuby should not let you do this and appropriately raise an exception. I will fix that ASAP.
The random crashes may perhaps disappear after you fix the code.
Sorry. I should have read the source for the Pointer class. The crashes are gone.
I'm not familiar with OpenGL but it might be a BridgeSupport problem... What other functions using the CGLRendererInfoObj are failing?
Sorry, when I said all other functions, I really meant all other calls to CGLDescribeRenderer. After a series of call to CGLDescribeRenderer, the CGLRendererInfoObj is destroyed by CGLDestroyRendererInfo.
If I bypass this whole section of code, I get more problems with blablablaObj and sameblablablaObject pointer confusion. The documentation for those types mentions only CGLRendererInfoObj, CGLPixelFormatObj or CGLContextObj, though
Thanks, I reproduce the problem here too. Could you file a ticket on Trac, this way we won't forget to fix it?
Done. Thanks. Bonnes fĂȘtes Ă©galement ! Julien