Fix race condition in freeing buffers
authorVincent Penquerc'h <vincent.penquerch@collabora.co.uk>
Wed, 19 Sep 2012 11:28:01 +0000 (11:28 +0000)
committerVincent Penquerc'h <vincent.penquerch@collabora.co.uk>
Wed, 19 Sep 2012 12:27:53 +0000 (12:27 +0000)
commit47fa55deb23612f2bb6afac3440f0fc9a534503d
treefc3ff535b01b8bf5a360b287ed919b16374932f5
parent9f3627a207b062654b21d67861eb4f3d681d75e2
Fix race condition in freeing buffers

Disabling a port can happen while one or more buffers are in
OMX waiting to be filled. We cannot free buffers then, as this
will cause OMX to assert when the buffer gets filled.
Marking those buffers to be freed as they are returned from OMX
does not work either, as OMX deadlocks if I try to free the
buffers from the FillBufferDone callback.
So we end up keeping track of the number of buffers currently
in OMX, and wait for all to be released before freeing them.

This fixes an occasional, but fairly frequent, crash on exit.
omx/gstomx_port.c
omx/gstomx_port.h