On Mon, 2012-08-06 at 11:29 +0200, David Henningsson wrote: > Just a thing I spotted while reading it through quickly: > > > +static void subtract_helper(size_t *p, size_t amount) > > +{ > > + if (*p == (size_t) -1) > > + return; > > + if (*p < amount) > > + *p = 0; > > + *p -= amount; > > +} > > Maybe you meant: > > if (*p < amount) > *p = 0; > else > *p -= amount; > > Otherwise *p might end up being "-amount" instead of "0"? Yes. After this change, the use of underrun_for in sink_input_pop_cb() may also need to be changed to make sure the PLAYBACK_STREAM_MESSAGE_STARTED is sent even if underrun_for goes back to 0 due to a rewind (if we already told the client that playback was stopped). I wonder if there is any reason why that test uses underrun_for instead of s->is_underrun. Only because the is_underrun field was added after that test and the code was not made consistent later?