(2014/03/16 5:41), Eric Wong wrote:
> Should we care to support xmalloc/xfree in non-Ruby native threads?
> I think it's too much work.

How about this strategy using ?

# pseudo_code:

  size_t malloc_increase;
  atomic_size_t atomic_malloc_increase;

  def ruby_xmalloc(size)
    if is_native_thread? && has_gvl?
      malloc_increase += size
      if (malloc_increase + atomic_malloc_increase) > malloc_limit
        GC()
      end
    else
      atomic_update{atomic_malloc_increase += size}
    end
  end


Problem is the performance of `is_native_thread? && has_gvl?'.  Every time.


Or separate ruby_xmalloc() to rb_xmalloc(), it is for limited version
called only from  `is_native_thread? && has_gvl?'

# pseudo_code

  def rb_xmalloc(size)
    ... # code protected by GVL
  end

  def ruby_xmalloc(size)
    if is_native_thread? && has_gvl?
      rb_xmalloc(size)
    else
      atomic_update{atomic_malloc_increase += size}
    end
  end

-- 
// SASADA Koichi at atdot dot net