Hello. I'm under the impression that MCLADDREFERENCE() may increment the wrong ext_refcnt.
In case it's permitted (I cant't find anything to the contrary) to call MCLADDREFERENCE(m1, m2) and then MCLADDREFERENCE(m2, m3), then the second call will increment m2's ext_refcnt where it should be incrementing m1's one (e.g. the one all of m1, m2 and m3's m_ext_ref are pointing to), no? So I think atomic_inc_uint(&(o)->m_ext.ext_refcnt); \ should really be atomic_inc_uint(&(o)->m_ext_ref->m_ext.ext_refcnt); \ which, of course, is the same thing if MEXT_ISEMBEDDED(o) is true. Am I getting something wrong?