diff --git a/src/spice-gstaudio.c b/src/spice-gstaudio.c index d67727fbcf1af0faefe310128cf9a97563dba0dd..e2b06157f6966ac236ac38ab4e0e8327db092ddb 100644 --- a/src/spice-gstaudio.c +++ b/src/spice-gstaudio.c @@ -519,7 +519,11 @@ static gboolean connect_channel(SpiceAudio *audio, SpiceChannel *channel) SpiceGstaudioPrivate *p = gstaudio->priv; if (SPICE_IS_PLAYBACK_CHANNEL(channel)) { - g_return_val_if_fail(p->pchannel == NULL, FALSE); + if (p->pchannel) { + SPICE_DEBUG("replacing playback channel"); + g_object_weak_unref(G_OBJECT(p->pchannel), channel_weak_notified, audio); + playback_stop(gstaudio); + } p->pchannel = channel; g_object_weak_ref(G_OBJECT(p->pchannel), channel_weak_notified, audio); @@ -538,7 +542,11 @@ static gboolean connect_channel(SpiceAudio *audio, SpiceChannel *channel) } if (SPICE_IS_RECORD_CHANNEL(channel)) { - g_return_val_if_fail(p->rchannel == NULL, FALSE); + if (p->rchannel) { + SPICE_DEBUG("replacing record channel"); + g_object_weak_unref(G_OBJECT(p->rchannel), channel_weak_notified, audio); + record_stop(gstaudio); + } p->rchannel = channel; g_object_weak_ref(G_OBJECT(p->rchannel), channel_weak_notified, audio);