Bug #1938: Fix race condition in converse tests and examples 05/4305/4
authorNitin Bhat <nbhat4@illinois.edu>
Thu, 21 Jun 2018 17:00:58 +0000 (12:00 -0500)
committerNitin Bhat <nbhat4@illinois.edu>
Wed, 27 Jun 2018 19:14:08 +0000 (14:14 -0500)
commit6aae04c4104dc76e989a9d9199aa8d614186069a
tree8a497fec1535b5689068f2095554396ebc222a92
parent0b3d3badfc7538104abe822b1a71ea2775af1798
Bug #1938: Fix race condition in converse tests and examples

This fixes the hang in converse multiping on netlrts-linux-x86_64-tcp.
For converse tests and examples that use application arguments, it
is required to process the application user-specified arguments after
calling CmiInitCPUAffinity and CmiInitCPUTopology. Since only PE 0
waits for other PEs to complete the call to CmiInitCPUTopology, there
are potential race conditions that can occur when the non-0 PEs run
faster and send user messages to PE 0. Since PE 0 is the slower PE,
it receives user messages before initializing some application
variables using the user specified arguments, as PE 0 does not exit
from CmiInitCPUTopology. For this reason, the race condition can be
fixed by holding off application message sending on all non-0 PEs
until they receive a message from PE 0 signaling that all PEs have
finished processing their topology information. For within-process
synchronization, a barrier is used to enforce topo initialization
before application messaging.

Change-Id: I102169e5b7c5f8298452cc0d9b3a08b73e02a7e3
examples/converse/pingpong/pingpong.C
examples/converse/pingpong/pingpong_multipairs.C
examples/converse/pingpong_multi/pingpong.C
tests/converse/commbench/commbench.c
tests/converse/machinetest/multiping.C
tests/converse/machinetest/pingall.C
tests/converse/megacon/megacon.c