mirror of
https://github.com/golang/go
synced 2024-11-12 09:30:25 -07:00
runtime: delete unnecessary confusing code
The code in GC that handles gp->gobuf.ctxt is wrong, because it does not mark the ctxt object itself, if just queues the ctxt object for scanning. So the ctxt object can be collected as garbage. However, Gobuf.ctxt is void*, so it's always marked and scanned through G. LGTM=khr R=golang-codereviews, khr CC=golang-codereviews, khr, rsc https://golang.org/cl/105490044
This commit is contained in:
parent
2ec3a0a72f
commit
d3be3daafe
@ -1615,8 +1615,6 @@ addstackroots(G *gp, Workbuf **wbufp)
|
||||
int32 n;
|
||||
Stktop *stk;
|
||||
uintptr sp, guard;
|
||||
void *base;
|
||||
uintptr size;
|
||||
|
||||
switch(gp->status){
|
||||
default:
|
||||
@ -1652,9 +1650,6 @@ addstackroots(G *gp, Workbuf **wbufp)
|
||||
sp = gp->sched.sp;
|
||||
stk = (Stktop*)gp->stackbase;
|
||||
guard = gp->stackguard;
|
||||
// For function about to start, context argument is a root too.
|
||||
if(gp->sched.ctxt != 0 && runtime·mlookup(gp->sched.ctxt, &base, &size, nil))
|
||||
enqueue1(wbufp, (Obj){base, size, 0});
|
||||
}
|
||||
if(ScanStackByFrames) {
|
||||
USED(sp);
|
||||
|
@ -213,7 +213,7 @@ struct Gobuf
|
||||
uintptr sp;
|
||||
uintptr pc;
|
||||
G* g;
|
||||
void* ctxt;
|
||||
void* ctxt; // this has to be a pointer so that GC scans it
|
||||
uintreg ret;
|
||||
uintptr lr;
|
||||
};
|
||||
|
Loading…
Reference in New Issue
Block a user