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