Another major change we did was a partial fix for priority inversion issues on platforms that don't have schedulers that can detect that. Priority inversion is a nasty deadlock that can occur because of inefficient scheduling -- a common case is where a low priority work thread grabs the Telemetry lock via an API call but is then switched away. At that point if multiple higher priority threads take over and then never relinquish control back to the lower priority thread, while also attempting to enter Telemetry, they'll hang. A worst case situation might be a time critical thread that spin waits (i.e. never yields) on others while also trying to enter Telemetry, thus never letting the kernel switch to a lower priority thread.
We have a fix for this that handles many cases, but it's still possible to deadlock on Telemetry if your threading code is misbehaved. Consider this a benefit of Telemetry -- if you're deadlocking Telemetry then that's likely showing a latent bug in your threading implementation if you share resources between different priority threads!
Note that you'll have to recompile your Telemetry enabled applications with this build since some constants have changed.
Some other changes:
- Bugfix: tmEnterEx declaration was wrong, resulting in compile time error
- Bugfix: context switch thread would occasionally crash when shutting down
- Change: maximum zone depth is now 32 in the Visualizer
- Change: changed color scheme a bit in Visualizer
- Bugfix: by-frame % calculations were wrong in some cases in profiler view in Visualizer
- Enhancement: highlighting a plot now highlights its label as well
- Enhancement: you can invert sense of mousewheel vs. control-mousewheel
- Bugfix: fixed some server crash issues
- Enhancement: updated documentation