(2014/03/16 5:41), Eric Wong wrote: > SASADA Koichi <ko1 / atdot.net> wrote: >> (2014/03/15 17:34), Eric Wong wrote: >>>>> BTW, >>>>> >>>>>>> + rb_thread_t *th = ruby_thread_from_native(); >>>>> >>>>> `th' can be NULL because no Ruby threads can call this code. >>> Did you mean: gsub(/no Ruby/, "non-Ruby") ? >> >> Yes. >> >>> I should put a FATAL exit there (but not much different than crashing). >> >> You shouldn't. It should pass. For example, C-method creates another >> native threads, and they can use ruby_xmalloc(). This is why this is >> not `rb_xmalloc()' but `ruby_xmalloc()'. > > xmalloc hits FATAL if called from a non-Ruby thread: > http://yhbt.net/xmalloc_from_pthread.diff > > $ ./miniruby -e 'Thread.test_xmalloc 50000000' > [FATAL] failed to allocate memory > > Should we care to support xmalloc/xfree in non-Ruby native threads? > I think it's too much work. We should use `rb_' prefix if we only support for ruby threads. In fact, I had proposed same issue before. However, it was rejected. At this time, I heard that the name of `xmalloc()' is safe malloc(). `Safe' means that this function check NULL checking. Anyway, current "[FATAL] failed to allocate memory" error in your test program is bug :( We shouldn't invoke GC() otherwides return value of malloc() is 0. -- // SASADA Koichi at atdot dot net