From 608f4ec0d59fd4b648efa06e1b0ba3beaae71e72 Mon Sep 17 00:00:00 2001 From: Richard Bowman Date: Tue, 28 Apr 2026 12:11:06 +0100 Subject: [PATCH] Enable global locking. This commit: * switches to the LabThings branch * enables locking when config files are loaded * Updates jogging so jog moves aren't subject to the lock, but the jog loop is. --- src/openflexure_microscope_server/server/__init__.py | 7 +++++++ src/openflexure_microscope_server/things/stage/__init__.py | 4 ++-- 2 files changed, 9 insertions(+), 2 deletions(-) diff --git a/src/openflexure_microscope_server/server/__init__.py b/src/openflexure_microscope_server/server/__init__.py index 546f7118..494f940d 100644 --- a/src/openflexure_microscope_server/server/__init__.py +++ b/src/openflexure_microscope_server/server/__init__.py @@ -190,4 +190,11 @@ def _full_config_from_args(args: Namespace) -> ThingServerConfig: ) patched_config = load_patched_config(args.config) + if "enable_global_lock" not in patched_config: + patched_config["enable_global_lock"] = True + if patched_config["enable_global_lock"] is not True: + raise ValueError( + "OpenFlexure Microscope Server requires `enable_global_lock` to be `true`, " + "and it was set to another value in the configuration file." + ) return ThingServerConfig(**patched_config) diff --git a/src/openflexure_microscope_server/things/stage/__init__.py b/src/openflexure_microscope_server/things/stage/__init__.py index e5b0b72b..f9c9973f 100644 --- a/src/openflexure_microscope_server/things/stage/__init__.py +++ b/src/openflexure_microscope_server/things/stage/__init__.py @@ -404,7 +404,7 @@ class BaseStage(lt.Thing): "StageThings must define their own _estimate_move_duration method" ) - @lt.action + @lt.action(use_global_lock=False) def jog(self, stop: bool = False, **kwargs: int) -> None: """Make a relative move that may be interrupted by a future ``jog``. @@ -471,7 +471,7 @@ class BaseStage(lt.Thing): command: Optional[JogCommand] = first_command # prevent others using the stage while jogging. - with self._hardware_lock: + with self._thing_server_interface.hold_global_lock(True), self._hardware_lock: while command is not None: if command.displacement is not None: self._hardware_start_move_relative(command.displacement)