GC Bug? Error: Unable to accept socket connection: Interrupted system call

Sean Kelly sean at invisibleduck.org
Sun Jun 8 12:33:34 PDT 2008


== Quote from Huang Guan (gdxxhg at gmail.com)'s article
> Sean Kelly Wrote:
> > == Quote from Huang Guan (gdxxhg at gmail.com)'s article
> > > I got this error under Linux while I didn't find it under Windows.
> > > This is the code:
> > > private import std.thread, std.stdio, std.gc, std.c.time, std.socket;
> > > Socket s;
> > > int test(void* arg){
> > > 	s.bind( new InternetAddress( 8888 ) );
> > > 	s.listen(10);
> > > 	Socket a = s.accept();
> > > 	// never reach
> >
> > Are you saying the thread never completes?  I might expect s.accept()
> > to return prematurely if a GC cycle occurs, but I wouldn't expect it to
> > lock up.  But then I've never looked at std.socket, so perhaps there's
> > a bug in the code.  I can assure you that Tango doesn't have this
> > problem :p
> >
> >
> > Sean
> Yes, Tango doesn't have this problem and I am using it now.
> I found there is a bug in class Stdout( Tango ). Once Stdout accessed by many threads, it raised some
strange error such as exited without any warning.

Stdout is not thread-safe.  This is intentional, as adding thread safety
incurs a performance cost that the user may not want.  If you must
write to Stdout from multiple threads, I suggest either looking at
the logging facilities (which are thread-safe), or synchronizing in
some other way, this being the simplest:

synchroized(Stdout) Stdout( "blah" );


Sean



More information about the Digitalmars-d mailing list