Skip to content

Commit

Permalink
sound: rawmidi: fix opened substreams count
Browse files Browse the repository at this point in the history
The substream_opened field is to count the number of opened substreams,
not the number of times that any substreams have been opened.

Furthermore, all substreams being opened does not imply that the next
open would fail, due to the possibility of O_APPEND.  With this wrong
check, opening a substream multiple times would succeed only if the
device had more unopened substreams.

Signed-off-by: Clemens Ladisch <clemens@ladisch.de>
Signed-off-by: Takashi Iwai <tiwai@suse.de>
  • Loading branch information
Clemens Ladisch authored and Takashi Iwai committed Nov 10, 2009
1 parent 3f225c0 commit 91d12c4
Showing 1 changed file with 2 additions and 4 deletions.
6 changes: 2 additions & 4 deletions sound/core/rawmidi.c
Original file line number Diff line number Diff line change
Expand Up @@ -242,8 +242,6 @@ static int assign_substream(struct snd_rawmidi *rmidi, int subdevice,
return -ENXIO;
if (subdevice >= 0 && subdevice >= s->substream_count)
return -ENODEV;
if (s->substream_opened >= s->substream_count)
return -EAGAIN;

list_for_each_entry(substream, &s->substreams, list) {
if (substream->opened) {
Expand Down Expand Up @@ -280,9 +278,9 @@ static int open_substream(struct snd_rawmidi *rmidi,
substream->active_sensing = 0;
if (mode & SNDRV_RAWMIDI_LFLG_APPEND)
substream->append = 1;
rmidi->streams[substream->stream].substream_opened++;
}
substream->use_count++;
rmidi->streams[substream->stream].substream_opened++;
return 0;
}

Expand Down Expand Up @@ -466,7 +464,6 @@ static void close_substream(struct snd_rawmidi *rmidi,
struct snd_rawmidi_substream *substream,
int cleanup)
{
rmidi->streams[substream->stream].substream_opened--;
if (--substream->use_count)
return;

Expand All @@ -491,6 +488,7 @@ static void close_substream(struct snd_rawmidi *rmidi,
snd_rawmidi_runtime_free(substream);
substream->opened = 0;
substream->append = 0;
rmidi->streams[substream->stream].substream_opened--;
}

static void rawmidi_release_priv(struct snd_rawmidi_file *rfile)
Expand Down

0 comments on commit 91d12c4

Please sign in to comment.