The safe solution ignoring the RT_GC_PROTECT call which we could do otherwise to avoid the first issue you mentioned (i.e. not marking the external blocking but inserting ourself the calls to EIF_ENTER_C and EIF_EXIT_C in the `eif_thr_wait' routine directly) is to ensure that a thread object cannot move. Do you have any other idea?