I just commited for the 1000th time to the libgdx SVN repository. A lot has happened since the first commit earlier this year. Here’s a fun little story that just happened a few minutes ago.
A user reported on the forum that there are random crashes in the input system. All alarms went off and i was really scared. Have i fucked up the input system yet again? That can’t be, right? I mean i only have a single synchronization points for events, that’s nice and sweet and small. And i tested the shit out of it 3 days ago when i commited it.
The user reported a null pointer exception in AndroidMultitouchHandler. That handler uses a pool to not create new events everytime. That pool needs synchronization of course and that’s what i did. So, when i start debuggin a test case i find that the pool returns null references. Wtf? I test and debug and test and debug but the problem never arises while the debugger is attached, a common trait of Heisenbugs.
I finally have a look at the SVN history where this little gem was hidden:
39 hours ago, Nate: [removed] Unnecessary synchronized blocks in touch handlers
Indeed unnecessary. If it wasn’t so said it would be rather funny. I fixed it and build the nightlies so we again have a functional input system on Android. I guess this becomes a running gag now. The changelog of revision 999 is thus:
4 minutes ago: Mario: [added] "unnecessary" synchronize blocks in touch handlers.
Nate isn’t the devil himself. Turns out he changed it just a couple of hours later, not having updated to the revision that contained the correct synchronization. In his version there was a double synchronization due to the old new input system that was kicked out. The joy of distributed software development 🙂
Fun times, good night.