mirror of
https://github.com/golang/go
synced 2024-11-18 15:54:42 -07:00
change channel read to clear
data just read from the channel. this will make it easier to recognize when to garbage collect and finalize. R=rsc CC=golang-dev https://golang.org/cl/882043
This commit is contained in:
parent
caa149f73d
commit
dec248c665
@ -300,6 +300,7 @@ loop:
|
||||
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;
|
||||
@ -331,6 +332,7 @@ loop:
|
||||
goto loop;
|
||||
|
||||
c->elemalg->copy(c->elemsize, ep, sg->elem);
|
||||
c->elemalg->copy(c->elemsize, sg->elem, nil);
|
||||
freesg(c, sg);
|
||||
unlock(c);
|
||||
return;
|
||||
@ -356,6 +358,7 @@ asynch:
|
||||
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);
|
||||
@ -778,8 +781,10 @@ loop:
|
||||
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);
|
||||
@ -787,8 +792,10 @@ loop:
|
||||
|
||||
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);
|
||||
@ -817,8 +824,10 @@ syncrecv:
|
||||
// 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);
|
||||
|
Loading…
Reference in New Issue
Block a user