gst_parse_launch may return not NULL even when error is set. This can lead to data loss when playing or recording audio. --- gtk/spice-gstaudio.c | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/gtk/spice-gstaudio.c b/gtk/spice-gstaudio.c index 5f9abb2..d6cc774 100644 --- a/gtk/spice-gstaudio.c +++ b/gtk/spice-gstaudio.c @@ -245,7 +245,7 @@ static void record_start(SpiceRecordChannel *channel, gint format, gint channels "appsink caps=\"%s\" name=appsink", audio_caps); p->record.pipe = gst_parse_launch(pipeline, &error); - if (p->record.pipe == NULL) { + if (error != NULL) { g_warning("Failed to create pipeline: %s", error->message); goto lerr; } @@ -269,6 +269,10 @@ static void record_start(SpiceRecordChannel *channel, gint format, gint channels #endif lerr: + if (error != NULL && p->record.pipe != NULL) { + gst_object_unref(p->record.pipe); + p->record.pipe = NULL; + } g_clear_error(&error); g_free(audio_caps); g_free(pipeline); @@ -345,7 +349,7 @@ static void playback_start(SpicePlaybackChannel *channel, gint format, gint chan "audioconvert ! audioresample ! autoaudiosink name=\"audiosink\"", audio_caps); SPICE_DEBUG("audio pipeline: %s", pipeline); p->playback.pipe = gst_parse_launch(pipeline, &error); - if (p->playback.pipe == NULL) { + if (error != NULL) { g_warning("Failed to create pipeline: %s", error->message); goto lerr; } @@ -355,6 +359,10 @@ static void playback_start(SpicePlaybackChannel *channel, gint format, gint chan p->playback.channels = channels; lerr: + if (error != NULL && p->playback.pipe != NULL) { + gst_object_unref(p->playback.pipe); + p->playback.pipe = NULL; + } g_clear_error(&error); g_free(audio_caps); g_free(pipeline); -- 2.1.0 _______________________________________________ Spice-devel mailing list Spice-devel@xxxxxxxxxxxxxxxxxxxxx http://lists.freedesktop.org/mailman/listinfo/spice-devel