diff --git a/gst/autoplug/gstautoplugcache.c b/gst/autoplug/gstautoplugcache.c index adaf02f79e..1c18dabf56 100644 --- a/gst/autoplug/gstautoplugcache.c +++ b/gst/autoplug/gstautoplugcache.c @@ -234,9 +234,8 @@ gst_autoplugcache_loop (GstElement *element) gst_object_ref (GST_OBJECT (cache)); g_signal_emit (G_OBJECT(cache), gst_autoplugcache_signals[CACHE_EMPTY], 0, NULL); if (GST_STATE(cache) != oldstate) { - gst_object_ref (GST_OBJECT (cache)); + gst_object_unref (GST_OBJECT (cache)); GST_DEBUG(GST_CAT_AUTOPLUG, "state changed during signal, aborting"); - gst_element_yield (GST_ELEMENT (cache)); return; } gst_object_unref (GST_OBJECT (cache)); diff --git a/gst/autoplug/gstspideridentity.c b/gst/autoplug/gstspideridentity.c index ca306ac1d1..a250d82f62 100644 --- a/gst/autoplug/gstspideridentity.c +++ b/gst/autoplug/gstspideridentity.c @@ -400,6 +400,8 @@ gst_spider_identity_src_loop (GstSpiderIdentity *ident) gst_spider_identity_dumb_loop (ident); return; } + + gst_element_interrupt (GST_ELEMENT (ident)); } /* This loop function is only needed when typefinding. */ diff --git a/gst/schedulers/gstoptimalscheduler.c b/gst/schedulers/gstoptimalscheduler.c index 4a7ddc54bc..935ea608f0 100644 --- a/gst/schedulers/gstoptimalscheduler.c +++ b/gst/schedulers/gstoptimalscheduler.c @@ -1590,8 +1590,8 @@ gst_opt_scheduler_iterate (GstScheduler *sched) scheduled = TRUE; } - /* don't schedule any more chains when interrupted or in error */ - if (osched->state != GST_OPT_SCHEDULER_STATE_RUNNING) + /* don't schedule any more chains when in error */ + if (osched->state == GST_OPT_SCHEDULER_STATE_ERROR) break; }