I'm a little confused here about whether the receiver `onStart` is supposed to block forever or if it's supposed to exit int he normal case. It would be good to add documentation to make it clear whether this represents an error case or a normal case.

Also, instead of busy waiting why not sleep on a condition varaible here?