From 8b24905d2cf5de0e221cfaa977121e50e2bf14b5 Mon Sep 17 00:00:00 2001 From: Alexandre Ratchov Date: Thu, 23 Nov 2017 07:13:49 +0100 Subject: [PATCH] sndiod: fix slot leak when device mode doesn't match slot mode --- sndiod/dev.c | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/sndiod/dev.c b/sndiod/dev.c index c448281..6a4cff8 100644 --- a/sndiod/dev.c +++ b/sndiod/dev.c @@ -1515,19 +1515,19 @@ slot_new(struct dev *d, char *who, struct slotops *ops, void *arg, int mode) found: if (!dev_ref(d)) return NULL; + if ((mode & d->mode) != mode) { + if (log_level >= 1) { + slot_log(s); + log_puts(": requested mode not supported\n"); + } + dev_unref(d); + return 0; + } s->dev = d; s->ops = ops; s->arg = arg; s->pstate = SLOT_INIT; s->tstate = MMC_OFF; - - if ((mode & s->dev->mode) != mode) { - if (log_level >= 1) { - slot_log(s); - log_puts(": requested mode not supported\n"); - } - return 0; - } s->mode = mode; aparams_init(&s->par); if (s->mode & MODE_PLAY) {