On 15 May 2010 02:48, Daniel Gibson <metalcae...@gmail.com> wrote: > Package: libphobos-4.1-dev > Version: 0.25-4.1.2-27 > Severity: normal > > > Hi, > > While trying to narrow down another bug (#581698) I noticed that my > program segfaults on exit, if there are Thread-objects that haven't > been start()ed. > While it probably doesn't make much sense to create Threads and not > start them, this shouldn't happen. > I ran it with gdb and got the following backtrace: > > Program received signal SIGSEGV, Segmentation fault. > 0xb7f6292b in pthread_detach () from /lib/i686/cmov/libpthread.so.0 > (gdb) bt > #0 0xb7f6292b in pthread_detach () from /lib/i686/cmov/libpthread.so.0 > #1 0x0805ad93 in _d_callfinalizer () > #2 0x0805c5a6 in _D3gcx3Gcx11fullcollectMFPvZk () > #3 0x0805ca54 in _D3gcx3Gcx16fullcollectshellMFZk () > #4 0x0805cd8c in _D3gcx2GC18fullCollectNoStackMFZv () > #5 0x0805a203 in gc_term () > #6 0x0806166a in _d_run_main () > #7 0x0805e33a in main () > > I think (but haven't tried to fix that yet) that the error is in > Thread's destructor (std/thread.d line 589/590): > > if (state != TS.FINISHED) > pthread_detach(id); > > The status of an unstarted Thread is TS.INITIAL - I don't know if it > is necessary to pthread_detach() a thread that hasn't run, > but if it isn't I'd suggest to change this to > > if(state != TS.FINISHED && state != TS.INITIAL) > pthread_detach(id); > > Thanks for your bug report. I didn't actually notice you came up with a fix first time I read your message, but I came to the same conclusion whilst having a quick 5 minute look at it.
I'll see if a bug is raised upstream, but will include your small resolution in the next version gdc version. Thanks Daniel. Regards -- Iain Buclaw *(p < e ? p++ : p) = (c & 0x0f) + '0';