interface I { in void e(); behaviour { on e: {} } } interface II { in void e(); in void f(); out void cb(); behaviour { bool busy = false; [!busy] on e: busy = true; [busy] { on e: illegal; on inevitable: { cb; busy = false; } } on f: {} } } component DirectAndDeferredReply { provides I p; requires II r; behaviour { bool busy = false; bool direct = false; [!busy] { on p.e(): blocking if (direct) { r.f(); p.reply(); direct = !direct; } else { r.e(); busy = true; direct = !direct; } on r.cb: illegal; } [busy] { on p.e(): illegal; on r.cb(): { p.reply(); busy = false; } } } }