This post originated from an RSS feed registered with Ruby Buzz
by Florian Frank.
Original Post: Weird subversion hangs using svnserve?
Feed Title: The Rubylution
Feed URL: http://rubylution.ping.de/xml/rss/feed.xml
Feed Description: The Rubylution is a weblog (mainly) about Ruby Programming.
I had those hangs, that from time to time occured without any discernible pattern to them.
They usually only happened once, when I started to access my repository. After the first hang none would occur for a while.
Now i finally got enough of it, and straced the program. It hang while reading from /dev/random.
WTF? They shouldn't use random for regular use, because it depends on fresh randomness from harware entropy pools. This leads to blocking until enough new entropy was generated by keypresses, io operations, mouse movements, etc. And I definetely don't want to sit next to my server and move the mouse in all directions everytime I want to work with subversion via the internet.
So I started googling and came up with this issue (aka bug) report.
Obviously I am not the only one, that had that problem. Be sure to read the comments on this bug report. The subversion developers closed the bug by pointing out, that the apr library does this if it isn't compiled with a special config option. Great: Too lazy to fix a bug, just blame the 3rd party library (which we choose to use in the first place) and be done with it. (Bug was reopened by someone more interested in delivering good software.)
Ok, now I checked the apr library on my Gentoo system, and someone already had made a USE flag "urandom". Yeah, this must be a work around for exactly my problem. Why didn't they configure apr to use urandom in general? WTF^2? Open source leads to the discovery of bugs so fast, that everyone can easily work around them, but nobody is willing to fix them once and for all. I wonder how many people concluded from that experience, that subversion is just crap, because it doesn't work? I don't think many people are inclined to dig into this error deep enough to find out, that someone else is to blame...