plugins/elements/gsttypefindelement.c: Clean up on FLUSH_STOP and not FLUSH_START...
authorSebastian Dröge <slomo@circular-chaos.org>
Tue, 13 May 2008 12:38:31 +0000 (12:38 +0000)
committerSebastian Dröge <slomo@circular-chaos.org>
Tue, 13 May 2008 12:38:31 +0000 (12:38 +0000)
Original commit message from CVS:
* plugins/elements/gsttypefindelement.c:
(gst_type_find_element_handle_event),
(gst_type_find_element_send_cached_events),
(gst_type_find_element_change_state):
Clean up on FLUSH_STOP and not FLUSH_START. Forward both events
immediately.

ChangeLog
plugins/elements/gsttypefindelement.c

index 110bb1c..207ff83 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,6 +1,15 @@
 2008-05-13  Sebastian Dröge  <slomo@circular-chaos.org>
 
        * plugins/elements/gsttypefindelement.c:
+       (gst_type_find_element_handle_event),
+       (gst_type_find_element_send_cached_events),
+       (gst_type_find_element_change_state):
+       Clean up on FLUSH_STOP and not FLUSH_START. Forward both events
+       immediately.
+
+2008-05-13  Sebastian Dröge  <slomo@circular-chaos.org>
+
+       * plugins/elements/gsttypefindelement.c:
        (gst_type_find_handle_src_query), (stop_typefinding),
        (gst_type_find_element_handle_event),
        (gst_type_find_element_send_cached_events),
index d2e74e9..8b801ae 100644 (file)
@@ -517,23 +517,21 @@ gst_type_find_element_handle_event (GstPad * pad, GstEvent * event)
           res = gst_pad_event_default (pad, event);
           break;
         }
-        case GST_EVENT_FLUSH_START:
-          GST_OBJECT_LOCK (typefind);
+        case GST_EVENT_FLUSH_STOP:
           g_list_foreach (typefind->cached_events,
               (GFunc) gst_mini_object_unref, NULL);
           g_list_free (typefind->cached_events);
           typefind->cached_events = NULL;
-          GST_OBJECT_UNLOCK (typefind);
           gst_buffer_replace (&typefind->store, NULL);
+          /* fall through */
+        case GST_EVENT_FLUSH_START:
           res = gst_pad_event_default (pad, event);
           break;
         default:
           GST_DEBUG_OBJECT (typefind, "Saving %s event to send later",
               GST_EVENT_TYPE_NAME (event));
-          GST_OBJECT_LOCK (typefind);
           typefind->cached_events =
               g_list_append (typefind->cached_events, event);
-          GST_OBJECT_UNLOCK (typefind);
           res = TRUE;
           break;
       }
@@ -554,7 +552,6 @@ gst_type_find_element_send_cached_events (GstTypeFindElement * typefind)
 {
   GList *l;
 
-  GST_OBJECT_LOCK (typefind);
   for (l = typefind->cached_events; l != NULL; l = l->next) {
     GstEvent *event = GST_EVENT (l->data);
 
@@ -564,7 +561,6 @@ gst_type_find_element_send_cached_events (GstTypeFindElement * typefind)
   }
   g_list_free (typefind->cached_events);
   typefind->cached_events = NULL;
-  GST_OBJECT_UNLOCK (typefind);
 }
 
 static gboolean
@@ -839,12 +835,10 @@ gst_type_find_element_change_state (GstElement * element,
     case GST_STATE_CHANGE_READY_TO_NULL:
       gst_caps_replace (&typefind->caps, NULL);
 
-      GST_OBJECT_LOCK (typefind);
       g_list_foreach (typefind->cached_events,
           (GFunc) gst_mini_object_unref, NULL);
       g_list_free (typefind->cached_events);
       typefind->cached_events = NULL;
-      GST_OBJECT_UNLOCK (typefind);
       break;
     default:
       break;