blob: bf71a251c74b1b2d4565565cd85c5f522e597809 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
|
namespace mozilla {
namespace _ipdltest {
intr protocol PTestInterruptRaces {
both:
intr Race() returns (bool hasReply);
intr StackFrame() returns ();
intr StackFrame3() returns ();
parent:
sync StartRace();
intr Parent();
sync GetAnsweredParent() returns (bool answeredParent);
child:
async Start();
async Wakeup();
async Wakeup3();
intr Child();
async __delete__();
state START:
send Start goto TEST1;
// First test: race while no other messages are on the Interrupt 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 Interrupt 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:
// the parent receives this from the child in this state
recv GetAnsweredParent goto CHECK;
// this transition is never taken (if the custom race resolution
// works correctly)
answer Parent goto CHECK;
state DUMMY3_2:
call Child goto CHECK;
state CHECK:
// the child sends this from this state
recv GetAnsweredParent goto DYING;
// because of deferred processing, the parent receives the child's
// message here
answer Parent goto DYING;
state DYING:
send __delete__;
};
} // namespace _ipdltest
} // namespace mozilla
|