[Issue 2491] New: druntime GC wrongly frees data pointed to by TLS.
d-bugmail at puremagic.com
d-bugmail at puremagic.com
Fri Dec 5 08:08:59 PST 2008
http://d.puremagic.com/issues/show_bug.cgi?id=2491
Summary: druntime GC wrongly frees data pointed to by TLS.
Product: D
Version: 2.021
Platform: PC
OS/Version: Windows
Status: NEW
Severity: critical
Priority: P2
Component: Phobos
AssignedTo: bugzilla at digitalmars.com
ReportedBy: dsimcha at yahoo.com
Apparently, under certain circumstances, the D 2.21 druntime GC wrongly frees
memory locations pointed to by thread-local storage.
import core.memory, std.stdio;
__thread Stuff* stuff1;
struct Stuff {
uint num;
}
void main() {
stuff1 = new Stuff;
stuff1.num = 1;
auto bar = new byte[1024 * 1024];
auto stuff2 = new Stuff;
stuff2.num = 2;
writeln(stuff1, "\t", stuff2); // Same address.
writeln(stuff1.num, "\t", stuff2.num); // Both 2.
}
If you disable the GC using GC.disable at the top of main() or change stuff1 to
a non-thread-local, the problem goes away.
--
More information about the Digitalmars-d-bugs
mailing list