omx: Set pAppPrivate of buffers to NULL when deallocating buffers
authorSebastian Dröge <sebastian.droege@collabora.co.uk>
Wed, 10 Aug 2011 06:53:05 +0000 (08:53 +0200)
committerSebastian Dröge <sebastian.droege@collabora.co.uk>
Wed, 10 Aug 2011 06:55:18 +0000 (08:55 +0200)
This prevents usage of freed memory later if the OMX component
has weird behaviour.

omx/gstomx.c

index 61e715e..8b6eea8 100644 (file)
@@ -312,8 +312,16 @@ EmptyBufferDone (OMX_HANDLETYPE hComponent, OMX_PTR pAppData,
     OMX_BUFFERHEADERTYPE * pBuffer)
 {
   GstOMXBuffer *buf = pBuffer->pAppPrivate;
-  GstOMXPort *port = buf->port;
-  GstOMXComponent *comp = port->comp;
+  GstOMXPort *port;
+  GstOMXComponent *comp;
+
+  if (buf == NULL) {
+    GST_ERROR ("Have unknown or deallocated buffer %p", pBuffer);
+    return OMX_ErrorNone;
+  }
+
+  port = buf->port;
+  comp = port->comp;
 
   g_assert (buf->omx_buf == pBuffer);
 
@@ -335,8 +343,16 @@ FillBufferDone (OMX_HANDLETYPE hComponent, OMX_PTR pAppData,
     OMX_BUFFERHEADERTYPE * pBuffer)
 {
   GstOMXBuffer *buf = pBuffer->pAppPrivate;
-  GstOMXPort *port = buf->port;
-  GstOMXComponent *comp = port->comp;
+  GstOMXPort *port;
+  GstOMXComponent *comp;
+
+  if (buf == NULL) {
+    GST_ERROR ("Have unknown or deallocated buffer %p", pBuffer);
+    return OMX_ErrorNone;
+  }
+
+  port = buf->port;
+  comp = port->comp;
 
   g_assert (buf->omx_buf == pBuffer);
 
@@ -1344,6 +1360,7 @@ gst_omx_port_deallocate_buffers_unlocked (GstOMXPort * port)
      */
     if (buf->omx_buf) {
       g_assert (buf == buf->omx_buf->pAppPrivate);
+      buf->omx_buf->pAppPrivate = NULL;
       tmp = OMX_FreeBuffer (comp->handle, port->index, buf->omx_buf);
       if (tmp != OMX_ErrorNone) {
         GST_ERROR_OBJECT (comp->parent,