blob: 76defe97a56a4c54677118e878af399e855bbdf3 (
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
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
|
#include "TestRaceDeadlock.h"
#include "IPDLUnitTests.h" // fail etc.
// #define TEST_TIMEOUT 5000
using namespace mozilla::ipc;
typedef mozilla::ipc::MessageChannel::Message Message;
typedef mozilla::ipc::MessageChannel::MessageInfo MessageInfo;
namespace mozilla {
namespace _ipdltest {
static RacyInterruptPolicy MediateRace(const MessageInfo& parent,
const MessageInfo& child) {
return (PTestRaceDeadlock::Msg_Win__ID == parent.type()) ? RIPParentWins
: RIPChildWins;
}
//-----------------------------------------------------------------------------
// parent
TestRaceDeadlockParent::TestRaceDeadlockParent() {
MOZ_COUNT_CTOR(TestRaceDeadlockParent);
}
TestRaceDeadlockParent::~TestRaceDeadlockParent() {
MOZ_COUNT_DTOR(TestRaceDeadlockParent);
}
void TestRaceDeadlockParent::Main() {
Test1();
Close();
}
bool TestRaceDeadlockParent::ShouldContinueFromReplyTimeout() {
fail("This test should not hang");
GetIPCChannel()->CloseWithTimeout();
return false;
}
void TestRaceDeadlockParent::Test1() {
#if defined(TEST_TIMEOUT)
SetReplyTimeoutMs(TEST_TIMEOUT);
#endif
if (!SendStartRace()) {
fail("sending StartRace");
}
if (!CallRpc()) {
fail("calling Rpc");
}
}
mozilla::ipc::IPCResult TestRaceDeadlockParent::AnswerLose() {
return IPC_OK();
}
RacyInterruptPolicy TestRaceDeadlockParent::MediateInterruptRace(
const MessageInfo& parent, const MessageInfo& child) {
return MediateRace(parent, child);
}
//-----------------------------------------------------------------------------
// child
TestRaceDeadlockChild::TestRaceDeadlockChild() {
MOZ_COUNT_CTOR(TestRaceDeadlockChild);
}
TestRaceDeadlockChild::~TestRaceDeadlockChild() {
MOZ_COUNT_DTOR(TestRaceDeadlockChild);
}
mozilla::ipc::IPCResult TestRaceDeadlockParent::RecvStartRace() {
if (!CallWin()) {
fail("calling Win");
}
return IPC_OK();
}
mozilla::ipc::IPCResult TestRaceDeadlockChild::RecvStartRace() {
if (!SendStartRace()) {
fail("calling SendStartRace");
}
if (!CallLose()) {
fail("calling Lose");
}
return IPC_OK();
}
mozilla::ipc::IPCResult TestRaceDeadlockChild::AnswerWin() { return IPC_OK(); }
mozilla::ipc::IPCResult TestRaceDeadlockChild::AnswerRpc() { return IPC_OK(); }
RacyInterruptPolicy TestRaceDeadlockChild::MediateInterruptRace(
const MessageInfo& parent, const MessageInfo& child) {
return MediateRace(parent, child);
}
} // namespace _ipdltest
} // namespace mozilla
|