@@ -456,16 +456,22 @@ function setupChannel(target, channel) {
456
456
}
457
457
chunks [ 0 ] = jsonBuffer + chunks [ 0 ] ;
458
458
459
+ var nextTick = false ;
459
460
for ( var i = 0 ; i < numCompleteChunks ; i ++ ) {
460
461
var message = JSON . parse ( chunks [ i ] ) ;
461
462
462
463
// There will be at most one NODE_HANDLE message in every chunk we
463
464
// read because SCM_RIGHTS messages don't get coalesced. Make sure
464
465
// that we deliver the handle with the right message however.
465
- if ( message && message . cmd === 'NODE_HANDLE' )
466
- handleMessage ( target , message , recvHandle ) ;
467
- else
468
- handleMessage ( target , message , undefined ) ;
466
+ if ( isInternal ( message ) ) {
467
+ if ( message . cmd === 'NODE_HANDLE' )
468
+ handleMessage ( message , recvHandle , true , false ) ;
469
+ else
470
+ handleMessage ( message , undefined , true , false ) ;
471
+ } else {
472
+ handleMessage ( message , undefined , false , nextTick ) ;
473
+ nextTick = true ;
474
+ }
469
475
}
470
476
jsonBuffer = incompleteChunk ;
471
477
this . buffering = jsonBuffer . length !== 0 ;
@@ -526,7 +532,7 @@ function setupChannel(target, channel) {
526
532
527
533
// Convert handle object
528
534
obj . got . call ( this , message , handle , function ( handle ) {
529
- handleMessage ( target , message . msg , handle ) ;
535
+ handleMessage ( message . msg , handle , isInternal ( message . msg ) , false ) ;
530
536
} ) ;
531
537
} ) ;
532
538
@@ -732,27 +738,32 @@ function setupChannel(target, channel) {
732
738
process . nextTick ( finish ) ;
733
739
} ;
734
740
741
+ function emit ( event , message , handle ) {
742
+ target . emit ( event , message , handle ) ;
743
+ }
744
+
745
+ function handleMessage ( message , handle , internal , nextTick ) {
746
+ if ( ! target . channel )
747
+ return ;
748
+
749
+ var eventName = ( internal ? 'internalMessage' : 'message' ) ;
750
+ if ( nextTick )
751
+ process . nextTick ( emit , eventName , message , handle ) ;
752
+ else
753
+ target . emit ( eventName , message , handle ) ;
754
+ }
755
+
735
756
channel . readStart ( ) ;
736
757
return control ;
737
758
}
738
759
739
-
740
760
const INTERNAL_PREFIX = 'NODE_' ;
741
- function handleMessage ( target , message , handle ) {
742
- if ( ! target . channel )
743
- return ;
744
-
745
- var eventName = 'message' ;
746
- if ( message !== null &&
747
- typeof message === 'object' &&
748
- typeof message . cmd === 'string' &&
749
- message . cmd . length > INTERNAL_PREFIX . length &&
750
- message . cmd . slice ( 0 , INTERNAL_PREFIX . length ) === INTERNAL_PREFIX ) {
751
- eventName = 'internalMessage' ;
752
- }
753
- process . nextTick ( ( ) => {
754
- target . emit ( eventName , message , handle ) ;
755
- } ) ;
761
+ function isInternal ( message ) {
762
+ return ( message !== null &&
763
+ typeof message === 'object' &&
764
+ typeof message . cmd === 'string' &&
765
+ message . cmd . length > INTERNAL_PREFIX . length &&
766
+ message . cmd . slice ( 0 , INTERNAL_PREFIX . length ) === INTERNAL_PREFIX ) ;
756
767
}
757
768
758
769
function nop ( ) { }
0 commit comments