This issue was solved with changeset r34604.
Tomoyuki, thank you for reporting this issue.
Your contribution to Ruby is greatly appreciated.
May Ruby be with you.
* ext/dl/cfunc.c (dlcfunc_mark), ext/dl/cptr.c (dlptr_mark):
workaround to mark wrapped object. this is not a true fix,
because [Bug #4929] is caused by the interface design of DL.
* ext/dl/cptr.c (rb_dlptr_s_to_ptr): fix wrapping condition.
* ext/dl/cptr.c (rb_dlptr_s_to_ptr): fix wrapping condition.
* ext/dl/cptr.c (rb_dlptr_s_to_ptr): use rb_check_funcall.