@@ -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
@@ -187,7 +210,7 @@ var statusPoller = {
187210 config . status = 1 ;
188211 }
189212
190- process . exit ( config . status ) ;
213+ process . kill ( process . pid , 'SIGTERM' ) ;
191214 }
192215 }
193216 } , activityTimeout * 1000 ) ;
@@ -208,7 +231,7 @@ var statusPoller = {
208231 config . status = 1 ;
209232 }
210233
211- process . exit ( config . status ) ;
234+ process . kill ( process . pid , 'SIGTERM' ) ;
212235 }
213236 }
214237 } , ( activityTimeout * 1000 ) ) ;
@@ -262,8 +285,8 @@ try {
262285 runTests ( ) ;
263286 var pid_file = process . cwd ( ) + '/browserstack-run.pid' ;
264287 fs . writeFileSync ( pid_file , process . pid , 'utf-8' )
265- process . on ( 'exit ' , function ( ) { cleanUp ( false ) } ) ;
266- process . on ( 'SIGINT ' , function ( ) { cleanUp ( true ) } ) ;
288+ process . on ( 'SIGINT ' , function ( ) { cleanUpAndExit ( 'SIGINT' , 1 ) } ) ;
289+ process . on ( 'SIGTERM ' , function ( ) { cleanUpAndExit ( 'SIGTERM' , config . status ) } ) ;
267290 }
268291} catch ( e ) {
269292 console . log ( e ) ;
0 commit comments