[ovirt-devel] [VDSM] [PATCH] Add the missing locked() interface
Federico Simoncelli
fsimonce at redhat.com
Wed May 7 21:40:44 UTC 2014
+1
--
Federico
----- Original Message -----
> From: "Nir Soffer" <nsoffer at redhat.com>
> To: devel at ovirt.org, "Saggi Mizrahi" <smizrahi at redhat.com>, "ybronhei" <ybronhei at redhat.com>, "Dan Kenigsberg"
> <danken at redhat.com>, "Barak Azulay" <bazulay at redhat.com>, "Allon Mureinik" <amureini at redhat.com>
> Sent: Wednesday, May 7, 2014 6:48:39 PM
> Subject: [ovirt-devel] [VDSM] [PATCH] Add the missing locked() interface
>
>
> threading.Lock has a little known locked() method, documented in
> https://docs.python.org/2.6/library/thread.html#thread.lock.locked
>
> This method is not very useful, but since pthreading.Lock must be
> drop-in replacment for threading.Lock, we must implement it.
>
> This patch adds the missing method, implementing it in the same way
> Python implemnts it. Since RLock does not have this method, RLock does
> not extend Lock now.
>
> Signed-off-by: Nir Soffer <nsoffer at redhat.com>
> ---
> pthreading.py | 18 ++++++++++++++----
> tests.py | 7 +++++++
> 2 files changed, 21 insertions(+), 4 deletions(-)
>
> diff --git a/pthreading.py b/pthreading.py
> index 2e9e2d6..f1ea056 100644
> --- a/pthreading.py
> +++ b/pthreading.py
> @@ -51,9 +51,9 @@ import os
> import pthread
>
>
> -class Lock(pthread.Mutex):
> +class _Lock(pthread.Mutex):
> """
> - Lock class mimics Python native threading.Lock() API on top of
> + _Lock class mimics Python native threading.Lock() API on top of
> the POSIX thread mutex synchronization primitive.
> """
> def __enter__(self):
> @@ -78,9 +78,19 @@ class Lock(pthread.Mutex):
> self.unlock()
>
>
> -class RLock(Lock):
> +class Lock(_Lock):
> + def locked(self):
> + # Yes, this is horrible hack, and the same one used by Python
> + # threadmodule.c. But this is part of Python lock interface.
> + if self.acquire(blocking=False):
> + self.release()
> + return False
> + return True
> +
> +
> +class RLock(_Lock):
> def __init__(self):
> - pthread.Mutex.__init__(self, recursive=True)
> + _Lock.__init__(self, recursive=True)
>
>
> class Condition(object):
> diff --git a/tests.py b/tests.py
> index d651288..f4c9746 100644
> --- a/tests.py
> +++ b/tests.py
> @@ -60,6 +60,13 @@ class LockTests(TestCaseBase):
> self.assertTrue(lock.acquire())
> self.assertTrue(lock.acquire(False))
>
> + def testLocked(self):
> + lock = pthreading.Lock()
> + self.assertFalse(lock.locked())
> + with lock:
> + self.assertTrue(lock.locked())
> + self.assertFalse(lock.locked())
> +
>
> class Flag(object):
> def __init__(self):
> --
> 1.8.3.1
> _______________________________________________
> Devel mailing list
> Devel at ovirt.org
> http://lists.ovirt.org/mailman/listinfo/devel
>
More information about the Devel
mailing list