Fix for SvcPerf hang due to not propagating the exeception

This commit is contained in:
georgis 2013-09-30 21:54:23 -07:00
Родитель ff3a062800
Коммит 5db9afe29b
4 изменённых файлов: 28 добавлений и 4 удалений

Просмотреть файл

@ -5,5 +5,5 @@ using System.Reflection;
[assembly: AssemblyCompany("MS Open Tech")]
[assembly: AssemblyProduct("Tx (LINQ to Traces)")]
[assembly: AssemblyCopyright("Copyright © MS Open Tech 2012")]
[assembly: AssemblyVersion("1.0.30926.0")]
[assembly: AssemblyFileVersion("1.0.30926.0")]
[assembly: AssemblyVersion("1.0.30930.0")]
[assembly: AssemblyFileVersion("1.0.30930.0")]

Просмотреть файл

@ -0,0 +1,22 @@
// Copyright (c) Microsoft Open Technologies, Inc. All rights reserved. See License.txt in the project root for license information.
namespace System.Reactive
{
/// <summary>
/// This is like AnonimosObservable in Rx, but without the auto-detach logic
/// </summary>
public class NonDetachObservable<T> : IObservable<T>
{
Func<IObserver<T>, IDisposable> _subscribe;
public NonDetachObservable(Func<IObserver<T>, IDisposable> subscribe)
{
_subscribe = subscribe;
}
public IDisposable Subscribe(IObserver<T> observer)
{
return _subscribe(observer);
}
}
}

Просмотреть файл

@ -53,6 +53,7 @@
<Compile Include="IPlaybackConfiguration.cs" />
<Compile Include="ITypeMap.cs" />
<Compile Include="CsvExtensions.cs" />
<Compile Include="NonDetachObservable.cs" />
<Compile Include="PullMergeSort.cs" />
<Compile Include="Pump.cs" />
<Compile Include="ITypeStatistics.cs" />

Просмотреть файл

@ -2,6 +2,7 @@
using System;
using System.Collections.Generic;
using System.Reactive;
using System.Reactive.Linq;
using System.Text;
using System.Threading;
@ -26,7 +27,7 @@ namespace Tx.Windows
if (etlFiles.Length == 0 || etlFiles.Length > 63)
throw new ArgumentException("the supported count of files is from 1 to 63");
return Observable.Create<EtwNativeEvent>(o => new EtwFileReader(o, etlFiles));
return new NonDetachObservable<EtwNativeEvent>(o => new EtwFileReader(o, etlFiles));
}
/// <summary>
@ -39,7 +40,7 @@ namespace Tx.Windows
if (sessionName == null)
throw new ArgumentNullException("sessionName");
return Observable.Create<EtwNativeEvent>(o => new EtwListener(o, sessionName));
return new NonDetachObservable<EtwNativeEvent>(o => new EtwListener(o, sessionName));
}
/// <summary>