internal static IntPtr ToNative(PinCollection pin, ServiceGroupDescription description) { if (description == null) { return(IntPtr.Zero); } uint length = (uint)description.MemberDescriptions.Count; var nativeDescription = new NativeTypes.FABRIC_SERVICE_GROUP_DESCRIPTION[1]; nativeDescription[0].Description = description.ServiceDescription.ToNative(pin); nativeDescription[0].MemberCount = length; var members = new NativeTypes.FABRIC_SERVICE_GROUP_MEMBER_DESCRIPTION[length]; for (int i = 0; i < length; i++) { members[i].ServiceTypeName = pin.AddBlittable(description.MemberDescriptions[i].ServiceTypeName); members[i].ServiceName = pin.AddObject(description.MemberDescriptions[i].ServiceName); var initializationData = NativeTypes.ToNativeBytes(pin, description.MemberDescriptions[i].InitializationData); members[i].InitializationDataSize = initializationData.Item1; members[i].InitializationData = initializationData.Item2; var metrics = NativeTypes.ToNativeLoadMetrics(pin, description.MemberDescriptions[i].Metrics); members[i].MetricCount = metrics.Item1; members[i].Metrics = metrics.Item2; pin.AddBlittable(members[i]); } nativeDescription[0].MemberDescriptions = pin.AddBlittable(members); return(pin.AddBlittable(nativeDescription[0])); }
// Copies the exception message and stack trace to ErrorThreadMessage public void HandleException(Exception ex) { if (this.CopyExceptionDetailsToThreadErrorMessage) { using (var pin = new PinCollection()) { NativeCommon.FabricSetLastErrorMessage(pin.AddObject(CreateThreadErrorMessage(ex, this.ShouldIncludeStackTraceInThreadErrorMessage))); } } }