Skip to content

Commit 208575d

Browse files
jszadayevan-charmworks
authored andcommitted
Use CmiSendSelf in CmiPushPE to correct hangs (#3463)
* Use CmiSendSelf in CmiPushPE to correct hangs * Tweak Conditional Placement RE: CMK_IMMEDIATE_MSG
1 parent 4b48011 commit 208575d

File tree

1 file changed

+15
-10
lines changed

1 file changed

+15
-10
lines changed

src/arch/util/machine-common-core.C

Lines changed: 15 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -451,23 +451,28 @@ extern "C" void CmiPushImmediateMsg(void *);
451451
void 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

Comments
 (0)