|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-devel] [OSSTEST PATCH 09/13] Planner: ms-queuedaemon: Synchronise thinking multiple walkers
If multiple walkers want to ask the same chan, we want to serialise
them. This is actually straightforward: Firstly, we arrrange that
each walker finishing a thought will prompt _all_ walkers to
reconsider whether they need to continue. Then we can simply do
nothing if we want to a chan to think that another walker is already
waiting for; since that other walker will prompt us later.
Still no actual functional change because there is still only one
walker.
Signed-off-by: Ian Jackson <Ian.Jackson@xxxxxxxxxxxxx>
---
ms-queuedaemon | 14 +++++++++++---
1 file changed, 11 insertions(+), 3 deletions(-)
diff --git a/ms-queuedaemon b/ms-queuedaemon
index 53ac655..779ede0 100755
--- a/ms-queuedaemon
+++ b/ms-queuedaemon
@@ -216,6 +216,12 @@ proc runneeded-2-requeue {} {
# $w/thinking_after timeout
# all the $w/ are generally upvar'd by walker-globals
+proc walkers-perhaps-queue-steps {} {
+ foreach-walker w {
+ after idle queuerun-perhaps-step $w
+ }
+}
+
proc plan-reset {w} {
exec ./ms-planner -w$w reset < /dev/null
}
@@ -226,7 +232,7 @@ proc queuerun-start {w} {
log-event "$w queuerun-start"
plan-reset $w
set queue_running $queue
- after idle queuerun-perhaps-step plan
+ walkers-perhaps-queue-steps
}
proc queuerun-perhaps-step {w} {
@@ -247,7 +253,9 @@ proc queuerun-perhaps-step {w} {
set next [lindex $queue_running 0]
set already [we-are-thinking $next]
if {[llength $already]} {
- error "next $next thinking $already but also want $w"
+ # $already will wake us via walkers-perhaps-queue-steps
+ log-event "$w queuerun-perhaps-step already $already"
+ return
}
set thinking $next
@@ -304,7 +312,7 @@ proc queuerun-step-done {w why} {
unset thinking_after
}
unset thinking
- after idle queuerun-perhaps-step $w
+ walkers-perhaps-queue-steps
}
proc queue-thoughts-timedout {w} {
--
1.7.10.4
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxx
http://lists.xen.org/xen-devel
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |