From 4252ed8d78dc8ac1f181de0411cab439f896a081 Mon Sep 17 00:00:00 2001 From: Matthew Kennedy Date: Wed, 29 Apr 2020 13:42:55 -0700 Subject: [PATCH] fix unlock bug (#1384) --- firmware/development/perf_trace.cpp | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/firmware/development/perf_trace.cpp b/firmware/development/perf_trace.cpp index 3e13b54a59..e92c3f04a4 100644 --- a/firmware/development/perf_trace.cpp +++ b/firmware/development/perf_trace.cpp @@ -65,6 +65,7 @@ static void perfEventImpl(PE event, EPhase phase) // In addition, if we want to trace lock/unlock events, we can't // be locking ourselves from the trace functionality. { + uint32_t prim = __get_PRIMASK(); __disable_irq(); idx = s_nextIdx++; @@ -73,7 +74,10 @@ static void perfEventImpl(PE event, EPhase phase) s_isTracing = false; } - __enable_irq(); + // Restore previous interrupt state - don't restore if they weren't enabled + if (!prim) { + __enable_irq(); + } } // We can safely write data out of the lock, our spot is reserved