minor polishing of usbd

This commit is contained in:
aiju 2011-07-29 10:24:18 +02:00
parent 85e6765688
commit 61d322679b

View file

@ -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){