The behaviour of the ping example is indeterministic. Sometimes the ping will succeed on the first attempt, while some other times it will take an extended amount of time (>5-10s not being rare).
This happens because both ping_server and ping_client call continue after failing to receive a message from both sampling channels.
This in turn causes them to keep trying to receive messages continuously, which is likely to cause them being frozen by the hypervisor in some invalid state.
This indeterministic behaviour is prevented by this PR, by making both periodic processes wait for the next major frame after failing to receive a message.
The behaviour of the ping example is indeterministic. Sometimes the ping will succeed on the first attempt, while some other times it will take an extended amount of time (>5-10s not being rare).
This happens because both
ping_server
andping_client
callcontinue
after failing to receive a message from both sampling channels. This in turn causes them to keep trying to receive messages continuously, which is likely to cause them being frozen by the hypervisor in some invalid state.This indeterministic behaviour is prevented by this PR, by making both periodic processes wait for the next major frame after failing to receive a message.