sg = dequeue(&c->sendq, c);
if(sg != nil) {
c->elemalg->copy(c->elemsize, ep, sg->elem);
+ c->elemalg->copy(c->elemsize, sg->elem, nil);
gp = sg->g;
gp->param = sg;
goto loop;
c->elemalg->copy(c->elemsize, ep, sg->elem);
+ c->elemalg->copy(c->elemsize, sg->elem, nil);
freesg(c, sg);
unlock(c);
return;
goto asynch;
}
c->elemalg->copy(c->elemsize, ep, c->recvdataq->elem);
+ c->elemalg->copy(c->elemsize, c->recvdataq->elem, nil);
c->recvdataq = c->recvdataq->link;
c->qcount--;
sg = dequeue(&c->sendq, c);
sel, c, cas, cas->send, o);
if(!cas->send) {
- if(cas->u.elemp != nil)
+ if(cas->u.elemp != nil) {
c->elemalg->copy(c->elemsize, cas->u.elemp, sg->elem);
+ c->elemalg->copy(c->elemsize, sg->elem, nil);
+ }
}
freesg(c, sg);
asyncrecv:
// can receive from buffer
- if(cas->u.elemp != nil)
+ if(cas->u.elemp != nil) {
c->elemalg->copy(c->elemsize, cas->u.elemp, c->recvdataq->elem);
+ c->elemalg->copy(c->elemsize, c->recvdataq->elem, nil);
+ }
c->recvdataq = c->recvdataq->link;
c->qcount--;
sg = dequeue(&c->sendq, c);
// can receive from sleeping sender (sg)
if(debug)
printf("syncrecv: sel=%p c=%p o=%d\n", sel, c, o);
- if(cas->u.elemp != nil)
+ if(cas->u.elemp != nil) {
c->elemalg->copy(c->elemsize, cas->u.elemp, sg->elem);
+ c->elemalg->copy(c->elemsize, sg->elem, nil);
+ }
gp = sg->g;
gp->param = sg;
ready(gp);