Skip to content

deviceprovider: fix counting number of times started

Daniel Drake requested to merge dsd1/gstreamer:master into master

GstDeviceProvider has a started_count private variable counter, and the gst_device_provider_start() documentation emphasizes the importance of balancing the start and stop calls.

However, when starting a provider that is already started, the current code will never increment the counter more than once.

So you start it twice, but it will have start_count 1, which is the maximum value it will ever see.

Then when you stop it twice, on the 2nd stop, after decrementing the counter in gst_device_provider_stop():

  else if (provider->priv->started_count < 1) {
    g_critical
        ("Trying to stop a GstDeviceProvider %s which is already stopped",
        GST_OBJECT_NAME (provider));

and the program is killed.

Fix this by incrementing the counter when starting a device provider that was already started.

Edited by Daniel Drake

Merge request reports