Acknowledgement sent
to Daniel Gibson <metalcaedes@gmail.com>:
New Bug report received and forwarded. Copy sent to Debian GCC Maintainers <debian-gcc@lists.debian.org>.
(Sat, 15 May 2010 01:51:05 GMT) (full text, mbox, link).
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);
This Bug also applies gdc-4.3 and Digitalmars dmd.
I've attached a simple example to demonstrate the bug.
Cheers,
- Daniel
--- System information. ---
Architecture: i386
Kernel: Linux 2.6.32-3-686
Debian Release: squeeze/sid
500 testing security.debian.org
500 testing ftp.de.debian.org
--- Package information. ---
Depends (Version) | Installed
================================-+-==================
gdc-4.1 (= 0.25-4.1.2-27) | 0.25-4.1.2-27
zlib1g-dev (>= 1:1.2.3.3) | 1:1.2.3.4.dfsg-3
Package's Recommends field is empty.
Package's Suggests field is empty.
Information forwarded
to debian-bugs-dist@lists.debian.org, Debian GCC Maintainers <debian-gcc@lists.debian.org>: Bug#581700; Package libphobos-4.1-dev.
(Sat, 15 May 2010 19:48:05 GMT) (full text, mbox, link).
Acknowledgement sent
to Iain Buclaw <ibuclaw@ubuntu.com>:
Extra info received and forwarded to list. Copy sent to Debian GCC Maintainers <debian-gcc@lists.debian.org>.
(Sat, 15 May 2010 19:48:05 GMT) (full text, mbox, link).
On 15 May 2010 02:48, Daniel Gibson <metalcaedes@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';
Information forwarded
to debian-bugs-dist@lists.debian.org, Debian GCC Maintainers <debian-gcc@lists.debian.org>: Bug#581700; Package libphobos-4.1-dev.
(Sat, 15 May 2010 20:09:03 GMT) (full text, mbox, link).
Acknowledgement sent
to Iain Buclaw <ibuclaw@ubuntu.com>:
Extra info received and forwarded to list. Copy sent to Debian GCC Maintainers <debian-gcc@lists.debian.org>.
(Sat, 15 May 2010 20:09:03 GMT) (full text, mbox, link).
Debbugs is free software and licensed under the terms of the GNU
Public License version 2. The current version can be obtained
from https://bugs.debian.org/debbugs-source/.