aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--sound/core/rawmidi.c22
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}