[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-devel] [PATCH 2/5] Add lock for xen-api class instances in XendAPIStore.py
Add __classes_lock to protect __classes, since it can be modified by the udev listener thread. Signed-off-by: Yosuke Iwamatsu <y-iwamatsu@xxxxxxxxxxxxx> diff -r c30742011bb8 tools/python/xen/xend/XendAPIStore.py --- a/tools/python/xen/xend/XendAPIStore.py Thu Mar 12 18:48:09 2009 +0000 +++ b/tools/python/xen/xend/XendAPIStore.py Fri Mar 13 16:36:52 2009 +0900 @@ -25,36 +25,59 @@ by type, to ensure safety """ +import threading + __classes = {} +__classes_lock = threading.RLock() def register(uuid, type, inst): - __classes[(uuid, type)] = inst - return inst + __classes_lock.acquire() + try: + __classes[(uuid, type)] = inst + return inst + finally: + __classes_lock.release() def deregister(uuid, type): - old = get(uuid, type) - if old is not None: - del __classes[(uuid, type)] - return old + __classes_lock.acquire() + try: + old = get(uuid, type) + if old is not None: + del __classes[(uuid, type)] + return old + finally: + __classes_lock.release() def get(uuid, type): """ Get the instances by uuid and type """ - return __classes.get((uuid, type), None) + __classes_lock.acquire() + try: + return __classes.get((uuid, type), None) + finally: + __classes_lock.release() def get_all(all_type): """ Get all instances by type """ - return [inst - for ((uuid, t), inst) in __classes.items() - if t == all_type] + __classes_lock.acquire() + try: + return [inst + for ((uuid, t), inst) in __classes.items() + if t == all_type] + finally: + __classes_lock.release() def get_all_uuid(all_type): """ Get all uuids by type """ - return [uuid - for (uuid, t) in __classes.keys() - if t == all_type] + __classes_lock.acquire() + try: + return [uuid + for (uuid, t) in __classes.keys() + if t == all_type] + finally: + __classes_lock.release() _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxxxxxxxx http://lists.xensource.com/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |