Parcourir la source

[ALSA] usb-audio: properly lock hwptr_done accesses

USB generic driver
Take the substream lock when reading hwptr_done to avoid a race
condition with the updates in the URB callbacks.

Signed-off-by: Clemens Ladisch <clemens@ladisch.de>
Clemens Ladisch il y a 20 ans
Parent
commit
daa150ef7d
1 fichiers modifiés avec 8 ajouts et 2 suppressions
  1. 8 2
      sound/usb/usbaudio.c

+ 8 - 2
sound/usb/usbaudio.c

@@ -815,8 +815,14 @@ static int wait_clear_urbs(snd_usb_substream_t *subs)
  */
 static snd_pcm_uframes_t snd_usb_pcm_pointer(snd_pcm_substream_t *substream)
 {
-	snd_usb_substream_t *subs = (snd_usb_substream_t *)substream->runtime->private_data;
-	return subs->hwptr_done;
+	snd_usb_substream_t *subs;
+	snd_pcm_uframes_t hwptr_done;
+	
+	subs = (snd_usb_substream_t *)substream->runtime->private_data;
+	spin_lock(&subs->lock);
+	hwptr_done = subs->hwptr_done;
+	spin_unlock(&subs->lock);
+	return hwptr_done;
 }