glvideomixer: fix race retrieving the GL context from the display
authorMatthew Waters <matthew@centricular.com>
Tue, 24 May 2016 13:39:27 +0000 (23:39 +1000)
committerMatthew Waters <matthew@centricular.com>
Wed, 25 May 2016 08:28:20 +0000 (18:28 +1000)
commit11bb4454a8ba60637fb224cdb944c58a0610f5d2
tree94fd64f2c6673dfe4359f9cedd4f96647850ec52
parent396932f412f01de86351d4f6deb1f0c9b2f84c68
glvideomixer: fix race retrieving the GL context from the display

_get_gl_context() can be called concurrently from either propose_allocation() or
decide_allocation().  If it so happens that this happens at the same time,
the check for whether we already had a GL context was outside the lock.  Inside
the lock and loop, the first thing that happens is that we unref the current GL
context (if valid) as if there was a conflict adding it to the display.  If the
timing was unlucky, subsequent use of the GL context would be referencing an
already unreffed GL context object resulting in a critical:

g_object_ref: assertion 'object->ref_count > 0' failed

https://bugzilla.gnome.org/show_bug.cgi?id=766703
ext/gl/gstglbasemixer.c