From c629bbe50fdb54b9ad0a0b4a8cb0e32b6d19fd1b Mon Sep 17 00:00:00 2001 From: jp9000 Date: Wed, 18 Nov 2015 10:59:10 -0800 Subject: [PATCH] libobs: Always write crashing thread first --- libobs/obs-win-crash-handler.c | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/libobs/obs-win-crash-handler.c b/libobs/obs-win-crash-handler.c index 80f77b342..51e219925 100644 --- a/libobs/obs-win-crash-handler.c +++ b/libobs/obs-win-crash-handler.c @@ -377,13 +377,16 @@ static inline bool walk_stack(struct exception_handler_data *data, #endif static inline void write_thread_trace(struct exception_handler_data *data, - THREADENTRY32 *entry) + THREADENTRY32 *entry, bool first_thread) { bool crash_thread = entry->th32ThreadID == GetCurrentThreadId(); struct stack_trace trace = {0}; struct stack_trace *ptrace; HANDLE thread; + if (first_thread != crash_thread) + return; + if (entry->th32OwnerProcessID != GetCurrentProcessId()) return; @@ -417,10 +420,16 @@ static inline void write_thread_traces(struct exception_handler_data *data) return; entry.dwSize = sizeof(entry); - success = !!Thread32First(snapshot, &entry); + success = !!Thread32First(snapshot, &entry); while (success) { - write_thread_trace(data, &entry); + write_thread_trace(data, &entry, true); + success = !!Thread32Next(snapshot, &entry); + } + + success = !!Thread32First(snapshot, &entry); + while (success) { + write_thread_trace(data, &entry, false); success = !!Thread32Next(snapshot, &entry); }