@@ -456,16 +456,22 @@ function setupChannel(target, channel) {
456456      } 
457457      chunks [ 0 ]  =  jsonBuffer  +  chunks [ 0 ] ; 
458458
459+       var  nextTick  =  false ; 
459460      for  ( var  i  =  0 ;  i  <  numCompleteChunks ;  i ++ )  { 
460461        var  message  =  JSON . parse ( chunks [ i ] ) ; 
461462
462463        // There will be at most one NODE_HANDLE message in every chunk we 
463464        // read because SCM_RIGHTS messages don't get coalesced. Make sure 
464465        // 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+         } 
469475      } 
470476      jsonBuffer  =  incompleteChunk ; 
471477      this . buffering  =  jsonBuffer . length  !==  0 ; 
@@ -526,7 +532,7 @@ function setupChannel(target, channel) {
526532
527533    // Convert handle object 
528534    obj . got . call ( this ,  message ,  handle ,  function ( handle )  { 
529-       handleMessage ( target ,   message . msg ,   handle ) ; 
535+       handleMessage ( message . msg ,   handle ,   isInternal ( message . msg ) ,   false ) ; 
530536    } ) ; 
531537  } ) ; 
532538
@@ -732,27 +738,32 @@ function setupChannel(target, channel) {
732738    process . nextTick ( finish ) ; 
733739  } ; 
734740
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+ 
735756  channel . readStart ( ) ; 
736757  return  control ; 
737758} 
738759
739- 
740760const  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 ) ; 
756767} 
757768
758769function  nop ( )  {  } 
0 commit comments