Last year I published a blog post about characters missing from print jobs with Internet Explorer 9 and my adventures in tracing and reporting the issue to Microsoft.
We saw situations where a letter would be printed with random letters missing, as per the following example:
Today, I was notified that Microsoft have finally publicly published a hotfix! We received the hotfix from them a few weeks ago, before it was publicly available, and it certainly solved the problem on our test machines and end user computers.
Download the hotfix from:
http://support.microsoft.com/kb/2853777 (Windows 7 SP1, Windows Server 2008 SP1)
http://support.microsoft.com/kb/2855336 (Windows 8, Windows Server 2012)
(The first link notes that the hotfix is included in the rollup in the second link, though the second link doesn’t mention the hotfix!)
Sadly, they’ve only published a solution for Windows 7 Service Pack 1 onwards, and not for Vista, which could be an issue for some users.
It was interesting to see that the issue was indeed a race condition (two threads ending up with the same random seed, because, and I quote:
This issue occurs because a conflict causes the text that uses the font to become corrupted when the two threads try to install the font at the same time. The name of the font is generated by the RAND function together with a SEEDvalue whose time value is set to srand(time(NULL)). When the two documents are printed at the same time, the SEEDvalue for the font is the same in both documents. Therefore, the conflict occurs.
So not related to the threading model, which was a little bit of misdirection on my part 😉 That’s par for the course though when debugging complex issues without source…
Fantastic to finally have the fix 🙂
2 thoughts on “I am happy to announce that the missing characters have been found!”
According to their bug report, wouldn’t a possible workaround (especially for Vista, or for before the hotfix is released) to ensure there’s at least 15ms between print jobs?
Russell, thanks for the comment. I don’t think that would be a reliable solution as the problem is a fair way down the print pipeline, and so you have no guarantee as to how long the earlier actions take.