[alsa-devel] [bug report] ALSA: pcm: Return -EBUSY for OSS ioctls changing busy streams

Dan Carpenter dan.carpenter at oracle.com
Tue Mar 27 14:27:30 CEST 2018


Hello Takashi Iwai,

The patch 40cab6e88cb0: "ALSA: pcm: Return -EBUSY for OSS ioctls
changing busy streams" from Mar 23, 2018, leads to the following
static checker warning:

	sound/core/oss/pcm_oss.c:1741 snd_pcm_oss_set_rate()
	warn: inconsistent returns 'mutex:&runtime->oss.params_lock'.
	  Locked on:   line 1734
	  Unlocked on: line 1732
	               line 1741

sound/core/oss/pcm_oss.c
  1717  static int snd_pcm_oss_set_rate(struct snd_pcm_oss_file *pcm_oss_file, int rate)
  1718  {
  1719          int idx;
  1720  
  1721          for (idx = 1; idx >= 0; --idx) {
  1722                  struct snd_pcm_substream *substream = pcm_oss_file->streams[idx];
  1723                  struct snd_pcm_runtime *runtime;
  1724                  if (substream == NULL)
  1725                          continue;
  1726                  runtime = substream->runtime;
  1727                  if (rate < 1000)
  1728                          rate = 1000;
  1729                  else if (rate > 192000)
  1730                          rate = 192000;
  1731                  if (mutex_lock_interruptible(&runtime->oss.params_lock))
  1732                          return -ERESTARTSYS;
  1733                  if (atomic_read(&runtime->oss.rw_ref))
  1734                          return -EBUSY;
                                ^^^^^^^^^^^^^
Unlock before returning?

  1735                  if (runtime->oss.rate != rate) {
  1736                          runtime->oss.params = 1;
  1737                          runtime->oss.rate = rate;
  1738                  }
  1739                  mutex_unlock(&runtime->oss.params_lock);
  1740          }
  1741          return snd_pcm_oss_get_rate(pcm_oss_file);
  1742  }

regards,
dan carpenter


More information about the Alsa-devel mailing list