@@ -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 ) ;
0 commit comments