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

Frank Benoit keinfarbton at googlemail.com
Sun Jun 8 09:58:21 PDT 2008


Huang Guan schrieb:
> 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 synchronized.
Since nomally you do not want to mix the output of multiple threads, 
this is ok.
If you want to do "printf debugging" from many threads, use the 
synchronized Trace.

import tango.util.log.Trace;
Trace.formatln( .... );



More information about the Digitalmars-d mailing list