pulsesrc: additional error condition checking
authorMark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
Fri, 20 Jan 2012 15:47:36 +0000 (16:47 +0100)
committerMark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
Fri, 20 Jan 2012 16:10:17 +0000 (17:10 +0100)
ext/pulse/pulsesrc.c

index 98f7f0c..12e5282 100644 (file)
@@ -1677,10 +1677,13 @@ gst_pulsesrc_change_state (GstElement * element, GstStateChange transition)
 
   switch (transition) {
     case GST_STATE_CHANGE_NULL_TO_READY:
-      this->mainloop = pa_threaded_mainloop_new ();
-      g_assert (this->mainloop);
-
-      pa_threaded_mainloop_start (this->mainloop);
+      if (!(this->mainloop = pa_threaded_mainloop_new ()))
+        goto mainloop_failed;
+      if (pa_threaded_mainloop_start (this->mainloop) < 0) {
+        pa_threaded_mainloop_free (this->mainloop);
+        this->mainloop = NULL;
+        goto mainloop_start_failed;
+      }
 
       if (!this->mixer)
         this->mixer =
@@ -1730,4 +1733,18 @@ gst_pulsesrc_change_state (GstElement * element, GstStateChange transition)
   }
 
   return ret;
+
+  /* ERRORS */
+mainloop_failed:
+  {
+    GST_ELEMENT_ERROR (this, RESOURCE, FAILED,
+        ("pa_threaded_mainloop_new() failed"), (NULL));
+    return GST_STATE_CHANGE_FAILURE;
+  }
+mainloop_start_failed:
+  {
+    GST_ELEMENT_ERROR (this, RESOURCE, FAILED,
+        ("pa_threaded_mainloop_start() failed"), (NULL));
+    return GST_STATE_CHANGE_FAILURE;
+  }
 }