Bug 1301320 - Marionette should retry creating the server socket in case the port is in use.
MozReview-Commit-ID: DFTvw3HgrhN
--- a/testing/marionette/components/marionettecomponent.js
+++ b/testing/marionette/components/marionettecomponent.js
@@ -207,31 +207,36 @@ MarionetteComponent.prototype.init = fun
// This allows the following attempt by Marionette to open a socket
// to succeed.
let insaneSacrificialGoat =
new ServerSocket(666, Ci.nsIServerSocket.KeepWhenOffline, 4);
insaneSacrificialGoat.asyncListen(this);
}
let port = Preferences.get(PORT_PREF, DEFAULT_PORT);
+ let self = this;
- let s;
- try {
- Cu.import("chrome://marionette/content/server.js");
- s = new MarionetteServer(port, forceLocal);
- s.start();
- this.logger.info(`Listening on port ${s.port}`);
- } catch (e) {
- this.logger.error(`Error on starting server: ${e}`);
- dump(e.toString() + "\n" + e.stack + "\n");
- } finally {
- if (s) {
- this.server = s;
+ Cu.import("chrome://marionette/content/server.js");
+
+ function startServer() {
+ let server = new MarionetteServer(port, forceLocal);
+
+ try {
+ server.start();
+ self.server = server
+ self.logger.info(`Listening on port ${server.port}`);
+ } catch (e) {
+ self.logger.error(`Error when starting server on port ${server.port}: ${e}. Retrying...`);
+ dump(e.toString() + "\n" + e.stack + "\n");
+
+ let timer = Cc["@mozilla.org/timer;1"].createInstance(Ci.nsITimer);
+ timer.initWithCallback(startServer, 5000, Ci.nsITimer.TYPE_ONE_SHOT);
}
- }
+ };
+ startServer();
};
MarionetteComponent.prototype.uninit = function() {
if (!this.loaded_) {
return;
}
this.server.stop();
this.loaded_ = false;