Skip to content
This repository was archived by the owner on Sep 6, 2021. It is now read-only.

Commit 76838a4

Browse files
committed
Merge pull request #10453 from sebaslv/fix-for-10374
Clean-up servers when closing LiveDevelopment
2 parents 9ebc91b + 014e650 commit 76838a4

2 files changed

Lines changed: 51 additions & 21 deletions

File tree

src/LiveDevelopment/LiveDevServerManager.js

Lines changed: 20 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -79,7 +79,8 @@ define(function (require, exports, module) {
7979
}
8080

8181
/**
82-
* The method by which a server registers itself.
82+
* The method by which a server registers itself. It returns an
83+
* object handler that can be used to remove that server from the list.
8384
*
8485
* @param {BaseServer|{create: function():BaseServer}} provider
8586
* The provider to be registered, described below.
@@ -88,6 +89,7 @@ define(function (require, exports, module) {
8889
* particular url. Providers that register with a higher priority will
8990
* have the opportunity to provide a given url before those with a
9091
* lower priority. The higher the number, the higher the priority.
92+
* @return {{object}}
9193
*/
9294
function registerServer(provider, priority) {
9395
if (!provider.create) {
@@ -102,6 +104,22 @@ define(function (require, exports, module) {
102104

103105
_serverProviders.push(providerObj);
104106
_serverProviders.sort(_providerSort);
107+
108+
return providerObj;
109+
}
110+
111+
/**
112+
* Remove a server from the list of the registered providers.
113+
*
114+
* @param {{object}} provider The provider to be removed.
115+
*/
116+
function removeServer(provider) {
117+
var i;
118+
for (i = 0; i < _serverProviders.length; i++) {
119+
if (provider === _serverProviders[i]) {
120+
_serverProviders.splice(i, 1);
121+
}
122+
}
105123
}
106124

107125
// Backwards compatibility
@@ -111,4 +129,5 @@ define(function (require, exports, module) {
111129
// Define public API
112130
exports.getServer = getServer;
113131
exports.registerServer = registerServer;
132+
exports.removeServer = removeServer;
114133
});

src/LiveDevelopment/LiveDevelopment.js

Lines changed: 31 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -190,6 +190,12 @@ define(function LiveDevelopment(require, exports, module) {
190190
* @type {BaseServer}
191191
*/
192192
var _server;
193+
194+
/**
195+
* @private
196+
* Handles of registered servers
197+
*/
198+
var _regServers = [];
193199

194200
function _isPromisePending(promise) {
195201
return promise && promise.state() === "pending";
@@ -865,6 +871,11 @@ define(function LiveDevelopment(require, exports, module) {
865871
var closeDeferred = (brackets.platform === "mac") ? NativeApp.closeLiveBrowser() : $.Deferred().resolve();
866872
closeDeferred.done(function () {
867873
_setStatus(STATUS_INACTIVE, reason || "explicit_close");
874+
// clean-up registered servers
875+
_regServers.forEach(function (server) {
876+
LiveDevServerManager.removeServer(server);
877+
});
878+
_regServers = [];
868879
_closeDeferred.resolve();
869880
}).fail(function (err) {
870881
if (err) {
@@ -1288,6 +1299,22 @@ define(function LiveDevelopment(require, exports, module) {
12881299
return deferred.promise();
12891300
}
12901301

1302+
function getCurrentProjectServerConfig() {
1303+
return {
1304+
baseUrl: ProjectManager.getBaseUrl(),
1305+
pathResolver: ProjectManager.makeProjectRelativeIfPossible,
1306+
root: ProjectManager.getProjectRoot().fullPath
1307+
};
1308+
}
1309+
1310+
function _createUserServer() {
1311+
return new UserServer(getCurrentProjectServerConfig());
1312+
}
1313+
1314+
function _createFileServer() {
1315+
return new FileServer(getCurrentProjectServerConfig());
1316+
}
1317+
12911318
/**
12921319
* Open the Connection and go live
12931320
*
@@ -1314,6 +1341,10 @@ define(function LiveDevelopment(require, exports, module) {
13141341
}
13151342
}
13161343

1344+
// Register user defined server provider and keep handlers for further clean-up
1345+
_regServers.push(LiveDevServerManager.registerServer({ create: _createUserServer }, 99));
1346+
_regServers.push(LiveDevServerManager.registerServer({ create: _createFileServer }, 0));
1347+
13171348
// TODO: need to run _onFileChanged() after load if doc != currentDocument here? Maybe not, since activeEditorChange
13181349
// doesn't trigger it, while inline editors can still cause edits in doc other than currentDoc...
13191350
_getInitialDocFromCurrent().done(function (doc) {
@@ -1441,22 +1472,6 @@ define(function LiveDevelopment(require, exports, module) {
14411472
}
14421473
}
14431474

1444-
function getCurrentProjectServerConfig() {
1445-
return {
1446-
baseUrl: ProjectManager.getBaseUrl(),
1447-
pathResolver: ProjectManager.makeProjectRelativeIfPossible,
1448-
root: ProjectManager.getProjectRoot().fullPath
1449-
};
1450-
}
1451-
1452-
function _createUserServer() {
1453-
return new UserServer(getCurrentProjectServerConfig());
1454-
}
1455-
1456-
function _createFileServer() {
1457-
return new FileServer(getCurrentProjectServerConfig());
1458-
}
1459-
14601475
/** Initialize the LiveDevelopment Session */
14611476
function init(theConfig) {
14621477
exports.config = theConfig;
@@ -1475,10 +1490,6 @@ define(function LiveDevelopment(require, exports, module) {
14751490
.on("dirtyFlagChange", _onDirtyFlagChange);
14761491
ProjectManager
14771492
.on("beforeProjectClose beforeAppClose", close);
1478-
1479-
// Register user defined server provider
1480-
LiveDevServerManager.registerServer({ create: _createUserServer }, 99);
1481-
LiveDevServerManager.registerServer({ create: _createFileServer }, 0);
14821493

14831494
// Initialize exports.status
14841495
_setStatus(STATUS_INACTIVE);

0 commit comments

Comments
 (0)