diff options
Diffstat (limited to 'systrace/catapult/devil/devil/utils/lazy/weak_constant.py')
-rw-r--r-- | systrace/catapult/devil/devil/utils/lazy/weak_constant.py | 23 |
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 |