Fix a threading related bug in tplink_utils.
authorScott Gasch <[email protected]>
Mon, 15 Aug 2022 16:20:20 +0000 (09:20 -0700)
committerScott Gasch <[email protected]>
Mon, 15 Aug 2022 16:20:20 +0000 (09:20 -0700)
decorator_utils.py
smart_home/tplink_utils.py

index 438d7f9ee1907146666c12f8d7e74eb46d56bd96..4615fec6f8960e0083ce48546ba9421c25243d42 100644 (file)
@@ -647,6 +647,13 @@ def timeout(
     main thread).  When not using signals, timeout granularity will be
     rounded to the nearest 0.1s.
 
+    Beware that an @timeout on a function inside a module will be
+    evaluated at module load time and not when the wrapped function is
+    invoked.  This can lead to problems when relying on the automatic
+    main thread detection code (use_signals=None, the default) since
+    the import probably happens on the main thread and the invocation
+    can happen on a different thread (which can't use signals).
+
     Raises an exception when/if the timeout is reached.
 
     It is illegal to pass anything other than a function as the first
index abf4970c3c9593f76b641114716fcff88a782627..ea35110c7bfe6a52e81f1ab945f392ace6ff1153 100644 (file)
@@ -122,7 +122,7 @@ def decrypt(string: bytes) -> str:
     return result
 
 
-@timeout(10, error_message="Timed out comunicating with device.")
+@timeout(10, use_signals=False, error_message="Timed out comunicating with device.")
 def communicate_with_device(
     ip: str,
     port: int,