remove listeners when worker is terminated
fixes bug with workers on firefox 8.0a
This commit is contained in:
parent
0b25b7593f
commit
fdb8372597
4 changed files with 28 additions and 32 deletions
|
|
@ -97,17 +97,8 @@ oop.inherits(Mode, TextMode);
|
|||
};
|
||||
|
||||
this.createWorker = function(session) {
|
||||
var doc = session.getDocument();
|
||||
var worker = new WorkerClient(["ace", "pilot"], "worker-coffee.js", "ace/mode/coffee_worker", "Worker");
|
||||
worker.call("setValue", [doc.getValue()]);
|
||||
|
||||
doc.on("change", function(e) {
|
||||
e.range = {
|
||||
start: e.data.range.start,
|
||||
end: e.data.range.end
|
||||
};
|
||||
worker.emit("change", e);
|
||||
});
|
||||
worker.attachToDocument(session.getDocument());
|
||||
|
||||
worker.on("error", function(e) {
|
||||
session.setAnnotations([e.data]);
|
||||
|
|
|
|||
|
|
@ -78,17 +78,8 @@ oop.inherits(Mode, TextMode);
|
|||
};
|
||||
|
||||
this.createWorker = function(session) {
|
||||
var doc = session.getDocument();
|
||||
var worker = new WorkerClient(["ace", "pilot"], "worker-css.js", "ace/mode/css_worker", "Worker");
|
||||
worker.call("setValue", [doc.getValue()]);
|
||||
|
||||
doc.on("change", function(e) {
|
||||
e.range = {
|
||||
start: e.data.range.start,
|
||||
end: e.data.range.end
|
||||
};
|
||||
worker.emit("change", e);
|
||||
});
|
||||
worker.attachToDocument(session.getDocument());
|
||||
|
||||
worker.on("csslint", function(e) {
|
||||
var errors = [];
|
||||
|
|
|
|||
|
|
@ -125,17 +125,8 @@ oop.inherits(Mode, TextMode);
|
|||
};
|
||||
|
||||
this.createWorker = function(session) {
|
||||
var doc = session.getDocument();
|
||||
var worker = new WorkerClient(["ace", "pilot"], "worker-javascript.js", "ace/mode/javascript_worker", "JavaScriptWorker");
|
||||
worker.call("setValue", [doc.getValue()]);
|
||||
|
||||
doc.on("change", function(e) {
|
||||
e.range = {
|
||||
start: e.data.range.start,
|
||||
end: e.data.range.end
|
||||
};
|
||||
worker.emit("change", e);
|
||||
});
|
||||
worker.attachToDocument(session.getDocument());
|
||||
|
||||
worker.on("jslint", function(results) {
|
||||
var errors = [];
|
||||
|
|
|
|||
|
|
@ -42,7 +42,7 @@ var EventEmitter = require("pilot/event_emitter").EventEmitter;
|
|||
|
||||
var WorkerClient = function(topLevelNamespaces, packagedJs, module, classname) {
|
||||
|
||||
this.callbacks = [];
|
||||
this.changeListener = this.changeListener.bind(this);
|
||||
|
||||
if (require.packaged) {
|
||||
var base = this.$guessBasePath();
|
||||
|
|
@ -138,6 +138,9 @@ var WorkerClient = function(topLevelNamespaces, packagedJs, module, classname) {
|
|||
this.terminate = function() {
|
||||
this._dispatchEvent("terminate", {});
|
||||
this.$worker.terminate();
|
||||
this.$worker = null;
|
||||
this.$doc.removeEventListener("change", this.changeListener);
|
||||
this.$doc = null;
|
||||
};
|
||||
|
||||
this.send = function(cmd, args) {
|
||||
|
|
@ -157,8 +160,28 @@ var WorkerClient = function(topLevelNamespaces, packagedJs, module, classname) {
|
|||
try {
|
||||
this.$worker.postMessage({event: event, data: data});
|
||||
}
|
||||
catch(ex) {}
|
||||
catch(ex) {
|
||||
console.log("no worker");
|
||||
console.trace();
|
||||
}
|
||||
};
|
||||
|
||||
this.attachToDocument = function(doc) {
|
||||
if(this.$doc)
|
||||
this.terminate();
|
||||
|
||||
this.$doc = doc;
|
||||
this.call("setValue", [doc.getValue()]);
|
||||
doc.on("change", this.changeListener);
|
||||
};
|
||||
|
||||
this.changeListener = function(e) {
|
||||
e.range = {
|
||||
start: e.data.range.start,
|
||||
end: e.data.range.end
|
||||
};
|
||||
this.emit("change", e);
|
||||
};
|
||||
|
||||
}).call(WorkerClient.prototype);
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue