minor polishing of usbd
This commit is contained in:
parent
85e6765688
commit
61d322679b
1 changed files with 11 additions and 8 deletions
|
@ -26,7 +26,10 @@ struct Event {
|
||||||
char *data;
|
char *data;
|
||||||
int len;
|
int len;
|
||||||
Event *link;
|
Event *link;
|
||||||
int ref, prev;
|
int ref; /* number of readers which will read this one
|
||||||
|
the next time they'll read */
|
||||||
|
int prev; /* number of events pointing to this one with
|
||||||
|
their link pointers */
|
||||||
};
|
};
|
||||||
|
|
||||||
static Event *evlast;
|
static Event *evlast;
|
||||||
|
@ -59,7 +62,7 @@ fulfill(Req *req, Event *e)
|
||||||
static void
|
static void
|
||||||
initevent(void)
|
initevent(void)
|
||||||
{
|
{
|
||||||
evlast = mallocz(sizeof(Event), 1);
|
evlast = emallocz(sizeof(Event), 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
|
@ -95,8 +98,6 @@ pushevent(char *data)
|
||||||
qlock(&evlock);
|
qlock(&evlock);
|
||||||
e = evlast;
|
e = evlast;
|
||||||
ee = emallocz(sizeof(Event), 1);
|
ee = emallocz(sizeof(Event), 1);
|
||||||
if(ee == nil)
|
|
||||||
sysfatal("malloc: %r");
|
|
||||||
evlast = ee;
|
evlast = ee;
|
||||||
e->data = data;
|
e->data = data;
|
||||||
e->len = strlen(data);
|
e->len = strlen(data);
|
||||||
|
@ -180,6 +181,10 @@ usbdread(Req *req)
|
||||||
respond(req, nil);
|
respond(req, nil);
|
||||||
break;
|
break;
|
||||||
case Qusbevent:
|
case Qusbevent:
|
||||||
|
if(req->fid->aux == nil){
|
||||||
|
respond(req, "the front fell off");
|
||||||
|
return;
|
||||||
|
}
|
||||||
readevent(req);
|
readevent(req);
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
|
@ -219,9 +224,7 @@ enumerate(Event **l)
|
||||||
for(p = h->port; p < h->port + h->nport; p++){
|
for(p = h->port; p < h->port + h->nport; p++){
|
||||||
if(p->dev == nil || p->dev->usb == nil || p->hub != nil)
|
if(p->dev == nil || p->dev->usb == nil || p->hub != nil)
|
||||||
continue;
|
continue;
|
||||||
e = mallocz(sizeof(Event), 1);
|
e = emallocz(sizeof(Event), 1);
|
||||||
if(e == nil)
|
|
||||||
sysfatal("malloc: %r");
|
|
||||||
e->data = formatdev(p->dev);
|
e->data = formatdev(p->dev);
|
||||||
e->len = strlen(e->data);
|
e->len = strlen(e->data);
|
||||||
e->prev = 1;
|
e->prev = 1;
|
||||||
|
@ -251,7 +254,7 @@ usbddestroyfid(Fid *fid)
|
||||||
{
|
{
|
||||||
Event *e, *ee;
|
Event *e, *ee;
|
||||||
|
|
||||||
if(fid->qid.path == Qusbevent){
|
if(fid->qid.path == Qusbevent && fid->aux != nil){
|
||||||
qlock(&evlock);
|
qlock(&evlock);
|
||||||
e = fid->aux;
|
e = fid->aux;
|
||||||
if(--e->ref == 0 && e->prev == 0){
|
if(--e->ref == 0 && e->prev == 0){
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue