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 | } |