namespace mozilla { namespace _ipdltest { rpc protocol PTestRPCRaces { both: rpc Race() returns (bool hasReply); rpc StackFrame() returns (); rpc StackFrame3() returns (); parent: sync StartRace(); rpc Parent(); sync GetAnsweredParent() returns (bool answeredParent); child: Start(); Wakeup(); Wakeup3(); rpc Child(); __delete__(); state START: send Start goto TEST1; // First test: race while no other messages are on the RPC stack state TEST1: recv StartRace goto RACE1; state RACE1: call Race goto DUMMY1_1; answer Race goto DUMMY1_2; state DUMMY1_1: answer Race goto TEST2; state DUMMY1_2: call Race goto TEST2; // Second test: race while other messages are on the RPC stack state TEST2: call StackFrame goto MORESTACK; state MORESTACK: answer StackFrame goto STARTRACE; state STARTRACE: send Wakeup goto RACE2; state RACE2: call Race goto DUMMY2_1; answer Race goto DUMMY2_2; state DUMMY2_1: answer Race goto TEST3; state DUMMY2_2: call Race goto TEST3; // Third test: resolve race using custom policy state TEST3: call StackFrame3 goto MORESTACK3; state MORESTACK3: answer StackFrame3 goto STARTRACE3; state STARTRACE3: send Wakeup3 goto RACE3; state RACE3: call Child goto DUMMY3_1; answer Parent goto DUMMY3_2; state DUMMY3_1: answer Parent goto CHECK; state DUMMY3_2: call Child goto CHECK; state CHECK: recv GetAnsweredParent goto DYING; state DYING: send __delete__; }; } // namespace _ipdltest } // namespace mozilla