On Apr 23, 2009, at 10:40, Ken Bloom wrote:
> On Wed, 22 Apr 2009 13:44:52 -0500, Eric Hodel wrote:
>> On Apr 22, 2009, at 10:05, bdezonia / wisc.edu wrote:
>>> I am using Ruby 1.8.6-26 from the One Click Installer on Windows. I
>>> have a C extension that tries to calloc() memory. If the calloc()  
>>> fails
>>> I call rb_raise(rb_eNoMemError,"Cannot allocate data"). My program  
>>> is
>>> getting stuck in this code. Debugging (unfortunately via print
>>> statements) I can see that rb_raise() is going to be called. After  
>>> that
>>> the exception is never caught by the outermost rescue loop. The  
>>> program
>>> just stops doing anything (0% cpu) except it keeps updating a  
>>> timer in
>>> another thread. Are there things I need to know about rb_raise() and
>>> how to use it?
>>
>> If ruby is out of memory how could it allocate more memory to raise  
>> an
>> exception?
>>
>> Ruby itself allocates a NoMemError at startup to ensure it can  
>> raise one
>> when it runs out of memory.  You'll probably need to do the same. See
>> gc.c rb_memerror().
>
> Is rb_memerror() exposed for him to call? He could just call that,  
> and it
> would spare him all issues with preallocation.

yeah, looks like it's in intern.h.