diff options
author | Collin Winter <collinw@gmail.com> | 2007-06-06 00:17:35 (GMT) |
---|---|---|
committer | Collin Winter <collinw@gmail.com> | 2007-06-06 00:17:35 (GMT) |
commit | 50b79ce8e6629eb995a0b2091efebe9a5d458273 (patch) | |
tree | 7edb984160150dd3f8e7448b26d5dab78dd8ad86 /Lib/threading.py | |
parent | 956f0f71f9381130dd643e5b9d334a3902a42699 (diff) | |
download | cpython-50b79ce8e6629eb995a0b2091efebe9a5d458273.zip cpython-50b79ce8e6629eb995a0b2091efebe9a5d458273.tar.gz cpython-50b79ce8e6629eb995a0b2091efebe9a5d458273.tar.bz2 |
Patch #1731049: make threading.py use a proper "raise" when checking internal state, rather than assert statements (which get stripped out by -O).
Diffstat (limited to 'Lib/threading.py')
-rw-r--r-- | Lib/threading.py | 35 |
1 files changed, 23 insertions, 12 deletions
diff --git a/Lib/threading.py b/Lib/threading.py index fecd3cc..a46090d 100644 --- a/Lib/threading.py +++ b/Lib/threading.py @@ -111,8 +111,8 @@ class _RLock(_Verbose): __enter__ = acquire def release(self): - me = currentThread() - assert self.__owner is me, "release() of un-acquire()d lock" + if self.__owner is not currentThread(): + raise RuntimeError("cannot release un-aquired lock") self.__count = count = self.__count - 1 if not count: self.__owner = None @@ -204,7 +204,8 @@ class _Condition(_Verbose): return True def wait(self, timeout=None): - assert self._is_owned(), "wait() of un-acquire()d lock" + if not self._is_owned(): + raise RuntimeError("cannot wait on un-aquired lock") waiter = _allocate_lock() waiter.acquire() self.__waiters.append(waiter) @@ -245,7 +246,8 @@ class _Condition(_Verbose): self._acquire_restore(saved_state) def notify(self, n=1): - assert self._is_owned(), "notify() of un-acquire()d lock" + if not self._is_owned(): + raise RuntimeError("cannot notify on un-aquired lock") __waiters = self.__waiters waiters = __waiters[:n] if not waiters: @@ -273,7 +275,8 @@ class _Semaphore(_Verbose): # After Tim Peters' semaphore class, but not quite the same (no maximum) def __init__(self, value=1, verbose=None): - assert value >= 0, "Semaphore initial value must be >= 0" + if value < 0: + raise ValueError("semaphore initial value must be >= 0") _Verbose.__init__(self, verbose) self.__cond = Condition(Lock()) self.__value = value @@ -424,8 +427,10 @@ class Thread(_Verbose): return "<%s(%s, %s)>" % (self.__class__.__name__, self.__name, status) def start(self): - assert self.__initialized, "Thread.__init__() not called" - assert not self.__started, "thread already started" + if not self.__initialized: + raise RuntimeError("thread.__init__() not called") + if self.__started: + raise RuntimeError("thread already started") if __debug__: self._note("%s.start(): starting thread", self) _active_limbo_lock.acquire() @@ -545,9 +550,13 @@ class Thread(_Verbose): _active_limbo_lock.release() def join(self, timeout=None): - assert self.__initialized, "Thread.__init__() not called" - assert self.__started, "cannot join thread before it is started" - assert self is not currentThread(), "cannot join current thread" + if not self.__initialized: + raise RuntimeError("Thread.__init__() not called") + if not self.__started: + raise RuntimeError("cannot join thread before it is started") + if self is currentThread(): + raise RuntimeError("cannot join current thread") + if __debug__: if not self.__stopped: self._note("%s.join(): waiting until thread stops", self) @@ -590,8 +599,10 @@ class Thread(_Verbose): return self.__daemonic def setDaemon(self, daemonic): - assert self.__initialized, "Thread.__init__() not called" - assert not self.__started, "cannot set daemon status of active thread" + if not self.__initialized: + raise RuntimeError("Thread.__init__() not called") + if self.__started: + raise RuntimeError("cannot set daemon status of active thread"); self.__daemonic = daemonic # The timer class was contributed by Itamar Shtull-Trauring |