From 59fe54da0177ef6a77581dcaa16d8d0c98c8a736 Mon Sep 17 00:00:00 2001 From: Aurimas Vinckevicius Date: Tue, 3 Jun 2014 01:45:03 -0500 Subject: [PATCH] Release server port when shutting down (e.g. switching to Connector mode) --- chrome/content/zotero/xpcom/server.js | 21 +++++++++++++++++++-- 1 file changed, 19 insertions(+), 2 deletions(-) diff --git a/chrome/content/zotero/xpcom/server.js b/chrome/content/zotero/xpcom/server.js index 120ebb696..034832c14 100755 --- a/chrome/content/zotero/xpcom/server.js +++ b/chrome/content/zotero/xpcom/server.js @@ -24,7 +24,7 @@ */ Zotero.Server = new function() { - var _onlineObserverRegistered; + var _onlineObserverRegistered, serv; this.responseCodes = { 200:"OK", 201:"Created", @@ -47,8 +47,13 @@ Zotero.Server = new function() { return; } + if(serv) { + Zotero.debug("Already listening on port " + serv.port); + return; + } + // start listening on socket - var serv = Components.classes["@mozilla.org/network/server-socket;1"] + serv = Components.classes["@mozilla.org/network/server-socket;1"] .createInstance(Components.interfaces.nsIServerSocket); try { // bind to a random port on loopback only @@ -56,13 +61,25 @@ Zotero.Server = new function() { serv.asyncListen(Zotero.Server.SocketListener); Zotero.debug("HTTP server listening on "+(bindAllAddr ? "*": " 127.0.0.1")+":"+serv.port); + + Zotero.addShutdownListener(this.close.bind(this)); } catch(e) { Zotero.debug("Not initializing HTTP server"); + serv = undefined; } _registerOnlineObserver() } + /** + * releases bound port + */ + this.close = function() { + if(!serv) return; + serv.close(); + serv = undefined; + }; + /** * Parses a query string into a key => value object * @param {String} queryString Query string