# HG changeset patch
# User Keir Fraser <keir.fraser@xxxxxxxxxx>
# Date 1197627971 0
# Node ID 61ff9b393c83d4750acdf2b26dd70fd7981e5145
# Parent 8aa377fb1b1fe4e5f46a983b925073f3e9e6f619
acm, xend: Serialize the execution of external scripts.
Instead of starting a thread per script, run a single thread and send
orders to it. This serializes the execution of the scripts.
Signed-off-by: Stefan Berger <stefanB@xxxxxxxxxx>
---
tools/python/xen/util/xsm/acm/acm.py | 49 +++++++++++++++++++++++++----------
1 files changed, 36 insertions(+), 13 deletions(-)
diff -r 8aa377fb1b1f -r 61ff9b393c83 tools/python/xen/util/xsm/acm/acm.py
--- a/tools/python/xen/util/xsm/acm/acm.py Fri Dec 14 10:25:00 2007 +0000
+++ b/tools/python/xen/util/xsm/acm/acm.py Fri Dec 14 10:26:11 2007 +0000
@@ -1545,21 +1545,44 @@ def get_security_label(self, xspol=None)
label = self.info.get('security_label', label)
return label
+
+__cond = threading.Condition()
+__script_runner = None
+__orders = []
+
def run_resource_label_change_script(resource, label, command):
- def __run_resource_label_change_script(label, command):
+ global __cond, __orders, __script_runner
+
+ def __run_resource_label_change_script():
+ global __cond, __orders
script = XendOptions.instance().get_resource_label_change_script()
if script:
- parms = {
- 'resource' : resource,
- 'label' : label,
- 'command' : command,
- }
- log.info("Running resource label change script %s: %s" %
- (script, parms))
- parms.update(os.environ)
- os.spawnve(os.P_WAIT, script[0], script, parms)
+ parms = {}
+ while True:
+ __cond.acquire()
+ if len(__orders) == 0:
+ __cond.wait()
+
+ parms['label'], \
+ parms['command'], \
+ parms['resource'] = __orders[0]
+
+ __orders = __orders[1:]
+ __cond.release()
+
+ log.info("Running resource label change script %s: %s" %
+ (script, parms))
+ parms.update(os.environ)
+ os.spawnve(os.P_WAIT, script[0], script, parms)
else:
log.info("No script given for relabeling of resources.")
- thread = threading.Thread(target=__run_resource_label_change_script,
- args=(label,command))
- thread.start()
+ if not __script_runner:
+ __script_runner = \
+ threading.Thread(target=__run_resource_label_change_script,
+ args=())
+ __script_runner.start()
+
+ __cond.acquire()
+ __orders.append((label,command,resource))
+ __cond.notify()
+ __cond.release()
_______________________________________________
Xen-changelog mailing list
Xen-changelog@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-changelog
|