Skip to content

Commit fb3743d

Browse files
committed
try to fix double initialization of namespaces
1 parent e86d9bc commit fb3743d

File tree

2 files changed

+13
-3
lines changed

2 files changed

+13
-3
lines changed

robotcode/language_server/robotframework/diagnostics/namespace.py

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -600,6 +600,8 @@ def __init__(
600600
self.imports_manager.resources_changed.add(self.resources_changed)
601601
self.imports_manager.variables_changed.add(self.variables_changed)
602602

603+
self._in_initialize = False
604+
603605
@async_event
604606
async def has_invalidated(sender) -> None: # NOSONAR
605607
...
@@ -678,6 +680,7 @@ async def invalidate(self) -> None:
678680
self._variable_references = {}
679681

680682
self._finder = None
683+
self._in_initialize = False
681684

682685
await self._reset_global_variables()
683686

@@ -767,6 +770,12 @@ async def ensure_initialized(self) -> bool:
767770
imports_changed = False
768771
async with self._initialize_lock:
769772
if not self._initialized:
773+
774+
if self._in_initialize:
775+
self._logger.critical(f"already initialized {self.document}")
776+
777+
self._in_initialize = True
778+
770779
try:
771780
self._logger.debug(f"ensure_initialized -> initialize {self.document}")
772781

@@ -834,6 +843,8 @@ async def ensure_initialized(self) -> bool:
834843

835844
await self.invalidate()
836845
raise
846+
finally:
847+
self._in_initialize = False
837848

838849
if self._initialized:
839850
await self.has_initialized(self)

robotcode/utils/async_tools.py

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -583,7 +583,7 @@ async def release(self) -> None:
583583
await super().release()
584584

585585

586-
class NewLock:
586+
class Lock:
587587
def __init__(self) -> None:
588588
self._block = BoundedSemaphore(value=1)
589589

@@ -609,7 +609,7 @@ async def __aexit__(
609609
await self.release()
610610

611611

612-
class Lock:
612+
class OldLock:
613613
"""Threadsafe version of an async Lock."""
614614

615615
def __init__(self) -> None:
@@ -638,7 +638,6 @@ async def __inner_lock(self) -> AsyncGenerator[Any, None]:
638638
while not b:
639639
await asyncio.sleep(0)
640640
b = self._lock.acquire(blocking=False)
641-
642641
try:
643642
yield None
644643
finally:

0 commit comments

Comments
 (0)