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 = fork(); if( pid> 0 ) { thread_attachThis(); // added writeln( "Parent" ); } else if( pid == 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 > 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.