I am still trying to track down the build NRE for s390x. I put in a couple of displays in GetHashCode() and in the method that sets the ns and name variables. I found that the crash is occurring as the WindowsRuntimeProjection constructor is running. It gets to the point of:
projections.Add(new TypeName("Windows.Foundation", "EventRegistrationToken"), new Mapping(ProjectionAssembly.System_Runtime_InteropServices_WindowsRuntime, "System.Runtime.InteropServices.WindowsRuntime", "EventRegistrationToken")); Note when TypeName(ns, name) is invoked it shows these strings: ns: Windows.Foundation name: EventRegistrationToken However, when we get to GetHashCode() I attempt to display the values ns and name again. I had to simply do a null test for name as if I attempt to use its value I get an NRE (again, this only happens for this invocation): ns: Windows.Foundation name: not null Interestingly, if I add this to WindowsRuntimeProjection() Console.Error.WriteLine("WindowsRuntimeProjection - {0} {1} {2}", ProjectionAssembly.System_Runtime, ProjectionAssembly.System_Runtime_InteropServices_WindowsRuntime, ProjectionAssembly.Count); I get: WindowsRuntimeProjection - System_Runtime 1 5 Seeing this, I changed the order of projection.Add statements such that the Interop one happened after an add of System_Runtime_WindowsRuntime, and the crash then occurred when it encountered the first of these. That is, everything with ProjectionAssembly.System_Runtime is successfully added but the first time a non-System_Runtime is encountered the crash occurs. So I changed the order of things in the enum ProjectionAssembly and only the one declared first in the enum gets printed out as a name and not an integer. For example, I made System_Runtime the third entry and then got: WindowsRuntimeProjection - 2 System_Runtime_InteropServices_WindowsRuntime 5 I do not know the significance of this, but it also results in a crash when the first projection.Add of a System_Runtime entry is processed. Which source file contains the Dictionary Add processing? I wonder if there is some little endian/big endian issue here as 0 index would never be a problem but non-zero would. Here is the original exception message (without my above changes: Unhandled Exception: Mono.CSharp.InternalErrorException: Microsoft.Win32/RegistryKeyPermissionCheck.cs(31,21): Microsoft.Win32 ---> Mono.CSharp.InternalErrorException: Microsoft.Win32/RegistryKeyPermissionCheck.cs(33,14): Microsoft.Win32.RegistryKeyPermissionCheck ---> System.TypeInitializationException: An exception was thrown by the type initializer for IKVM.Reflection.WindowsRuntimeProjection ---> System.NullReferenceException: Object reference not set to an instance of an object at IKVM.Reflection.TypeName.GetHashCode () [0x00000] in <filename unknown>:0 at System.Collections.Generic.GenericEqualityComparer`1[IKVM.Reflection.TypeNa me].GetHashCode (TypeName obj) [0x00000] in <filename unknown>:0 at System.Collections.Generic.Dictionary`2[IKVM.Reflection.TypeName,IKVM.Refle ction.WindowsRuntimeProjection+Mapping].Insert (TypeName key, IKVM.Reflection.Mapping value, Boolean add) [0x00000] in <filename unknown>:0 at System.Collections.Generic.Dictionary`2[IKVM.Reflection.TypeName,IKVM.Refle ction.WindowsRuntimeProjection+Mapping].Add (TypeName key, IKVM.Reflection.Mapping value) [0x00000] in <filename unknown>:0 at IKVM.Reflection.WindowsRuntimeProjection..cctor () [0x00000] in <filename unknown>:0 On 3/5/15, 10:28 AM, "Neale Ferguson" <ne...@sinenomine.net> wrote: >I cloned from head yesterday and am now crashing in >IKVM.Reflection.TypeName.GetHashCode with a NRE. Does this look familiar? >Before the clone, the copy I was using was up to date as of Monday and it >was working. I recloned just to have a clean slate after Atushi committed >my endian fixes for the reference sources. _______________________________________________ Mono-devel-list mailing list Mono-devel-list@lists.ximian.com http://lists.ximian.com/mailman/listinfo/mono-devel-list