Your message dated
with message-id <20100713184537.10815.90403.mass-bugs-cl...@merkel.debian.org>
and subject line gdc-4.1 removed from Debian unstable
has caused the Debian Bug report #581700,
regarding [libphobos-4.1-dev] Not started Threads cause Segfault on exit
to be marked as done.
This means that you claim that the problem has been dealt with.
If this is not the case it is now your responsibility to reopen the
Bug report if necessary, and/or fix the problem forthwith.
(NB: If you are a system administrator and have no idea what this
message is talking about, this may indicate a serious mail system
misconfiguration somewhere. Please contact ow...@bugs.debian.org
immediately.)
--
581700: http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=581700
Debian Bug Tracking System
Contact ow...@bugs.debian.org with problems
--- Begin Message ---
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.
import std.stdio;
import std.thread;
const bool doSegfault=true;
void main(){
int fun(){
writefln("bla");
return 0;
}
int delegate() dg = &fun;
Thread t = new Thread(dg);
// if t.start() is missing, the program segfaults on exit (all compilers),
// probably because of pthread_detach in Threads destructor
// - is pthread_detach necessary when state == TS.INITIAL?
static if(!doSegfault){
t.start();
t.wait();
}
}
--- End Message ---
--- Begin Message ---
Version: 0.25-20080616-4.1.2-27+rm
gdc-4.1 has been removed from Debian unstable: http://bugs.debian.org/577428
Closing its bugs with a Version higher than the last unstable upload.
More information about this script at:
http://git.debian.org/?p=users/morph/mass-bugs-close.git;a=blob_plain;f=README;hb=HEAD
--- End Message ---