Not sure if we want to signal a failure here - a failure here is not terminal as we're specifically waiting less than the number of frames, which isn't really a problem.  At worst we return 0 here.

IMO the INT_MAX should only be done in the !m_started branch.

Another thing is how will spurious wakeups come into it?  Are they uncommon enough that we don't need to worry about it?  At worse, what happens when we return INT_MAX: Is the sink reinit'd ?