From 8ea7be5dd7139215a4b3e06b2512d2c3f88c9b5b Mon Sep 17 00:00:00 2001 From: Kevin O'Connor Date: Mon, 29 Dec 2025 14:09:38 -0500 Subject: [PATCH] tmc: Hold a mutex during enable/disable checking It's possible for a motor disable request to occur while processing a previous motor enable. Use a reactor mutex to ensure the two events are processed serially. Signed-off-by: Kevin O'Connor --- klippy/extras/tmc.py | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/klippy/extras/tmc.py b/klippy/extras/tmc.py index 298b71728..536308d97 100644 --- a/klippy/extras/tmc.py +++ b/klippy/extras/tmc.py @@ -330,6 +330,7 @@ class TMCCommandHelper: # Stepper enable/disable tracking self.toff = None self.stepper_enable = self.printer.load_object(config, "stepper_enable") + self.enable_mutex = self.printer.get_reactor().mutex() # DUMP_TMC support self.read_registers = self.read_translate = None # Common tmc helpers @@ -469,10 +470,11 @@ class TMCCommandHelper: def _handle_stepper_enable(self, print_time, is_enable): def enable_disable_cb(eventtime): try: - if is_enable: - self._do_enable(print_time) - else: - self._do_disable(print_time) + with self.enable_mutex: + if is_enable: + self._do_enable(print_time) + else: + self._do_disable(print_time) except self.printer.command_error as e: self.printer.invoke_shutdown(str(e)) self.printer.get_reactor().register_callback(enable_disable_cb)