MonoThreadInfo* mono_thread_info_attach (void *baseptr) { MonoThreadInfo *info; if (!mono_threads_inited) { #ifdef HOST_WIN32 /* This can happen from DllMain(DLL_THREAD_ATTACH) on Windows, if a * thread is created before an embedding API user initialized Mono. */ THREADS_DEBUG ("mono_thread_info_attach called before mono_threads_init\n"); return NULL; #else g_assert (mono_threads_inited); #endif } info = (MonoThreadInfo *) mono_native_tls_get_value (thread_info_key); if (!info) { info = (MonoThreadInfo *) g_malloc0 (thread_info_size); THREADS_DEBUG ("attaching %p\n", info); if (!register_thread (info, baseptr)) return NULL; } else if (threads_callbacks.thread_attach) { threads_callbacks.thread_attach (info); } return info; }
MonoThreadInfo* mono_thread_info_attach (void *baseptr) { MonoThreadInfo *info = mono_native_tls_get_value (thread_info_key); if (!info) { info = g_malloc0 (thread_info_size); THREADS_DEBUG ("attaching %p\n", info); if (!register_thread (info, baseptr)) return NULL; } else if (threads_callbacks.thread_attach) { threads_callbacks.thread_attach (info); } return info; }