Browse Source

ALSA: x86: Stop the stream when buffer is processed after disconnection

This shouldn't happen, but just to be sure...

Signed-off-by: Takashi Iwai <tiwai@suse.de>
Takashi Iwai 8 years ago
parent
commit
be9a2e933e
1 changed files with 6 additions and 3 deletions
  1. 6 3
      sound/x86/intel_hdmi_audio.c

+ 6 - 3
sound/x86/intel_hdmi_audio.c

@@ -971,19 +971,22 @@ static void had_process_buffer_done(struct snd_intelhad *intelhaddata)
 {
 	struct snd_pcm_substream *substream;
 
-	if (!intelhaddata->connected)
-		return; /* disconnected? - bail out */
-
 	substream = had_substream_get(intelhaddata);
 	if (!substream)
 		return; /* no stream? - bail out */
 
+	if (!intelhaddata->connected) {
+		snd_pcm_stop_xrun(substream);
+		goto out; /* disconnected? - bail out */
+	}
+
 	/* process or stop the stream */
 	if (had_process_ringbuf(substream, intelhaddata) < 0)
 		snd_pcm_stop_xrun(substream);
 	else
 		snd_pcm_period_elapsed(substream);
 
+ out:
 	had_substream_put(intelhaddata);
 }