summaryrefslogtreecommitdiffstats
path: root/ipc/ipdl/test/cxx/PTestRaceDeferral.ipdl
diff options
context:
space:
mode:
Diffstat (limited to 'ipc/ipdl/test/cxx/PTestRaceDeferral.ipdl')
-rw-r--r--ipc/ipdl/test/cxx/PTestRaceDeferral.ipdl45
1 files changed, 45 insertions, 0 deletions
diff --git a/ipc/ipdl/test/cxx/PTestRaceDeferral.ipdl b/ipc/ipdl/test/cxx/PTestRaceDeferral.ipdl
new file mode 100644
index 000000000..ada6df4c6
--- /dev/null
+++ b/ipc/ipdl/test/cxx/PTestRaceDeferral.ipdl
@@ -0,0 +1,45 @@
+namespace mozilla {
+namespace _ipdltest {
+
+intr protocol PTestRaceDeferral {
+parent:
+ intr Lose();
+
+child:
+ async StartRace();
+ intr Win();
+ intr Rpc();
+ async __delete__();
+
+// Test that messages deferred due to race resolution are
+// re-considered when the winner makes later RPCs
+
+// IPDL's type system can't express this protocol because the race
+// resolution causes state to diverge for multiple steps, so we'll
+// leave it "stateless"
+/*
+state START:
+ send StartRace goto DEFER;
+state DEFER:
+ call Win goto PARENT;
+ answer Lose goto CHILD;
+
+state PARENT:
+ // 'Lose' is received here but deferred
+ call Rpc goto PARENT_LOSE;
+state PARENT_LOSE:
+ // Calling 'Rpc' undefers 'Lose', and it wins the "race" with 'Rpc'
+ answer Lose goto DONE;
+
+state CHILD:
+ call Win goto CHILD_RPC;
+state CHILD_RPC:
+ call Rpc goto DONE;
+
+state DONE:
+ send __delete__;
+*/
+};
+
+} // namespace _ipdltest
+} // namespace mozilla