ref: 244d2ee84b1367ee7eb60395f75a5cb9bc5616a6
parent: 5e37e6361c8294da8bc311e626cad3fe781e3e67
author: cinap_lenrek <cinap_lenrek@gmx.de>
date: Tue Aug 27 19:23:29 EDT 2013
devkbd: fix wrong refcount on open error only decrement refcount when file was successfully opend on clunk, fix refcount when devopen() errors.
--- a/sys/src/9/pc/devkbd.c
+++ b/sys/src/9/pc/devkbd.c
@@ -339,10 +339,15 @@
if(!iseve())
error(Eperm);
if(c->qid.path == Qscancode){- if(incref(&kbd.ref) != 1){+ if(waserror()){decref(&kbd.ref);
- error(Einuse);
+ nexterror();
}
+ if(incref(&kbd.ref) != 1)
+ error(Einuse);
+ c = devopen(c, omode, kbdtab, nelem(kbdtab), devgen);
+ poperror();
+ return c;
}
return devopen(c, omode, kbdtab, nelem(kbdtab), devgen);
}
@@ -350,7 +355,7 @@
static void
kbdclose(Chan *c)
{- if(c->qid.path == Qscancode)
+ if((c->flag & COPEN) && c->qid.path == Qscancode)
decref(&kbd.ref);
}
--
⑨