Release Notes

Public

7.0.16.2311: Jun 21 2018

New

Diff performance: Improved calculation of moved text. Now it's about 10 times faster.

Bug

OS X checkin: we fixed an ugly and weird crash during checkin.

The crash was reported by several OS X users during the last 2 weeks, and we were finally able to fix it.

Users tried to checkin from command line or GUI, and Plastic crashed.

Then the adventure started:

* First we were unable to reproduce it, although we spent several days on it.

* Finally, after a couple of online meetings with customers, we found it only seemed to happen with low memory and on a real laptop, not a virtual machine as we were doing.

* We upgraded Xamarin on our build machine from 4.0.0.216 to 4.4.1.193 because we initially thought the issue was fixed by a newer Mono. During testing we discovered that it failed much less often than before, but it still failed. We released 7.0.16.2306 just to mitigate the problem temporarily.

* We started thinking it should be a GC issue. So we contacted Microsoft.

* After some investigation, they told us that the issue seemed to be in the way we invoke zlib to compress files before sending to server.

Finally, and thanks to the detailed report from the Mono developer, we think the issue is gone.

It happened because we invoked zlib.compress2 passing an output buffer as large as the input buffer, then we handled Z_BUF_ERROR in case compression couldn't improve the original fragment size. Well, docu says the output buffer must be at least 1% + 12 bytes bigger than the original. We did that, and now it doesn't crash anymore.

The weird thing is that this code has been there for 10 years. Billions of files have been compressed using this code on Windows, Linux and OS X over the years. At this point we think it might be due to an upgrade from the older zlib 1.2.8 to 1.2.11 on latest OS X.

Special thanks to Vlad Brezae from Microsoft, who debugged Mono and pointed the issue and solution in the zlib client code.

Bug

OS X: Line numbers on diff viewer were not visible for moved regions. Now it's fixed.