/usr/lib/python3/dist-packages/smartcard/Synchronization.py is in python3-pyscard 1.9.6-2.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 | """
from Thinking in Python, Bruce Eckel
http://python-3-patterns-idioms-test.readthedocs.org/en/latest/Observer.html
(c) Copyright 2008, Creative Commons Attribution-Share Alike 3.0.
Simple emulation of Java's 'synchronized'
keyword, from Peter Norvig.
"""
from threading import RLock
def synchronized(method):
def f(*args):
self = args[0]
self.mutex.acquire()
# print(method.__name__, 'acquired')
try:
return method(*args)
finally:
self.mutex.release()
# print(method.__name__, 'released')
return f
def synchronize(klass, names=None):
"""Synchronize methods in the given class.
Only synchronize the methods whose names are
given, or all methods if names=None."""
if type(names) == type(''):
names = names.split()
for (name, val) in list(klass.__dict__.items()):
if callable(val) and name != '__init__' and \
(names == None or name in names):
# print("synchronizing", name)
setattr(klass, name, synchronized(val))
class Synchronization(object):
# You can create your own self.mutex, or inherit from this class:
def __init__(self):
self.mutex = RLock()
|