July 16, 2003 BUG: 2nd GC Run Segfaults | ||||
---|---|---|---|---|
| ||||
DMD 0.68, on RedHat 9 When the GC runs twice, the second run segfaults. It turns out that it segfaults when the code attempts to use the Thread reference. For some reason, the Thread object was cleaned up on the first run of the GC! The following code generates an error: import gc; import c.stdio; int main(char[][] args) { printf("Starting test!\n"); fflush(null); gc.fullCollect(); gc.fullCollect(); return 0; }; The output, after I added some trace statements into phobos, looks like this: fullcollect: START fullcollect: END Starting test! fullcollect: START threads:0/1 t=0x401b9fc0 *(long*)t=0x804e129Thread.~this(): this=0x401b9fc0 fullcollect: END fullcollect: START threads:0/1 t=0x401b9fc0 *(long*)t=(nil)Segmentation fault The key thing to note is that Thread.~this() gets called during fullcollect(). |
Copyright © 1999-2021 by the D Language Foundation