summaryrefslogtreecommitdiff
path: root/systrace/catapult/devil/devil/utils/lazy/weak_constant.py
diff options
context:
space:
mode:
Diffstat (limited to 'systrace/catapult/devil/devil/utils/lazy/weak_constant.py')
-rw-r--r--systrace/catapult/devil/devil/utils/lazy/weak_constant.py23
1 files changed, 5 insertions, 18 deletions
diff --git a/systrace/catapult/devil/devil/utils/lazy/weak_constant.py b/systrace/catapult/devil/devil/utils/lazy/weak_constant.py
index 24ad940..3558f29 100644
--- a/systrace/catapult/devil/devil/utils/lazy/weak_constant.py
+++ b/systrace/catapult/devil/devil/utils/lazy/weak_constant.py
@@ -4,9 +4,6 @@
import threading
-from devil.utils import reraiser_thread
-from devil.utils import timeout_retry
-
class WeakConstant(object):
"""A thread-safe, lazily initialized object.
@@ -16,27 +13,17 @@ class WeakConstant(object):
"""
def __init__(self, initializer):
- self._initialized = threading.Event()
+ self._initialized = False
self._initializer = initializer
self._lock = threading.Lock()
self._val = None
def read(self):
"""Get the object, creating it if necessary."""
- if self._initialized.is_set():
+ if self._initialized:
return self._val
with self._lock:
- if not self._initialized.is_set():
- # We initialize the value on a separate thread to protect
- # from holding self._lock indefinitely in the event that
- # self._initializer hangs.
- initializer_thread = reraiser_thread.ReraiserThread(
- self._initializer)
- initializer_thread.start()
- timeout_retry.WaitFor(
- lambda: initializer_thread.join(1) or not initializer_thread.isAlive(),
- wait_period=0)
- self._val = initializer_thread.GetReturnValue()
- self._initialized.set()
-
+ if not self._initialized:
+ self._val = self._initializer()
+ self._initialized = True
return self._val