- if ((u = m->userdata)) {
- if (u->sink)
- pa_sink_free(u->sink);
-
- if (u->io_sources)
- pa_free_io_sources(c->mainloop, u->io_sources, u->n_io_sources);
-
- if (u->pcm_handle) {
- snd_pcm_drop(u->pcm_handle);
- snd_pcm_close(u->pcm_handle);
- }
-
- if (u->memchunk.memblock)
- pa_memblock_unref(u->memchunk.memblock);
- if (u->silence.memblock)
- pa_memblock_unref(u->silence.memblock);
-
- free(u);
+ if (!(u = m->userdata))
+ return;
+
+ if (u->sink) {
+ pa_sink_disconnect(u->sink);
+ pa_sink_unref(u->sink);