summaryrefslogtreecommitdiff
path: root/threads.js
diff options
context:
space:
mode:
authorHardmath123 <hardmath123@gmail.com>2013-12-22 16:28:11 -0800
committerHardmath123 <hardmath123@gmail.com>2013-12-22 16:28:11 -0800
commitd8d1810e436cba83144f4b2234fc3097a739208b (patch)
treec4e06a216c75de15dc065cb3ceb05261e8e25187 /threads.js
parente9020b4ed3f7190dc78e622fbe3b2665e227c30f (diff)
downloadsnap-d8d1810e436cba83144f4b2234fc3097a739208b.tar.gz
snap-d8d1810e436cba83144f4b2234fc3097a739208b.zip
Initial stop others block
Diffstat (limited to 'threads.js')
-rw-r--r--threads.js21
1 files changed, 21 insertions, 0 deletions
diff --git a/threads.js b/threads.js
index d1e57d3..25659b5 100644
--- a/threads.js
+++ b/threads.js
@@ -168,6 +168,17 @@ ThreadManager.prototype.stopAllForReceiver = function (rcvr) {
});
};
+ThreadManager.prototype.stopAllForReceiverExcept = function (rcvr, excpt) {
+ this.processes.forEach(function (proc) {
+ if (proc.homeContext.receiver === rcvr && proc != excpt) {
+ proc.stop();
+ if (rcvr.isClone) {
+ proc.isDead = true;
+ }
+ }
+ });
+};
+
ThreadManager.prototype.stopProcess = function (block) {
var active = this.findProcess(block);
if (active) {
@@ -1368,6 +1379,16 @@ Process.prototype.doStopAll = function () {
}
};
+Process.prototype.doStopOthers = function () {
+ var stage, ide;
+ if (this.homeContext.receiver) {
+ stage = this.homeContext.receiver.parentThatIsA(StageMorph);
+ if (stage) {
+ stage.threads.stopAllForReceiverExcept(this.homeContext.receiver, this);
+ }
+ }
+};
+
Process.prototype.doWarp = function (body) {
// execute my contents block atomically (more or less)
var outer = this.context.outerContext, // for tail call elimination