@@ -23,30 +23,46 @@ var Log = require('../lib/logger'),
23
23
logLevel ,
24
24
tunnel ;
25
25
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 ) {
43
31
logger . debug ( '[%s] Terminated' , worker . string ) ;
44
32
clearTimeout ( worker . activityTimeout ) ;
45
33
delete workers [ key ] ;
46
34
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
+ }
48
55
}
49
56
}
57
+ } ;
58
+
59
+ function cleanUpAndExit ( signal , status ) {
60
+ try {
61
+ server . close ( ) ;
62
+ } catch ( e ) {
63
+ logger . debug ( "Server already closed" ) ;
64
+ }
65
+
50
66
if ( statusPoller ) statusPoller . stop ( ) ;
51
67
52
68
try {
@@ -59,8 +75,15 @@ function cleanUp(signal) {
59
75
} catch ( e ) {
60
76
logger . debug ( "Non existent pid file." ) ;
61
77
}
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
+ } ) ;
64
87
}
65
88
}
66
89
@@ -177,7 +200,7 @@ var statusPoller = {
177
200
config . status = 1 ;
178
201
}
179
202
180
- process . exit ( config . status ) ;
203
+ process . kill ( process . pid , 'SIGTERM' ) ;
181
204
}
182
205
}
183
206
} , activityTimeout * 1000 ) ;
@@ -198,7 +221,7 @@ var statusPoller = {
198
221
config . status = 1 ;
199
222
}
200
223
201
- process . exit ( config . status ) ;
224
+ process . kill ( process . pid , 'SIGTERM' ) ;
202
225
}
203
226
}
204
227
} , ( activityTimeout * 1000 ) ) ;
@@ -251,8 +274,8 @@ try {
251
274
runTests ( ) ;
252
275
var pid_file = process . cwd ( ) + '/browserstack-run.pid' ;
253
276
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 ) } ) ;
256
279
}
257
280
} catch ( e ) {
258
281
console . log ( e ) ;
0 commit comments