inputselector: Deactivate and remove pad without the inputselector lock
authorSebastian Dröge <slomo@circular-chaos.org>
Fri, 12 Jul 2013 08:08:26 +0000 (10:08 +0200)
committerSebastian Dröge <slomo@circular-chaos.org>
Fri, 12 Jul 2013 08:08:26 +0000 (10:08 +0200)
Otherwise we might get deadlocks caused by lock order inversion:
During the chain function the stream lock is first locked and then the
inputselector lock. During pad release we first locked the inputselector
lock and then deactivating the pad would lock the stream lock.

There's no reason why the inputselector lock should be required while
deactivating and removing the pad, it's only needed before.

https://bugzilla.gnome.org/show_bug.cgi?id=704002

plugins/elements/gstinputselector.c

index 6fcda93..6c1952c 100644 (file)
@@ -1699,10 +1699,10 @@ gst_input_selector_release_pad (GstElement * element, GstPad * pad)
     sel->active_sinkpad = NULL;
   }
   sel->n_pads--;
+  GST_INPUT_SELECTOR_UNLOCK (sel);
 
   gst_pad_set_active (pad, FALSE);
   gst_element_remove_pad (GST_ELEMENT (sel), pad);
-  GST_INPUT_SELECTOR_UNLOCK (sel);
 }
 
 static void