deviceprovider: fix counting number of times started
authorDaniel Drake <drake@endlessm.com>
Mon, 14 Jan 2019 08:22:16 +0000 (16:22 +0800)
committerDaniel Drake <drake@endlessm.com>
Mon, 14 Jan 2019 08:26:44 +0000 (16:26 +0800)
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.

gst/gstdeviceprovider.c

index 22b5a9b..2e0b55d 100644 (file)
@@ -454,6 +454,7 @@ gst_device_provider_start (GstDeviceProvider * provider)
   g_mutex_lock (&provider->priv->start_lock);
 
   if (provider->priv->started_count > 0) {
+    provider->priv->started_count++;
     ret = TRUE;
     goto started;
   }