@@ -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