From 58637d0ee7c4848210eb6c2df49ee4f35b70f7ab Mon Sep 17 00:00:00 2001 From: Alexander Kyte Date: Thu, 24 May 2018 12:38:14 -0400 Subject: [runtime] Gracefully handle crashes before mono-state dependencies initialized (#8842) --- mono/metadata/threads.c | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/mono/metadata/threads.c b/mono/metadata/threads.c index 86d6c5d7308..e7c1abe89c0 100644 --- a/mono/metadata/threads.c +++ b/mono/metadata/threads.c @@ -3638,6 +3638,10 @@ collect_threads (MonoInternalThread **thread_array, int max_threads) { CollectThreadsUserData ud; + mono_memory_barrier (); + if (!threads) + return 0; + memset (&ud, 0, sizeof (ud)); /* This array contains refs, but its on the stack, so its ok */ ud.threads = thread_array; @@ -5618,6 +5622,9 @@ mono_threads_summarize (MonoContext *ctx, gchar **out) MonoInternalThread *thread_array [128]; int nthreads = collect_threads (thread_array, 128); + if (nthreads == 0) + MOSTLY_ASYNC_SAFE_PRINTF("No managed threads detected, error occured before thread init\n"); + sigset_t sigset, old_sigset; sigemptyset(&sigset); sigaddset(&sigset, SIGTERM); -- cgit v1.2.3