First big PITA in reallife D project
Fawzi Mohamed
fawzi at gmx.ch
Tue Oct 19 04:14:33 PDT 2010
On 19-ott-10, at 12:45, Stephan wrote:
> Hey guys I wanted to discuss my first major depressing experience
> with D in a reallife project.
>
> First off here is the according bug report : http://d.puremagic.com/issues/show_bug.cgi?id=4951
>
> I have to mention that it was by far not the first bug i encountered
> in D but it has never been such a PITA. I spent hours and hours of
> searching, rewriting and crawling my code for the cause of this
> issue. Just to finally find out that it was not my code but some bug
> in druntime.
>
> What i do:
> I spawn multiple threads all periodically connecting to some
> webservers waiting for the request to finish. Every request is
> totally independent of the others. There is no data sharing in my
> code. Now i have a protocol that makes my process send one last
> important request when shutting down. For a clean shut down i wanted
> to make sure that all the other threads are shut down first. That
> way the final request of the process is the very last. So i wait for
> every thread to finish their request and stop them.
> BUT it wont work like that. AFTER i stopped all other threads some
> strange behavior of druntime makes every creation of an
> InternetAddress instance (internally trying to resolve host)
> impossible (throws an exception). Additionally even if the Internet
> Addresses were created upfront the TcpSockets wont connect but throw.
> I have no idea what the heck is going on inside of the druntime that
> could cause this but in my opinion it makes designing a big server
> environment pretty much impossible because it would mean that i
> cannot let any of my user generated threads exit unless i want to
> shutdown completely anyway.
>
> Perhaps one side note: I am testing and having these issues under
> Windows.
>
>
> I have never been so tempted to use another language while coding in
> D as i was this time and that makes me sad.
I am not sure what is wrong in your case, and I worked only with D1/
tango on mac and linux, but I can definitely say that I had quite some
very ugly bugs with threads and fibers, and gc.
I think I have fixed all of them (at least everything seems stable now).
Sean&co are welcome to take my fixes from tango into druntime, I
release them with whatever license is needed: should I switch to D2 I
will not complain if I don't have to debug those horrible things
again... ;)
A non druntime bug you should maybe check if you use IP6 is the
storage space you alloc for the address structure is large enough:
sockaddr is too small, one should use sockaddr_storage (druntime is
not always the culprit...).
good luck
Fawzi
More information about the Digitalmars-d-announce
mailing list