Skip to content

Commit 7e8571b

Browse files
committed
delete workers on ctrl-c
1 parent 778e322 commit 7e8571b

File tree

4 files changed

+53
-30
lines changed

4 files changed

+53
-30
lines changed

bin/cli.js

Lines changed: 47 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -23,30 +23,46 @@ var Log = require('../lib/logger'),
2323
logLevel,
2424
tunnel;
2525

26-
function cleanUp(signal) {
27-
try {
28-
server.close();
29-
} catch (e) {
30-
logger.debug("Server already closed");
31-
}
32-
33-
logger.info("Exiting");
34-
35-
for (var key in workers) {
36-
var worker = workers[key];
37-
if (workers.hasOwnProperty(key)) {
38-
client.terminateWorker(worker.id, function () {
39-
if (!workers[key]) {
40-
return;
41-
}
42-
26+
function terminateAllWorkers(callback) {
27+
var cleanWorker = function(id, key) {
28+
client.terminateWorker(id, function() {
29+
var worker = workers[key];
30+
if(worker) {
4331
logger.debug('[%s] Terminated', worker.string);
4432
clearTimeout(worker.activityTimeout);
4533
delete workers[key];
4634
delete workerKeys[worker.id];
47-
});
35+
}
36+
if (utils.objectSize(workers) === 0) {
37+
callback();
38+
}
39+
});
40+
};
41+
42+
if (utils.objectSize(workers) === 0) {
43+
callback();
44+
} else {
45+
for (var key in workers){
46+
var worker = workers[key];
47+
if (worker.id) {
48+
cleanWorker(worker.id, key);
49+
} else {
50+
delete workers[key];
51+
if (utils.objectSize(workers) === 0) {
52+
callback();
53+
}
54+
}
4855
}
4956
}
57+
};
58+
59+
function cleanUpAndExit(signal, status) {
60+
try {
61+
server.close();
62+
} catch (e) {
63+
logger.debug("Server already closed");
64+
}
65+
5066
if (statusPoller) statusPoller.stop();
5167

5268
try {
@@ -59,8 +75,15 @@ function cleanUp(signal) {
5975
} catch (e) {
6076
logger.debug("Non existent pid file.");
6177
}
62-
if (signal) {
63-
process.kill(process.pid, 'SIGTERM');
78+
79+
if (signal == 'SIGTERM') {
80+
logger.info("Exiting");
81+
process.exit(status);
82+
} else {
83+
terminateAllWorkers(function() {
84+
logger.info("Exiting");
85+
process.exit(1);
86+
});
6487
}
6588
}
6689

@@ -177,7 +200,7 @@ var statusPoller = {
177200
config.status = 1;
178201
}
179202

180-
process.exit(config.status);
203+
process.kill(process.pid, 'SIGTERM');
181204
}
182205
}
183206
}, activityTimeout * 1000);
@@ -198,7 +221,7 @@ var statusPoller = {
198221
config.status = 1;
199222
}
200223

201-
process.exit(config.status);
224+
process.kill(process.pid, 'SIGTERM');
202225
}
203226
}
204227
}, (activityTimeout * 1000));
@@ -251,8 +274,8 @@ try {
251274
runTests();
252275
var pid_file = process.cwd() + '/browserstack-run.pid';
253276
fs.writeFileSync(pid_file, process.pid, 'utf-8')
254-
process.on('exit', function() {cleanUp(false)});
255-
process.on('SIGINT', function() {cleanUp(true)});
277+
process.on('SIGINT', function() { cleanUpAndExit('SIGINT', 1) });
278+
process.on('SIGTERM', function() { cleanUpAndExit('SIGTERM', config.status) });
256279
}
257280
} catch (e) {
258281
console.log(e);

lib/local.js

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -29,9 +29,9 @@ var Tunnel = function Tunnel(key, port, uniqueIdentifier, callback, err) {
2929
logger.debug(stderr);
3030
logger.debug(error);
3131
if (stdout.indexOf('Error') >= 0 || error) {
32-
logger.info("[%s] Tunnel launching failed", new Date());
33-
logger.info(stdout);
34-
process.exit(1);
32+
logger.debug("[%s] Tunnel launching failed", new Date());
33+
logger.debug(stdout);
34+
process.kill(process.pid, 'SIGINT');
3535
}
3636
});
3737

@@ -82,7 +82,7 @@ var Tunnel = function Tunnel(key, port, uniqueIdentifier, callback, err) {
8282
}, 100);
8383
}).on('error', function(e) {
8484
logger.info("Got error while downloading binary: " + e.message);
85-
process.exit(1);
85+
process.kill(process.pid, 'SIGINT');
8686
});
8787
});
8888
});

lib/server.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -199,7 +199,7 @@ exports.Server = function Server(bsClient, workers) {
199199
config.status = 1;
200200
}
201201

202-
process.exit(config.status);
202+
process.kill(process.pid, 'SIGTERM');
203203
}
204204
});
205205
});

lib/utils.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,7 @@ var alertBrowserStack = function alertBrowserStack(subject, content, params, fn)
4949
if (typeof params === 'function') {
5050
} else {
5151
fn = function() {
52-
process.exit(1);
52+
process.kill(process.pid, 'SIGINT');
5353
};
5454
}
5555
}

0 commit comments

Comments
 (0)