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