diff --git a/sys/src/9/ip/devip.c b/sys/src/9/ip/devip.c index 93a8514b4..74c83ea6d 100644 --- a/sys/src/9/ip/devip.c +++ b/sys/src/9/ip/devip.c @@ -1286,20 +1286,32 @@ retry: c = malloc(sizeof(Conv)); if(c == nil) error(Enomem); - qlock(c); + if(waserror()){ + qfree(c->rq); + qfree(c->wq); + qfree(c->eq); + qfree(c->sq); + free(c->ptcl); + free(c); + nexterror(); + } c->p = p; c->x = pp - p->conv; if(p->ptclsize != 0){ c->ptcl = malloc(p->ptclsize); - if(c->ptcl == nil) { - free(c); + if(c->ptcl == nil) error(Enomem); - } } + c->eq = qopen(1024, Qmsg, 0, 0); + if(c->eq == nil) + error(Enomem); + (*p->create)(c); + if(c->rq == nil || c->wq == nil) + error(Enomem); + poperror(); + qlock(c); *pp = c; p->ac++; - c->eq = qopen(1024, Qmsg, 0, 0); - (*p->create)(c); break; } if(canqlock(c)){ diff --git a/sys/src/9/ip/ipifc.c b/sys/src/9/ip/ipifc.c index cbc349b01..ffb1ad225 100644 --- a/sys/src/9/ip/ipifc.c +++ b/sys/src/9/ip/ipifc.c @@ -316,8 +316,10 @@ ipifccreate(Conv *c) Ipifc *ifc; c->rq = qopen(QMAX, 0, 0, 0); - c->sq = qopen(QMAX, 0, 0, 0); c->wq = qopen(QMAX, Qkick, ipifckick, c); + c->sq = qopen(QMAX, 0, 0, 0); + if(c->rq == nil || c->wq == nil || c->sq == nil) + error(Enomem); ifc = (Ipifc*)c->ptcl; ifc->conv = c; ifc->unbinding = 0; diff --git a/sys/src/9/ip/netlog.c b/sys/src/9/ip/netlog.c index 19f13f408..f07c3b961 100644 --- a/sys/src/9/ip/netlog.c +++ b/sys/src/9/ip/netlog.c @@ -85,8 +85,11 @@ netlogopen(Fs *f) nexterror(); } if(f->alog->opens == 0){ - if(f->alog->buf == nil) + if(f->alog->buf == nil){ f->alog->buf = malloc(Nlog); + if(f->alog->buf == nil) + error(Enomem); + } f->alog->rptr = f->alog->buf; f->alog->end = f->alog->buf + Nlog; }