@@ -451,23 +451,28 @@ extern "C" void CmiPushImmediateMsg(void *);
451451void CmiPushPE (int rank ,void * msg ) {
452452 CmiState cs = CmiGetStateN (rank );
453453 MACHSTATE2 (3 ,"Pushing message into rank %d's queue %p{" ,rank , cs -> recv );
454+
455+ if (rank == CmiMyRank ()) {
456+ CmiSendSelf ((char * )msg );
457+ } else {
454458#if CMK_IMMEDIATE_MSG
455- if (CmiIsImmediate (msg )) {
456- MACHSTATE1 (3 , "[%p] Push Immediate Message begin{" ,CmiGetState ());
457- CMI_DEST_RANK (msg ) = rank ;
458- CmiPushImmediateMsg (msg );
459- MACHSTATE1 (3 , "[%p] Push Immediate Message end}" ,CmiGetState ());
460- return ;
461- }
459+ if (CmiIsImmediate (msg )) {
460+ MACHSTATE1 (3 , "[%p] Push Immediate Message begin{" ,CmiGetState ());
461+ CMI_DEST_RANK (msg ) = rank ;
462+ CmiPushImmediateMsg (msg );
463+ MACHSTATE1 (3 , "[%p] Push Immediate Message end}" ,CmiGetState ());
464+ return ;
465+ }
462466#endif
463467
464468#if CMK_MACH_SPECIALIZED_QUEUE
465- LrtsSpecializedQueuePush (rank , msg );
469+ LrtsSpecializedQueuePush (rank , msg );
466470#elif CMK_SMP_MULTIQ
467- CMIQueuePush (cs -> recv [CmiGetState ()-> myGrpIdx ], (char * )msg );
471+ CMIQueuePush (cs -> recv [CmiGetState ()-> myGrpIdx ], (char * )msg );
468472#else
469- CMIQueuePush (cs -> recv ,(char * )msg );
473+ CMIQueuePush (cs -> recv ,(char * )msg );
470474#endif
475+ }
471476
472477#if CMK_SHARED_VARS_POSIX_THREADS_SMP
473478 if (_Cmi_sleepOnIdle )
0 commit comments