|
@@ -148,6 +148,8 @@ static int snd_rawmidi_runtime_free(struct snd_rawmidi_substream *substream)
|
|
|
|
|
|
static inline void snd_rawmidi_output_trigger(struct snd_rawmidi_substream *substream,int up)
|
|
|
{
|
|
|
+ if (!substream->opened)
|
|
|
+ return;
|
|
|
if (up) {
|
|
|
tasklet_hi_schedule(&substream->runtime->tasklet);
|
|
|
} else {
|
|
@@ -158,6 +160,8 @@ static inline void snd_rawmidi_output_trigger(struct snd_rawmidi_substream *subs
|
|
|
|
|
|
static void snd_rawmidi_input_trigger(struct snd_rawmidi_substream *substream, int up)
|
|
|
{
|
|
|
+ if (!substream->opened)
|
|
|
+ return;
|
|
|
substream->ops->trigger(substream, up);
|
|
|
if (!up && substream->runtime->event)
|
|
|
tasklet_kill(&substream->runtime->tasklet);
|
|
@@ -857,6 +861,8 @@ int snd_rawmidi_receive(struct snd_rawmidi_substream *substream,
|
|
|
int result = 0, count1;
|
|
|
struct snd_rawmidi_runtime *runtime = substream->runtime;
|
|
|
|
|
|
+ if (!substream->opened)
|
|
|
+ return -EBADFD;
|
|
|
if (runtime->buffer == NULL) {
|
|
|
snd_printd("snd_rawmidi_receive: input is not active!!!\n");
|
|
|
return -EINVAL;
|
|
@@ -1126,6 +1132,8 @@ int snd_rawmidi_transmit_ack(struct snd_rawmidi_substream *substream, int count)
|
|
|
int snd_rawmidi_transmit(struct snd_rawmidi_substream *substream,
|
|
|
unsigned char *buffer, int count)
|
|
|
{
|
|
|
+ if (!substream->opened)
|
|
|
+ return -EBADFD;
|
|
|
count = snd_rawmidi_transmit_peek(substream, buffer, count);
|
|
|
if (count < 0)
|
|
|
return count;
|