Navigation Menu

Skip to content

Commit

Permalink
Fixing an error with ExclusiveConcurrentDictionary that created dead …
Browse files Browse the repository at this point in the history
…locks after item removal
  • Loading branch information
arobson committed May 11, 2011
1 parent a8dd081 commit 8539924
Show file tree
Hide file tree
Showing 9 changed files with 22 additions and 80 deletions.
66 changes: 0 additions & 66 deletions Solutions/Symbiote/Symbiote.sln
Expand Up @@ -41,8 +41,6 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Symbiote.Rabbit", "..\..\sr
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Rabbit.Tests", "..\..\tests\Rabbit.Tests\Rabbit.Tests.csproj", "{99361C6F-C615-4508-9DAC-314DA9DB0B66}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Symbiote.Couch", "..\..\src\Symbiote.Couch\Symbiote.Couch.csproj", "{BE17D6C0-82B8-484F-860B-6801388A43C2}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Symbiote.Riak", "..\..\src\Symbiote.Riak\Symbiote.Riak.csproj", "{D416A024-3C8A-47CD-A0F3-FC19EC9F1222}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Symbiote.Mikado", "..\..\src\Symbiote.Mikado\Symbiote.Mikado.csproj", "{BA7FE9D9-14B1-4734-9E97-AEE911009333}"
Expand All @@ -53,8 +51,6 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Riak.Tests", "..\..\tests\R
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Daemon.Tests", "..\..\tests\Daemon.Tests\Daemon.Tests.csproj", "{0C185C34-5480-47A8-B58F-19F6624ADEF4}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Couch.Tests", "..\..\tests\Couch.Tests\Couch.Tests.csproj", "{6F1DB555-D2FF-4E2C-8F20-4A012D6F4581}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
Expand Down Expand Up @@ -587,36 +583,6 @@ Global
{99361C6F-C615-4508-9DAC-314DA9DB0B66}.Unmerged|Mixed Platforms.ActiveCfg = Release|Any CPU
{99361C6F-C615-4508-9DAC-314DA9DB0B66}.Unmerged|Mixed Platforms.Build.0 = Release|Any CPU
{99361C6F-C615-4508-9DAC-314DA9DB0B66}.Unmerged|x86.ActiveCfg = Release|Any CPU
{BE17D6C0-82B8-484F-860B-6801388A43C2}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{BE17D6C0-82B8-484F-860B-6801388A43C2}.Debug|Any CPU.Build.0 = Debug|Any CPU
{BE17D6C0-82B8-484F-860B-6801388A43C2}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
{BE17D6C0-82B8-484F-860B-6801388A43C2}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU
{BE17D6C0-82B8-484F-860B-6801388A43C2}.Debug|x86.ActiveCfg = Debug|Any CPU
{BE17D6C0-82B8-484F-860B-6801388A43C2}.Demo|Any CPU.ActiveCfg = Debug|Any CPU
{BE17D6C0-82B8-484F-860B-6801388A43C2}.Demo|Any CPU.Build.0 = Debug|Any CPU
{BE17D6C0-82B8-484F-860B-6801388A43C2}.Demo|Mixed Platforms.ActiveCfg = Debug|Any CPU
{BE17D6C0-82B8-484F-860B-6801388A43C2}.Demo|Mixed Platforms.Build.0 = Debug|Any CPU
{BE17D6C0-82B8-484F-860B-6801388A43C2}.Demo|x86.ActiveCfg = Debug|Any CPU
{BE17D6C0-82B8-484F-860B-6801388A43C2}.Development|Any CPU.ActiveCfg = Development|Any CPU
{BE17D6C0-82B8-484F-860B-6801388A43C2}.Development|Any CPU.Build.0 = Development|Any CPU
{BE17D6C0-82B8-484F-860B-6801388A43C2}.Development|Mixed Platforms.ActiveCfg = Development|Any CPU
{BE17D6C0-82B8-484F-860B-6801388A43C2}.Development|Mixed Platforms.Build.0 = Development|Any CPU
{BE17D6C0-82B8-484F-860B-6801388A43C2}.Development|x86.ActiveCfg = Development|Any CPU
{BE17D6C0-82B8-484F-860B-6801388A43C2}.Release|Any CPU.ActiveCfg = Release|Any CPU
{BE17D6C0-82B8-484F-860B-6801388A43C2}.Release|Any CPU.Build.0 = Release|Any CPU
{BE17D6C0-82B8-484F-860B-6801388A43C2}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU
{BE17D6C0-82B8-484F-860B-6801388A43C2}.Release|Mixed Platforms.Build.0 = Release|Any CPU
{BE17D6C0-82B8-484F-860B-6801388A43C2}.Release|x86.ActiveCfg = Release|Any CPU
{BE17D6C0-82B8-484F-860B-6801388A43C2}.Silverlight|Any CPU.ActiveCfg = Release|Any CPU
{BE17D6C0-82B8-484F-860B-6801388A43C2}.Silverlight|Any CPU.Build.0 = Release|Any CPU
{BE17D6C0-82B8-484F-860B-6801388A43C2}.Silverlight|Mixed Platforms.ActiveCfg = Release|Any CPU
{BE17D6C0-82B8-484F-860B-6801388A43C2}.Silverlight|Mixed Platforms.Build.0 = Release|Any CPU
{BE17D6C0-82B8-484F-860B-6801388A43C2}.Silverlight|x86.ActiveCfg = Release|Any CPU
{BE17D6C0-82B8-484F-860B-6801388A43C2}.Unmerged|Any CPU.ActiveCfg = Release|Any CPU
{BE17D6C0-82B8-484F-860B-6801388A43C2}.Unmerged|Any CPU.Build.0 = Release|Any CPU
{BE17D6C0-82B8-484F-860B-6801388A43C2}.Unmerged|Mixed Platforms.ActiveCfg = Release|Any CPU
{BE17D6C0-82B8-484F-860B-6801388A43C2}.Unmerged|Mixed Platforms.Build.0 = Release|Any CPU
{BE17D6C0-82B8-484F-860B-6801388A43C2}.Unmerged|x86.ActiveCfg = Release|Any CPU
{D416A024-3C8A-47CD-A0F3-FC19EC9F1222}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{D416A024-3C8A-47CD-A0F3-FC19EC9F1222}.Debug|Any CPU.Build.0 = Debug|Any CPU
{D416A024-3C8A-47CD-A0F3-FC19EC9F1222}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
Expand Down Expand Up @@ -763,36 +729,6 @@ Global
{0C185C34-5480-47A8-B58F-19F6624ADEF4}.Unmerged|Mixed Platforms.ActiveCfg = Release|Any CPU
{0C185C34-5480-47A8-B58F-19F6624ADEF4}.Unmerged|Mixed Platforms.Build.0 = Release|Any CPU
{0C185C34-5480-47A8-B58F-19F6624ADEF4}.Unmerged|x86.ActiveCfg = Release|Any CPU
{6F1DB555-D2FF-4E2C-8F20-4A012D6F4581}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{6F1DB555-D2FF-4E2C-8F20-4A012D6F4581}.Debug|Any CPU.Build.0 = Debug|Any CPU
{6F1DB555-D2FF-4E2C-8F20-4A012D6F4581}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
{6F1DB555-D2FF-4E2C-8F20-4A012D6F4581}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU
{6F1DB555-D2FF-4E2C-8F20-4A012D6F4581}.Debug|x86.ActiveCfg = Debug|Any CPU
{6F1DB555-D2FF-4E2C-8F20-4A012D6F4581}.Demo|Any CPU.ActiveCfg = Debug|Any CPU
{6F1DB555-D2FF-4E2C-8F20-4A012D6F4581}.Demo|Any CPU.Build.0 = Debug|Any CPU
{6F1DB555-D2FF-4E2C-8F20-4A012D6F4581}.Demo|Mixed Platforms.ActiveCfg = Debug|Any CPU
{6F1DB555-D2FF-4E2C-8F20-4A012D6F4581}.Demo|Mixed Platforms.Build.0 = Debug|Any CPU
{6F1DB555-D2FF-4E2C-8F20-4A012D6F4581}.Demo|x86.ActiveCfg = Debug|Any CPU
{6F1DB555-D2FF-4E2C-8F20-4A012D6F4581}.Development|Any CPU.ActiveCfg = Debug|Any CPU
{6F1DB555-D2FF-4E2C-8F20-4A012D6F4581}.Development|Any CPU.Build.0 = Debug|Any CPU
{6F1DB555-D2FF-4E2C-8F20-4A012D6F4581}.Development|Mixed Platforms.ActiveCfg = Development|Any CPU
{6F1DB555-D2FF-4E2C-8F20-4A012D6F4581}.Development|Mixed Platforms.Build.0 = Development|Any CPU
{6F1DB555-D2FF-4E2C-8F20-4A012D6F4581}.Development|x86.ActiveCfg = Debug|Any CPU
{6F1DB555-D2FF-4E2C-8F20-4A012D6F4581}.Release|Any CPU.ActiveCfg = Release|Any CPU
{6F1DB555-D2FF-4E2C-8F20-4A012D6F4581}.Release|Any CPU.Build.0 = Release|Any CPU
{6F1DB555-D2FF-4E2C-8F20-4A012D6F4581}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU
{6F1DB555-D2FF-4E2C-8F20-4A012D6F4581}.Release|Mixed Platforms.Build.0 = Release|Any CPU
{6F1DB555-D2FF-4E2C-8F20-4A012D6F4581}.Release|x86.ActiveCfg = Release|Any CPU
{6F1DB555-D2FF-4E2C-8F20-4A012D6F4581}.Silverlight|Any CPU.ActiveCfg = Release|Any CPU
{6F1DB555-D2FF-4E2C-8F20-4A012D6F4581}.Silverlight|Any CPU.Build.0 = Release|Any CPU
{6F1DB555-D2FF-4E2C-8F20-4A012D6F4581}.Silverlight|Mixed Platforms.ActiveCfg = Release|Any CPU
{6F1DB555-D2FF-4E2C-8F20-4A012D6F4581}.Silverlight|Mixed Platforms.Build.0 = Release|Any CPU
{6F1DB555-D2FF-4E2C-8F20-4A012D6F4581}.Silverlight|x86.ActiveCfg = Release|Any CPU
{6F1DB555-D2FF-4E2C-8F20-4A012D6F4581}.Unmerged|Any CPU.ActiveCfg = Release|Any CPU
{6F1DB555-D2FF-4E2C-8F20-4A012D6F4581}.Unmerged|Any CPU.Build.0 = Release|Any CPU
{6F1DB555-D2FF-4E2C-8F20-4A012D6F4581}.Unmerged|Mixed Platforms.ActiveCfg = Release|Any CPU
{6F1DB555-D2FF-4E2C-8F20-4A012D6F4581}.Unmerged|Mixed Platforms.Build.0 = Release|Any CPU
{6F1DB555-D2FF-4E2C-8F20-4A012D6F4581}.Unmerged|x86.ActiveCfg = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
Expand All @@ -809,7 +745,6 @@ Global
{29F73967-24AC-438D-957E-7FF3EDC6840E} = {642B8572-9C4E-40A2-AAD9-5BA69ABCAB48}
{22173E83-BA63-4C4D-A1B3-D0D06DC55333} = {642B8572-9C4E-40A2-AAD9-5BA69ABCAB48}
{8E1293E3-E238-4C04-8291-3CF6299E5222} = {642B8572-9C4E-40A2-AAD9-5BA69ABCAB48}
{BE17D6C0-82B8-484F-860B-6801388A43C2} = {642B8572-9C4E-40A2-AAD9-5BA69ABCAB48}
{D416A024-3C8A-47CD-A0F3-FC19EC9F1222} = {642B8572-9C4E-40A2-AAD9-5BA69ABCAB48}
{BA7FE9D9-14B1-4734-9E97-AEE911009333} = {642B8572-9C4E-40A2-AAD9-5BA69ABCAB48}
{BB61C937-9A6C-45F4-84F2-507A801F8DC9} = {D3AEDC1F-5761-45D9-8563-69AAC394D5A3}
Expand All @@ -821,6 +756,5 @@ Global
{A6BD5016-0FF8-47FB-88FB-815A54EC62B3} = {D3AEDC1F-5761-45D9-8563-69AAC394D5A3}
{200C76E0-85DF-4915-AABD-8DC8D1D41EBC} = {D3AEDC1F-5761-45D9-8563-69AAC394D5A3}
{0C185C34-5480-47A8-B58F-19F6624ADEF4} = {D3AEDC1F-5761-45D9-8563-69AAC394D5A3}
{6F1DB555-D2FF-4E2C-8F20-4A012D6F4581} = {D3AEDC1F-5761-45D9-8563-69AAC394D5A3}
EndGlobalSection
EndGlobal
16 changes: 11 additions & 5 deletions src/Symbiote.Core/Collections/ExclusiveConcurrentDictionary.cs
Expand Up @@ -66,10 +66,16 @@ public TValue ReadOrWrite( TKey key, Func<TValue> valueProvider )
{
try
{
SlimLock.EnterWriteLock();
UpdateWaiting();
if ( !Dictionary.TryGetValue( key, out value ) )
value = Dictionary.GetOrAdd( key, valueProvider() );
if ( SlimLock.TryEnterWriteLock( 1000 ) )
{
UpdateWaiting();
if ( !Dictionary.TryGetValue( key, out value ) )
value = Dictionary.GetOrAdd( key, valueProvider() );
}
else
{
throw new Exception("THIS IS CRAP");
}
}
finally
{
Expand All @@ -87,7 +93,7 @@ public void Remove( TKey key )
TValue value;
Dictionary.TryRemove( key, out value );
}
catch ( Exception ex )
finally
{
SlimLock.ExitWriteLock();
}
Expand Down
4 changes: 2 additions & 2 deletions src/Symbiote.Core/Symbiote.Core.csproj
Expand Up @@ -60,13 +60,13 @@
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
<DebugType>pdbonly</DebugType>
<Optimize>true</Optimize>
<OutputPath>..\..\bin\Release\</OutputPath>
<OutputPath>..\..\bin\release\</OutputPath>
<DefineConstants>TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
<CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
<AllowUnsafeBlocks>true</AllowUnsafeBlocks>
<DocumentationFile>..\..\bin\Release\Symbiote.Core.XML</DocumentationFile>
<DocumentationFile>..\..\bin\release\Symbiote.Core.XML</DocumentationFile>
</PropertyGroup>
<ItemGroup>
<Reference Include="System">
Expand Down
3 changes: 2 additions & 1 deletion src/Symbiote.Core/UnitOfWork/EventListenerBase.cs
Expand Up @@ -14,6 +14,7 @@
// limitations under the License.
// */
using System;
using System.Collections.Generic;

namespace Symbiote.Core.UnitOfWork
{
Expand All @@ -26,7 +27,7 @@ public Type EventType
get { return typeof( T ); }
}

public void ListenTo( IEvent evnt )
public virtual void HandleEvent( IEvent evnt )
{
try
{
Expand Down
4 changes: 2 additions & 2 deletions src/Symbiote.Core/UnitOfWork/EventListenerManager.cs
Expand Up @@ -32,7 +32,7 @@ public void PublishEvent( IEvent evnt )
List<IEventListener> listeners;
if ( Listeners.TryGetValue( evnt.GetType(), out listeners ) )
{
listeners.ForEach( a => a.ListenTo( evnt ) );
listeners.ForEach( a => a.HandleEvent( evnt ) );
}
}

Expand All @@ -43,7 +43,7 @@ private void WireUpListeners()
{
if ( listener.ListenSubTypesOfEvent )
{
var includedTargeTypes = Reflector.GetSubTypes( listener.EventType ).ToList();
var includedTargeTypes = Reflector.GetSubTypes( listener.EventType );
includedTargeTypes.ForEach( eventType => AddListener( listener, eventType ) );
}
else
Expand Down
2 changes: 1 addition & 1 deletion src/Symbiote.Core/UnitOfWork/EventPublisher.cs
Expand Up @@ -36,7 +36,7 @@ public void PublishEvents( IEnumerable<IEvent> events )
.ForEach( evnt =>
{
_subscribers
.ForEach( x => x.ListenTo( evnt ) );
.ForEach( x => x.HandleEvent( evnt ) );
if ( _manager != null )
{
_manager.PublishEvent( evnt );
Expand Down
3 changes: 2 additions & 1 deletion src/Symbiote.Core/UnitOfWork/IEventListener.cs
Expand Up @@ -14,14 +14,15 @@
// limitations under the License.
// */
using System;
using System.Collections.Generic;

namespace Symbiote.Core.UnitOfWork
{
public interface IEventListener
{
bool ListenSubTypesOfEvent { get; }
Type EventType { get; }
void ListenTo( IEvent evnt );
void HandleEvent( IEvent evnt );
}

public interface IEventListener<T> : IEventListener where T : IEvent
Expand Down
2 changes: 1 addition & 1 deletion src/Symbiote.WCF/WcfClientConfigurator.cs
Expand Up @@ -37,7 +37,7 @@ public WcfClientConfigurator RegisterService<TContract>( Action<IServiceConfigur
Assimilate.Dependencies( x => x
.For<IServiceClientConfigurationStrategy<TContract>>()
.CreateWith(
() =>
context =>
new DelegateConfigurationStrategy<TContract>( configurationDelegate ) ) );
return this;
}
Expand Down
Expand Up @@ -13,7 +13,7 @@ public StaticListenerForEverything()
Events = new List<IEvent>();
}

public override void OnEvent(IEvent value)
public override void OnEvent( IEvent value )
{
Events.Add( value );
}
Expand Down

0 comments on commit 8539924

Please sign in to comment.