Remove code to detect event loop change ()

The code should always be called from the same thread that
created the object or we have a thread safety problem.
This commit is contained in:
J. Nick Koston 2023-10-07 12:36:51 -10:00 committed by GitHub
parent 9930311b54
commit 528f5e9e07
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

@ -45,19 +45,10 @@ class TPLinkSmartHomeProtocol:
self.port = port or TPLinkSmartHomeProtocol.DEFAULT_PORT
self.reader: Optional[asyncio.StreamReader] = None
self.writer: Optional[asyncio.StreamWriter] = None
self.query_lock: Optional[asyncio.Lock] = None
self.query_lock = asyncio.Lock()
self.loop: Optional[asyncio.AbstractEventLoop] = None
self.timeout = timeout or TPLinkSmartHomeProtocol.DEFAULT_TIMEOUT
def _detect_event_loop_change(self) -> None:
"""Check if this object has been reused betwen event loops."""
loop = asyncio.get_running_loop()
if not self.loop:
self.loop = loop
elif self.loop != loop:
_LOGGER.warning("Detected protocol reuse between different event loop")
self._reset()
async def query(self, request: Union[str, Dict], retry_count: int = 3) -> Dict:
"""Request information from a TP-Link SmartHome Device.
@ -67,11 +58,6 @@ class TPLinkSmartHomeProtocol:
:param retry_count: how many retries to do in case of failure
:return: response dict
"""
self._detect_event_loop_change()
if not self.query_lock:
self.query_lock = asyncio.Lock()
if isinstance(request, dict):
request = json_dumps(request)
assert isinstance(request, str)
@ -122,7 +108,7 @@ class TPLinkSmartHomeProtocol:
def _reset(self) -> None:
"""Clear any varibles that should not survive between loops."""
self.reader = self.writer = self.loop = self.query_lock = None
self.reader = self.writer = None
async def _query(self, request: str, retry_count: int, timeout: int) -> Dict:
"""Try to query a device."""