Issues that this hotfix rollup fixes
Issue 1
When a WPF application uses a
TreeViewItem outside the context of a
TreeView, the application can encounter an
InvalidCastException exception whose stack trace starts as follows:
System.Windows.Controls.VirtualizingStackPanel.FindScrollOffset(Visual v)
Note This exception occurs when the
TreeViewItem is in a virtualized list control (for example, a
ListBox,
DataGrid, or
ListView control) that tries to find the scroll offset of the
TreeViewItem or one of its descendants. For example, this exception occurs if you declare a
TreeViewItem as the root of a
DataTemplate, and the
DataTemplate is used as the
CellTemplate of a
DataGrid column.
Issue 2
Both
System.Web.Caching and
System.Runtime.Caching report the size of memory that's used by the whole AppDomain instead of the memory that's used by the cache items.
This is a regression from the .NET Framework 4.5 because of a change in the Timer implementation. In addition to reporting the wrong size, the additional objects that are referenced by the cache can significantly affect gen2 GC latency. In ASP.NET hosting scenarios, the cache also miscalculated the size of all caches in all app domains (as reported through a "Cache % Process Memory Limit Used" ASP.NET performance counter) when app domains were recycled.
This fix removes unintended references from the cache to the other app domain objects so that the correct size is reported. This fix also includes changes to improve the latency for System.Runtime.Caching on multi-core computers that are using Server GC. Additionally, after this fix is applied, the size of all caches in app domain recycling scenarios is calculated correctly.
Issue 3
When you have a Windows Presentation Foundation (WPF) application that relies on mouse promotion of touch moves to handle touch user interaction (instead of by directly using touch events), you may experience an unusually low volume of promoted mouse moves.
Previously, WPF throttled mouse promotion of touch moves to avoid having a large volume of touch moves overwhelm the dispatcher. In the .NET Framework 4.6.1, a fix was introduced to throttle the number of touch moves that are processed. After this change, the throttling of mouse promotions caused an additional reduction in the number of mouse moves that were generated. The throttling of mouse promotions is now removed so that there should be almost a one-to-one correspondence between touch move events and promoted mouse move events.
Issue 4
Assume that you're working on a WPF application that targets the .NET Framework 4.6. You try to set the
CurrentThread.CurrentCulture or
CurrentThread.CurrentUICulture value in any method that is invoked by the WPF Dispatcher by using a DispatcherOperation. For example, you try to set this value in a UI event handler or the MainWindow constructor. In this situation, the
CurrentCulture and
CurrentUICulture values are reset to their respective previous values at the end of the method. If an application sets
CurrentUICulture in its MainWindow constructor or in a Button Click handler, that setting reverts to system UI culture.
This fix makes sure that the
CurrentThread.CurrentCulture/CurrentUICulture values that are set in methods in a WPF application persist in the same manner as they did before the .NET Framework 4.6.
Issue 5
In the .NET Framework 4.6, a new flag,
TaskContinuationOptions.RunContinuationsAsynchronously, is added to the
Task library. However, when you use this flag together with
Task.WhenAll,
Task.WhenAny or
Task.Unwrap, the flag has no effect. The flag was introduced to avoid certain deadlock conditions. This fix makes sure that all kinds of Task continuations respect the new flag.
Issue 6
In the .NET Framework 4.6, there's a bug in AppContext that causes the thread safety of the AppContext methods to be implemented incorrectly. AppContext is part of the infrastructure to reduce breaking changes. You can use AppContext to set and retrieve flags and to make decisions in your application based on that data.
This fix enables correct thread safety for the methods on AppContext that is related to setting and retrieving switch values.
Issue 7
When you encounter an edge case that has your allocation and survival pattern, and you require a new segment on your managed heap, a garbage collector can calculate a commit size that's smaller than it should. This causes an access violation during the compact phase because the garbage collector is trying to write to uncommitted memory.
This fix calculates the size correctly.
Issue 8
When you create native code for certain methods, the .NET Framework applications and NGEN processes may experience an unexpected crash.
Issue 9
RyuJit generates incorrect instructions to compare 16-bit unsigned integers on registers. It produces an incorrect result if input values have different MSB values and if compare instructions that are generated use register operands.
This fix generates correct instructions.