88 */
99
1010var async = require ( 'async' ) ;
11- var shellFork = require ( 'child_process' ) . fork ;
11+ var fork = require ( 'child_process' ) . fork ;
1212var request = require ( 'supertest' ) ;
1313var restify = require ( 'restify' ) ;
1414var url = require ( 'url' ) ;
@@ -39,7 +39,7 @@ module.exports = function(hydraterFunction, logger, errLogger) {
3939
4040 async . waterfall ( [
4141 function performHydration ( cb ) {
42- var child = shellFork ( __dirname + '/child-process.js' , { silent : true } ) ;
42+ var child = fork ( __dirname + '/child-process.js' , { silent : true } ) ;
4343 var stderr = "" ;
4444 var stdout = "" ;
4545 var timeout ;
@@ -49,6 +49,9 @@ module.exports = function(hydraterFunction, logger, errLogger) {
4949 */
5050 var cleaner = function ( err , changes ) {
5151 if ( ! cleaner . called ) {
52+ if ( child . connected ) {
53+ child . kill ( 'SIGKILL' ) ;
54+ }
5255 cleaner . called = true ;
5356 cb ( err , changes ) ;
5457 }
@@ -110,7 +113,7 @@ module.exports = function(hydraterFunction, logger, errLogger) {
110113 if ( err && err . _hydrationError ) {
111114 res . changes = { } ;
112115 res . changes . hydration_errored = true ;
113- res . changes . hydration_error = res . err . message ;
116+ res . changes . hydration_error = err . message ;
114117 err = null ;
115118 }
116119 cleaner ( err , res . changes ) ;
@@ -121,8 +124,11 @@ module.exports = function(hydraterFunction, logger, errLogger) {
121124 var changes = { } ;
122125 changes . hydration_errored = true ;
123126 changes . hydration_error = "Task took too long." ;
124- child . kill ( 'SIGKILL' ) ;
125- cleaner ( null , changes ) ;
127+ errLogger ( 'Killing task: ' + ( ( task . file_path ) ? task . file_path : task . document . id ) ) ;
128+ child . kill ( 'SIGTERM' ) ;
129+ setTimeout ( function ( ) {
130+ cleaner ( null , changes ) ;
131+ } , 10 * 1000 ) ;
126132 }
127133 } , process . env . TIMEOUT || 60 * 1000 ) ;
128134 } ,
0 commit comments