async.format_exc was written when we had to support Python versions older than 2.4. For Python 2.4 and above, the function is a thin wrapper around traceback.format_exc. Given that we now require Python 2.4, we should remove this compatibility function and change calling code to use traceback.format_exc instead. This avoids us having compatibility code for stuff we don't support any longer and avoiding odd dependencies across modules - async isn't the most obvious place to put compatibility code.
I believe I am done with this bug now. (All tests were performed with thinlinc-4.7.0post-5309) Autotests should catch any problems with the VSM code, and they're all passing. I've manually tested the print_exc -> format_exc changes by modifying a nightly build to raise exceptions in pages (tlwebadm, tlwebaccess), and by running tlclient.cgi by hand in a terminal, which triggers the changed code path.
I can not find any place that has been overlooked. I also reviewed the code and did some tests by injecting errors in to the code to make it crash. Everything looks correct.