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) {
|
this.createWorker = function(session) {
|
||||||
var doc = session.getDocument();
|
|
||||||
var worker = new WorkerClient(["ace", "pilot"], "worker-coffee.js", "ace/mode/coffee_worker", "Worker");
|
var worker = new WorkerClient(["ace", "pilot"], "worker-coffee.js", "ace/mode/coffee_worker", "Worker");
|
||||||
worker.call("setValue", [doc.getValue()]);
|
worker.attachToDocument(session.getDocument());
|
||||||
|
|
||||||
doc.on("change", function(e) {
|
|
||||||
e.range = {
|
|
||||||
start: e.data.range.start,
|
|
||||||
end: e.data.range.end
|
|
||||||
};
|
|
||||||
worker.emit("change", e);
|
|
||||||
});
|
|
||||||
|
|
||||||
worker.on("error", function(e) {
|
worker.on("error", function(e) {
|
||||||
session.setAnnotations([e.data]);
|
session.setAnnotations([e.data]);
|
||||||
|
|
|
||||||
|
|
@ -78,17 +78,8 @@ oop.inherits(Mode, TextMode);
|
||||||
};
|
};
|
||||||
|
|
||||||
this.createWorker = function(session) {
|
this.createWorker = function(session) {
|
||||||
var doc = session.getDocument();
|
|
||||||
var worker = new WorkerClient(["ace", "pilot"], "worker-css.js", "ace/mode/css_worker", "Worker");
|
var worker = new WorkerClient(["ace", "pilot"], "worker-css.js", "ace/mode/css_worker", "Worker");
|
||||||
worker.call("setValue", [doc.getValue()]);
|
worker.attachToDocument(session.getDocument());
|
||||||
|
|
||||||
doc.on("change", function(e) {
|
|
||||||
e.range = {
|
|
||||||
start: e.data.range.start,
|
|
||||||
end: e.data.range.end
|
|
||||||
};
|
|
||||||
worker.emit("change", e);
|
|
||||||
});
|
|
||||||
|
|
||||||
worker.on("csslint", function(e) {
|
worker.on("csslint", function(e) {
|
||||||
var errors = [];
|
var errors = [];
|
||||||
|
|
|
||||||
|
|
@ -125,17 +125,8 @@ oop.inherits(Mode, TextMode);
|
||||||
};
|
};
|
||||||
|
|
||||||
this.createWorker = function(session) {
|
this.createWorker = function(session) {
|
||||||
var doc = session.getDocument();
|
|
||||||
var worker = new WorkerClient(["ace", "pilot"], "worker-javascript.js", "ace/mode/javascript_worker", "JavaScriptWorker");
|
var worker = new WorkerClient(["ace", "pilot"], "worker-javascript.js", "ace/mode/javascript_worker", "JavaScriptWorker");
|
||||||
worker.call("setValue", [doc.getValue()]);
|
worker.attachToDocument(session.getDocument());
|
||||||
|
|
||||||
doc.on("change", function(e) {
|
|
||||||
e.range = {
|
|
||||||
start: e.data.range.start,
|
|
||||||
end: e.data.range.end
|
|
||||||
};
|
|
||||||
worker.emit("change", e);
|
|
||||||
});
|
|
||||||
|
|
||||||
worker.on("jslint", function(results) {
|
worker.on("jslint", function(results) {
|
||||||
var errors = [];
|
var errors = [];
|
||||||
|
|
|
||||||
|
|
@ -42,7 +42,7 @@ var EventEmitter = require("pilot/event_emitter").EventEmitter;
|
||||||
|
|
||||||
var WorkerClient = function(topLevelNamespaces, packagedJs, module, classname) {
|
var WorkerClient = function(topLevelNamespaces, packagedJs, module, classname) {
|
||||||
|
|
||||||
this.callbacks = [];
|
this.changeListener = this.changeListener.bind(this);
|
||||||
|
|
||||||
if (require.packaged) {
|
if (require.packaged) {
|
||||||
var base = this.$guessBasePath();
|
var base = this.$guessBasePath();
|
||||||
|
|
@ -138,6 +138,9 @@ var WorkerClient = function(topLevelNamespaces, packagedJs, module, classname) {
|
||||||
this.terminate = function() {
|
this.terminate = function() {
|
||||||
this._dispatchEvent("terminate", {});
|
this._dispatchEvent("terminate", {});
|
||||||
this.$worker.terminate();
|
this.$worker.terminate();
|
||||||
|
this.$worker = null;
|
||||||
|
this.$doc.removeEventListener("change", this.changeListener);
|
||||||
|
this.$doc = null;
|
||||||
};
|
};
|
||||||
|
|
||||||
this.send = function(cmd, args) {
|
this.send = function(cmd, args) {
|
||||||
|
|
@ -157,9 +160,29 @@ var WorkerClient = function(topLevelNamespaces, packagedJs, module, classname) {
|
||||||
try {
|
try {
|
||||||
this.$worker.postMessage({event: event, data: data});
|
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);
|
}).call(WorkerClient.prototype);
|
||||||
|
|
||||||
exports.WorkerClient = WorkerClient;
|
exports.WorkerClient = WorkerClient;
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue