[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-changelog] [xen-unstable] xend: Add lock for xen-api class instances in XendAPIStore.py
# HG changeset patch # User Keir Fraser <keir.fraser@xxxxxxxxxx> # Date 1237286211 0 # Node ID c05fa254405d69438826b24e9083286788025b8a # Parent 24af58657d8e86d4d5dc0828001cf710cf6e44fe xend: 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> --- tools/python/xen/xend/XendAPIStore.py | 49 ++++++++++++++++++++++++---------- 1 files changed, 36 insertions(+), 13 deletions(-) diff -r 24af58657d8e -r c05fa254405d tools/python/xen/xend/XendAPIStore.py --- a/tools/python/xen/xend/XendAPIStore.py Tue Mar 17 10:36:20 2009 +0000 +++ b/tools/python/xen/xend/XendAPIStore.py Tue Mar 17 10:36:51 2009 +0000 @@ -25,36 +25,59 @@ by type, to ensure safety 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-changelog mailing list Xen-changelog@xxxxxxxxxxxxxxxxxxx http://lists.xensource.com/xen-changelog
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |