Code: Ugh. My threadlock fix over the weekend for Ganymede turned out to leave some things unsynchronized that shouldn't have been and, presumably some things synchronized likewise. I spent most of the day at work trying to cope with Ganymede having decided to just drop selective portions of data entered into it on the floor. This after dealing with a few deadlocks and a JVM (Sun's HotSpot Server VM version 1.3.1 rc 2 on Sparc Solaris) that took a liking to dumping core.
Ugh, ugh, ugh. I tried to work my way through one deadlock thread report, only to find myself completely unable to find why a certain monitor was hanging.
Despite my ignorance, I spent several hours doing a bit of a deadlock audit through all code related to the hanging monitor and rewrote a fair bit of it to make it as impossible as I can make it that the monitor in question will be held while the code proceeds to take another monitor . This should prevent any deadlocks on this monitor, but too much of my code is starting to feel like it is depending on baling wire and prayer. This is especially troubling given my agnostic/atheistic worldview.
But, all in all, the code today should be cleaner and more resistant to deadlock than last Friday's code, and I have continued to cut new (unannounced) release candidates for 1.0. If the server performs well over the next couple of days at work I'll go ahead and bless the current code and see what people make of it all.
Personal: I dreamed of Anchorage last night. It has been 16 years since we left Alaska for Texas, but three years living there was evidently enough to leave a quite permanent impression on me. I especially get this way when Texas starts asserting that "I'm going to make your life miserable for the next five months" summer time vibe it has.