def acquire_maybe_in_new_thread(): if not we_are_translated(): return acquire() from rpython.rlib import rthread rthread.get_or_make_ident( ) #make sure that the threadlocals are initialized _gil_acquire() rthread.gc_thread_run() _after_thread_switch()
def thread_run(): """Called whenever the current thread (re-)acquired the GIL. This should ensure that the shadow stack installed in gcdata.root_stack_top/root_stack_base is the one corresponding to the current thread. No GC operation here, e.g. no mallocs or storing in a dict! Note that here specifically we don't call rthread.get_ident(), but rthread.get_or_make_ident(). We are possibly in a fresh new thread, so we need to be careful. """ tid = rthread.get_or_make_ident() if gcdata.active_tid != tid: switch_shadow_stacks(tid)
def am_I_holding_the_GIL(): from rpython.rlib import rthread my_tid = rthread.get_or_make_ident() return gil_get_holder() == my_tid