Skip to content

Commit b0ac295

Browse files
Locking centring click
1 parent fb302e8 commit b0ac295

File tree

1 file changed

+21
-17
lines changed

1 file changed

+21
-17
lines changed

mxcubeweb/core/adapter/sample_view_adapter.py

Lines changed: 21 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,8 @@
22
import logging
33
from typing import ClassVar
44

5+
from gevent.lock import RLock
6+
57
from flask import send_file
68
from mxcubecore import HardwareRepository as HWR
79
from mxcubecore import queue_entry as qe
@@ -54,6 +56,7 @@ def __init__(self, ho, role, app):
5456
self._click_limit = int(HWR.beamline.config.click_centring_num_clicks or 3)
5557
self._centring_point_id = None
5658
self._error = False
59+
self._click_lock = RLock()
5760

5861
self._ho.connect("shapesChanged", self._emit_shapes_updated)
5962
self._ho.connect("newGridResult", self._handle_grid_result)
@@ -396,25 +399,26 @@ def abort_centring(self):
396399
return {}
397400

398401
def click(self, x: float, y: float):
399-
if self._error:
400-
msg = "Error while centring, please try again"
401-
raise RuntimeError(msg)
402-
403-
if HWR.beamline.diffractometer.current_centring_procedure:
404-
try:
405-
HWR.beamline.diffractometer.image_clicked(x, y)
406-
self.centring_click()
407-
except Exception:
408-
logging.getLogger("MX3.HWR").exception("")
409-
return {"clicksLeft": -1}
402+
with self._click_lock:
403+
if self._error:
404+
msg = "Error while centring, please try again"
405+
raise RuntimeError(msg)
410406

411-
elif not self.centring_clicks_left():
412-
self.centring_reset_click_count()
413-
HWR.beamline.diffractometer.start_centring_method(
414-
HWR.beamline.diffractometer.CENTRING_METHOD_MANUAL
415-
)
407+
if HWR.beamline.diffractometer.current_centring_procedure:
408+
try:
409+
HWR.beamline.diffractometer.image_clicked(x, y)
410+
self.centring_click()
411+
except Exception:
412+
logging.getLogger("MX3.HWR").exception("")
413+
return {"clicksLeft": -1}
414+
415+
elif not self.centring_clicks_left():
416+
self.centring_reset_click_count()
417+
HWR.beamline.diffractometer.start_centring_method(
418+
HWR.beamline.diffractometer.CENTRING_METHOD_MANUAL
419+
)
416420

417-
return {"clicksLeft": self.centring_clicks_left()}
421+
return {"clicksLeft": self.centring_clicks_left()}
418422

419423
def accept_centring(self):
420424
HWR.beamline.diffractometer.accept_centring()

0 commit comments

Comments
 (0)