I just fixed a potential crasher bug which would trigger when you right-clicked a construction post whose construction window was currently open and empty of resources. The server would delete the construction post (since it was empty of resources), and then try to walk up to and use the now deleted object.
Though I'm sorry for the crashes, this bug reminded me of the joy that debugging can bring. Often, debugging is done in a hurry, to fix a really urgent bug, which can be a very stressful situation and thus takes a lot away from the fun of it, but this time, I could take my time, enjoy it and do it thoroughly. And thoroughly, indeed, it had to be done, seeing how the faulty code path crossed two different stacks and switched between them (using libc's ucontext functions). It isn't every day that I have to look through obscure system data structures describing processor state and walking through a stack manually with a memory examiner and print-out of the assembly dump of the program. I recalled another time, when I had to step through a program instruction by instruction to find the place where I was razing malloc fences; I think it took me 8 hours. This time wasn't quite as bad, but in a way, it's almost a little boring how Valgrind makes these sorts of bugs so ridiculously easy to find, so I must thank you guys for using the server so much that I couldn't use Valgrind. :)
Hopefully, this was also the bug that was corrupting the server's malloc arena, causing delayed crashes at shutdown. I can only hope.
Thank you all for triggering these rare bugs. I don't think clicking a construction post like that is an action I'd ever have triggered in solo testing. :)