digitalmars.D.learn - Forking problems on OS X 2.047
- Byron Heads (38/38) Jun 21 2010 When I use fork I am getting a core.thread.ThreadException: Unable to
- Byron Heads (3/9) Jun 21 2010 This runs fine under linux
- Jacob Carlborg (5/43) Jun 22 2010 It's working fine using Tango on Snow Leopard but it doesn't work using
- Masahiro Nakagawa (4/42) Jun 22 2010 My environment too. Please put this bug into bugzilla.
- soul8o8 (9/55) Jun 22 2010 Correction:
- soul8o8 (29/75) Jun 22 2010 I get the same error.
When I use fork I am getting a core.thread.ThreadException: Unable to
load thread state exception.
This is dmd 2.047 on OS X
I am trying to convert a small C application.
module fork;
import core.sys.posix.unistd,
std.stdio;
void main()
{
auto pid = fork();
if( pid > 0 ) {
writeln( "Parent" );
} else if( pid == 0 ) {
writeln( "Child" );
} else {
writeln( "Failed to fork!" );
}
}
$ ./fork
Parent
Child
core.thread.ThreadException: Unable to load thread state
----------------
5 fork 0x00006de9 thread_suspendAll + 85
6 fork 0x0000aff0
D2gc3gcx3Gcx11fullcollectMFPvZk + 32
7 fork 0x0000afbd
D2gc3gcx3Gcx16fullcollectshellMFZk + 41
8 fork 0x0000a0a2
D2gc3gcx2GC18fullCollectNoStackMFZv + 54
9 fork 0x0000803c gc_term + 44
10 fork 0x0000cef6
D2rt6dmain24mainUiPPaZi6runAllMFZv + 90
11 fork 0x0000cdc6
D2rt6dmain24mainUiPPaZi7tryExecMFMDFZvZv + 42
12 fork 0x0000cd54 main + 168
13 fork 0x00001a85 start + 53
I tried different flags but the output is the same.
Jun 21 2010
On Mon, 21 Jun 2010 21:32:21 +0000, Byron Heads wrote:When I use fork I am getting a core.thread.ThreadException: Unable to load thread state exception. This is dmd 2.047 on OS X I am trying to convert a small C application.This runs fine under linux -Byron
Jun 21 2010
On 2010-06-21 23:32, Byron Heads wrote:
When I use fork I am getting a core.thread.ThreadException: Unable to
load thread state exception.
This is dmd 2.047 on OS X
I am trying to convert a small C application.
module fork;
import core.sys.posix.unistd,
std.stdio;
void main()
{
auto pid = fork();
if( pid> 0 ) {
writeln( "Parent" );
} else if( pid == 0 ) {
writeln( "Child" );
} else {
writeln( "Failed to fork!" );
}
}
$ ./fork
Parent
Child
core.thread.ThreadException: Unable to load thread state
----------------
5 fork 0x00006de9 thread_suspendAll + 85
6 fork 0x0000aff0
D2gc3gcx3Gcx11fullcollectMFPvZk + 32
7 fork 0x0000afbd
D2gc3gcx3Gcx16fullcollectshellMFZk + 41
8 fork 0x0000a0a2
D2gc3gcx2GC18fullCollectNoStackMFZv + 54
9 fork 0x0000803c gc_term + 44
10 fork 0x0000cef6
D2rt6dmain24mainUiPPaZi6runAllMFZv + 90
11 fork 0x0000cdc6
D2rt6dmain24mainUiPPaZi7tryExecMFMDFZvZv + 42
12 fork 0x0000cd54 main + 168
13 fork 0x00001a85 start + 53
I tried different flags but the output is the same.
It's working fine using Tango on Snow Leopard but it doesn't work using
D2 on Leopard or Snow.
--
/Jacob Carlborg
Jun 22 2010
On Tue, 22 Jun 2010 06:32:21 +0900, Byron Heads <wyverex.cypher gmail.com>
wrote:
When I use fork I am getting a core.thread.ThreadException: Unable to
load thread state exception.
This is dmd 2.047 on OS X
I am trying to convert a small C application.
module fork;
import core.sys.posix.unistd,
std.stdio;
void main()
{
auto pid = fork();
if( pid > 0 ) {
writeln( "Parent" );
} else if( pid == 0 ) {
writeln( "Child" );
} else {
writeln( "Failed to fork!" );
}
}
$ ./fork
Parent
Child
core.thread.ThreadException: Unable to load thread state
----------------
5 fork 0x00006de9 thread_suspendAll + 85
6 fork 0x0000aff0
D2gc3gcx3Gcx11fullcollectMFPvZk + 32
7 fork 0x0000afbd
D2gc3gcx3Gcx16fullcollectshellMFZk + 41
8 fork 0x0000a0a2
D2gc3gcx2GC18fullCollectNoStackMFZv + 54
9 fork 0x0000803c gc_term + 44
10 fork 0x0000cef6
D2rt6dmain24mainUiPPaZi6runAllMFZv + 90
11 fork 0x0000cdc6
D2rt6dmain24mainUiPPaZi7tryExecMFMDFZvZv + 42
12 fork 0x0000cd54 main + 168
13 fork 0x00001a85 start + 53
I tried different flags but the output is the same.
My environment too. Please put this bug into bugzilla.
Masahiro
Jun 22 2010
Correction: Of course, you shouldn't call thread_attachThis() for the parent thread. = It's already been attached since the D runtime created it. (In fact, the = documentation says: "If [thread_attachThis()] is called for a thread = which is already registered, the result is undefined." My bad.) BR /soul On Jun 21, 2010, at 23:32 , Byron Heads wrote:When I use fork I am getting a core.thread.ThreadException: Unable to=20=load thread state exception. =20 This is dmd 2.047 on OS X I am trying to convert a small C application. =20 =20 module fork; import core.sys.posix.unistd, std.stdio; =20 void main()=20 { auto pid =3D fork(); =20 if( pid > 0 ) {=20 writeln( "Parent" ); } else if( pid =3D=3D 0 ) {=20 writeln( "Child" ); } else { writeln( "Failed to fork!" ); } =20 } =20 =20 $ ./fork Parent Child core.thread.ThreadException: Unable to load thread state ---------------- 5 fork 0x00006de9 thread_suspendAll + =856 fork 0x0000aff0=20 D2gc3gcx3Gcx11fullcollectMFPvZk + 32 7 fork 0x0000afbd=20 D2gc3gcx3Gcx16fullcollectshellMFZk + 41 8 fork 0x0000a0a2=20 D2gc3gcx2GC18fullCollectNoStackMFZv + 54 9 fork 0x0000803c gc_term + 44 10 fork 0x0000cef6=20 D2rt6dmain24mainUiPPaZi6runAllMFZv + 90 11 fork 0x0000cdc6=20 D2rt6dmain24mainUiPPaZi7tryExecMFMDFZvZv + 42 12 fork 0x0000cd54 main + 168 13 fork 0x00001a85 start + 53 =20 I tried different flags but the output is the same.
Jun 22 2010
I get the same error.
Fix:
The following code works allright on MacOS X 10.6.4 / DMD v2.047:
module fork;
import core.sys.posix.unistd,
core.thread, // added
std.stdio;
void main()
{
auto pid =3D fork();
if( pid> 0 ) {
thread_attachThis(); // added
writeln( "Parent" );
} else if( pid =3D=3D 0 ) {
thread_attachThis(); // added
writeln( "Child" );
} else {
writeln( "Failed to fork!" );
}
}
I'm completely new to D, so this is just me speculating: By using =
low-level posix threads I think you kind of sneak behind the back of the =
D runtime. You need to give it a chance to set things up for each =
thread. This is what thread_attachThis() does. (Please correct me if I'm =
wrong.)
BR
/soul
On Jun 21, 2010, at 23:32 , Byron Heads wrote:
When I use fork I am getting a core.thread.ThreadException: Unable to=20=
load thread state exception.
=20
This is dmd 2.047 on OS X
I am trying to convert a small C application.
=20
=20
module fork;
import core.sys.posix.unistd,
std.stdio;
=20
void main()=20
{
auto pid =3D fork();
=20
if( pid > 0 ) {=20
writeln( "Parent" );
} else if( pid =3D=3D 0 ) {=20
writeln( "Child" );
} else {
writeln( "Failed to fork!" );
} =20
}
=20
=20
$ ./fork
Parent
Child
core.thread.ThreadException: Unable to load thread state
----------------
5 fork 0x00006de9 thread_suspendAll + =
85
6 fork 0x0000aff0=20
D2gc3gcx3Gcx11fullcollectMFPvZk + 32
7 fork 0x0000afbd=20
D2gc3gcx3Gcx16fullcollectshellMFZk + 41
8 fork 0x0000a0a2=20
D2gc3gcx2GC18fullCollectNoStackMFZv + 54
9 fork 0x0000803c gc_term + 44
10 fork 0x0000cef6=20
D2rt6dmain24mainUiPPaZi6runAllMFZv + 90
11 fork 0x0000cdc6=20
D2rt6dmain24mainUiPPaZi7tryExecMFMDFZvZv + 42
12 fork 0x0000cd54 main + 168
13 fork 0x00001a85 start + 53
=20
I tried different flags but the output is the same.
Jun 22 2010









Byron Heads <wyverex.cypher gmail.com> 