diff options
author | aiju <aiju@phicode.de> | 2011-07-29 10:24:18 +0200 |
---|---|---|
committer | aiju <aiju@phicode.de> | 2011-07-29 10:24:18 +0200 |
commit | 61d322679b65aedb569af6f4e90764c106eca9ef (patch) | |
tree | aede1d513cf620b6a52f7ef8ffcbd063655d8f69 /sys/src/cmd/nusb/usbd | |
parent | 85e676568892d4a5639b0f9dc8b8c8b08e79c804 (diff) |
minor polishing of usbd
Diffstat (limited to 'sys/src/cmd/nusb/usbd')
-rw-r--r-- | sys/src/cmd/nusb/usbd/usbd.c | 19 |
1 files changed, 11 insertions, 8 deletions
diff --git a/sys/src/cmd/nusb/usbd/usbd.c b/sys/src/cmd/nusb/usbd/usbd.c index 297cd3db9..1217bcdf5 100644 --- a/sys/src/cmd/nusb/usbd/usbd.c +++ b/sys/src/cmd/nusb/usbd/usbd.c @@ -26,7 +26,10 @@ struct Event { char *data; int len; 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; @@ -59,7 +62,7 @@ fulfill(Req *req, Event *e) static void initevent(void) { - evlast = mallocz(sizeof(Event), 1); + evlast = emallocz(sizeof(Event), 1); } static void @@ -95,8 +98,6 @@ pushevent(char *data) qlock(&evlock); e = evlast; ee = emallocz(sizeof(Event), 1); - if(ee == nil) - sysfatal("malloc: %r"); evlast = ee; e->data = data; e->len = strlen(data); @@ -180,6 +181,10 @@ usbdread(Req *req) respond(req, nil); break; case Qusbevent: + if(req->fid->aux == nil){ + respond(req, "the front fell off"); + return; + } readevent(req); break; default: @@ -219,9 +224,7 @@ enumerate(Event **l) for(p = h->port; p < h->port + h->nport; p++){ if(p->dev == nil || p->dev->usb == nil || p->hub != nil) continue; - e = mallocz(sizeof(Event), 1); - if(e == nil) - sysfatal("malloc: %r"); + e = emallocz(sizeof(Event), 1); e->data = formatdev(p->dev); e->len = strlen(e->data); e->prev = 1; @@ -251,7 +254,7 @@ usbddestroyfid(Fid *fid) { Event *e, *ee; - if(fid->qid.path == Qusbevent){ + if(fid->qid.path == Qusbevent && fid->aux != nil){ qlock(&evlock); e = fid->aux; if(--e->ref == 0 && e->prev == 0){ |