queue2: don't change global buffering state from within query handler
authorTim-Philipp Müller <tim@centricular.net>
Fri, 16 Aug 2013 15:28:12 +0000 (16:28 +0100)
committerTim-Philipp Müller <tim@centricular.net>
Fri, 16 Aug 2013 15:53:03 +0000 (16:53 +0100)
commitc02081ca30631824c116ef1057c1bd9054c70507
tree16307223fea241204c55c47675f2306a3c0db2c7
parentd7a98f98028cb3c800b1385852d53eafaf479bf6
queue2: don't change global buffering state from within query handler

When a buffering query is handled it uses the get_buffering_percent()
function to get some statitics. Unfortunately this function also
calculates whether the queue should be buffering and adapts the
global queue2 state in case of state transitions from/to buffering
(including whether a buffering message was posted on the bus!).

This means that there is a race which can cause buffering messages
to never posted if the global state changes happen as a result of aa
query instead of resulting from bytes flowing in/out.

Spotted by Sjoerd Simons.

Change to only query state in get_buffering_percent() and update
state only in update_buffering().

https://bugzilla.gnome.org/show_bug.cgi?id=705332
plugins/elements/gstqueue2.c