diff options
| -rw-r--r-- | sound/core/rawmidi.c | 22 |
1 files changed, 12 insertions, 10 deletions
diff --git a/sound/core/rawmidi.c b/sound/core/rawmidi.c index c0adc14c91f0..3071e6f5801e 100644 --- a/sound/core/rawmidi.c +++ b/sound/core/rawmidi.c | |||
| @@ -266,17 +266,19 @@ static int open_substream(struct snd_rawmidi *rmidi, | |||
| 266 | { | 266 | { |
| 267 | int err; | 267 | int err; |
| 268 | 268 | ||
| 269 | err = snd_rawmidi_runtime_create(substream); | 269 | if (substream->use_count == 0) { |
| 270 | if (err < 0) | 270 | err = snd_rawmidi_runtime_create(substream); |
| 271 | return err; | 271 | if (err < 0) |
| 272 | err = substream->ops->open(substream); | 272 | return err; |
| 273 | if (err < 0) | 273 | err = substream->ops->open(substream); |
| 274 | return err; | 274 | if (err < 0) |
| 275 | substream->opened = 1; | 275 | return err; |
| 276 | if (substream->use_count++ == 0) | 276 | substream->opened = 1; |
| 277 | substream->active_sensing = 0; | 277 | substream->active_sensing = 0; |
| 278 | if (mode & SNDRV_RAWMIDI_LFLG_APPEND) | 278 | if (mode & SNDRV_RAWMIDI_LFLG_APPEND) |
| 279 | substream->append = 1; | 279 | substream->append = 1; |
| 280 | } | ||
| 281 | substream->use_count++; | ||
| 280 | rmidi->streams[substream->stream].substream_opened++; | 282 | rmidi->streams[substream->stream].substream_opened++; |
| 281 | return 0; | 283 | return 0; |
| 282 | } | 284 | } |
