diff options
author | Sebastian Dröge <slomo@circular-chaos.org> | 2013-07-01 13:37:00 +0400 |
---|---|---|
committer | Sebastian Dröge <slomo@circular-chaos.org> | 2013-07-01 13:37:00 +0400 |
commit | 5f6469fe2ae0705f593a59ed7b7805e4a1af1bc2 (patch) | |
tree | 6a959ce6cc0409a2a4cc413a8a145620ff86f0b0 /gst/interleave | |
parent | 75b5a54f172970ac5cf9a7ee43eb350120e906ab (diff) |
deinterleave: Don't hold object lock while sending events downstream
Based on a patch by Kishore Arepalli <kishore.arepalli@gmail.com>
https://bugzilla.gnome.org/show_bug.cgi?id=703114
Diffstat (limited to 'gst/interleave')
-rw-r--r-- | gst/interleave/deinterleave.c | 23 |
1 files changed, 11 insertions, 12 deletions
diff --git a/gst/interleave/deinterleave.c b/gst/interleave/deinterleave.c index 83a05f225..507423122 100644 --- a/gst/interleave/deinterleave.c +++ b/gst/interleave/deinterleave.c @@ -685,29 +685,28 @@ gst_deinterleave_process (GstDeinterleave * self, GstBuffer * buf) GstBuffer **buffers_out = g_new0 (GstBuffer *, channels); guint8 *in, *out; GstMapInfo read_info; - - gst_buffer_map (buf, &read_info, GST_MAP_READ); + GList *pending_events, *l; /* Send any pending events to all src pads */ GST_OBJECT_LOCK (self); - if (self->pending_events) { - GList *events; + pending_events = self->pending_events; + self->pending_events = NULL; + GST_OBJECT_UNLOCK (self); + + if (pending_events) { GstEvent *event; GST_DEBUG_OBJECT (self, "Sending pending events to all src pads"); - - for (events = self->pending_events; events != NULL; events = events->next) { - event = GST_EVENT (events->data); - + for (l = pending_events; l; l = l->next) { + event = l->data; for (srcs = self->srcpads; srcs != NULL; srcs = srcs->next) gst_pad_push_event (GST_PAD (srcs->data), gst_event_ref (event)); gst_event_unref (event); } - - g_list_free (self->pending_events); - self->pending_events = NULL; + g_list_free (pending_events); } - GST_OBJECT_UNLOCK (self); + + gst_buffer_map (buf, &read_info, GST_MAP_READ); /* Allocate buffers */ for (srcs = self->srcpads, i = 0; srcs; srcs = srcs->next, i++) { |