Sounds good,
What about fixing that typo in ModuleScope.cs, line 152 for now so
people unaware of this thread don't get hit by the bug?
It still says EnterWriteLock() while obviously has to be ExitWriteLock
() and is the actual reason for deadlocks.

Thanks,
On Jan 9, 2:10 am, hammett <[email protected]> wrote:
> News on this one. The mef dev lead (kevin) kindly took a look at this
> one and spot the same thing.
>
> It needs to be either ExitRead followed by a EnterWrite, or
> UpgradeToWrite lock. He also suggested using wrappers so it wont bite
> us again:
>
>             using (new ReadLock(_lock))
>             {
>                 foundProxy = _proxies.TryGetValue(viewType, out proxyType);
>             }
>
>             // No factory exists
>             if(!foundProxy)
>             {
>                 // Try again under a write lock if still none generate the 
> proxy
>                 using (new WriteLock(_lock))
>                 {
>                     foundProxy = _proxies.TryGetValue(viewType, out 
> proxyType);
>
>                     if (!foundProxy)
>                     {
>                         proxyType = GenerateInterfaceViewProxyType(viewType);
>                         Assumes.NotNull(proxyType);
>
>                         _proxies.Add(viewType, proxyType);
>                     }
>                 }
>             }
>             return proxyType;
>         }
>
> On Wed, Jan 7, 2009 at 6:44 AM, Yuriy Ostapenko <[email protected]> wrote:
>
> > I've inspected changes in ClassProxyGenerator and my guess is that new
> > SlimReaderWriterLock.EnterWriteLock() is not equivalent to what
> > ReaderWriterLock.UpgradeToWriterLock(-1) used to do.
>
> > Thanks
>
> > On Jan 7, 2:01 pm, Yuriy Ostapenko <[email protected]> wrote:
> >> All Cassini worker threads end up looking this way:
>
> >> ~22e!clrstack
> >> OS Thread Id: 0x348 (22)
> >> ESP       EIP
> >> 096fcb54 7c90e4f4 [HelperMethodFrame_1OBJ: 096fcb54]
> >> System.Threading.WaitHandle.WaitOneNative
> >> (Microsoft.Win32.SafeHandles.SafeWaitHandle, UInt32, Boolean, Boolean)
> >> 096fcc00 792b687f System.Threading.WaitHandle.WaitOne(Int64, Boolean)
> >> 096fcc1c 792b6835 System.Threading.WaitHandle.WaitOne(Int32, Boolean)
> >> 096fcc30 6c3544fc System.Threading.ReaderWriterLockSlim.WaitOnEvent
> >> (System.Threading.EventWaitHandle, UInt32 ByRef, Int32)
> >> 096fcc68 6c353eaf
> >> System.Threading.ReaderWriterLockSlim.TryEnterUpgradeableReadLock
> >> (Int32)
> >> 096fcc84 6c353f48
> >> System.Threading.ReaderWriterLockSlim.EnterUpgradeableReadLock()
> >> 096fcc88 042ce104
> >> Castle.Core.Internal.SlimReaderWriterLock.EnterReadLock()
> >> 096fcc8c 06977f98
> >> Castle.DynamicProxy.Generators.ClassProxyGenerator.GenerateCode
> >> (System.Type[], Castle.DynamicProxy.ProxyGenerationOptions)
> >> 096fce7c 06977f19
> >> Castle.DynamicProxy.DefaultProxyBuilder.CreateClassProxy(System.Type,
> >> System.Type[], Castle.DynamicProxy.ProxyGenerationOptions)
> >> 096fce98 06977dab Castle.DynamicProxy.ProxyGenerator.CreateClassProxy
> >> (System.Type, System.Type[],
> >> Castle.DynamicProxy.ProxyGenerationOptions, System.Object[],
> >> Castle.Core.Interceptor.IInterceptor[])
> >> 096fcec0 06977d36 Castle.DynamicProxy.ProxyGenerator.CreateClassProxy
> >> (System.Type, System.Type[], Castle.Core.Interceptor.IInterceptor[])
> >> 096fcecc 06977a7d NHibernate.ByteCode.Castle.ProxyFactory.GetProxy
> >> (System.Object, NHibernate.Engine.ISessionImplementor)
> >> 096fcf1c 0697790b
> >> NHibernate.Tuple.Entity.AbstractEntityTuplizer.CreateProxy
> >> (System.Object, NHibernate.Engine.ISessionImplementor)
> >> 096fcf2c 069778d6
> >> NHibernate.Persister.Entity.AbstractEntityPersister.CreateProxy
> >> (System.Object, NHibernate.Engine.ISessionImplementor)
> >> 096fcf44 0697698b
> >> NHibernate.Event.Default.DefaultLoadEventListener.CreateProxyIfNecessary
> >> (NHibernate.Event.LoadEvent,
> >> NHibernate.Persister.Entity.IEntityPersister,
> >> NHibernate.Engine.EntityKey, NHibernate.Event.LoadType,
> >> NHibernate.Engine.IPersistenceContext)
> >> 096fcf68 06974a89
> >> NHibernate.Event.Default.DefaultLoadEventListener.ProxyOrLoad
> >> (NHibernate.Event.LoadEvent,
> >> NHibernate.Persister.Entity.IEntityPersister,
> >> NHibernate.Engine.EntityKey, NHibernate.Event.LoadType)
> >> 096fcf98 0697485b
> >> NHibernate.Event.Default.DefaultLoadEventListener.OnLoad
> >> (NHibernate.Event.LoadEvent, NHibernate.Event.LoadType)
> >> 096fcfd4 069746da NHibernate.Impl.SessionImpl.FireLoad
> >> (NHibernate.Event.LoadEvent, NHibernate.Event.LoadType)
> >> 096fcfec 06974185 NHibernate.Impl.SessionImpl.InternalLoad
> >> (System.String, System.Object, Boolean, Boolean)
> >> 096fd010 0697405b NHibernate.Type.EntityType.ResolveIdentifier
> >> (System.Object, NHibernate.Engine.ISessionImplementor)
> >> 096fd038 06973f65 NHibernate.Type.EntityType.ResolveIdentifier
> >> (System.Object, NHibernate.Engine.ISessionImplementor, System.Object)
> >> 096fd054 0697646b NHibernate.Engine.TwoPhaseLoad.InitializeEntity
> >> (System.Object, Boolean, NHibernate.Engine.ISessionImplementor,
> >> NHibernate.Event.PreLoadEvent, NHibernate.Event.PostLoadEvent)
> >> 096fd0d0 06976272
> >> NHibernate.Loader.Loader.InitializeEntitiesAndCollections
> >> (System.Collections.IList, System.Object,
> >> NHibernate.Engine.ISessionImplementor, Boolean)
> >> 096fd104 064ccfe1 NHibernate.Loader.Loader.DoQuery
> >> (NHibernate.Engine.ISessionImplementor,
> >> NHibernate.Engine.QueryParameters, Boolean)
> >> 096fd174 064ccc17
> >> NHibernate.Loader.Loader.DoQueryAndInitializeNonLazyCollections
> >> (NHibernate.Engine.ISessionImplementor,
> >> NHibernate.Engine.QueryParameters, Boolean)
> >> 096fd1ac 06dc8c17 NHibernate.Loader.Loader.LoadEntity
> >> (NHibernate.Engine.ISessionImplementor, System.Object,
> >> NHibernate.Type.IType, System.Object, System.String, System.Object,
> >> NHibernate.Persister.Entity.IEntityPersister)
> >> 096fd1f8 06dc8a5a NHibernate.Loader.Entity.AbstractEntityLoader.Load
> >> (NHibernate.Engine.ISessionImplementor, System.Object, System.Object,
> >> System.Object)
> >> 096fd218 06dc8a23 NHibernate.Loader.Entity.AbstractEntityLoader.Load
> >> (System.Object, System.Object, NHibernate.Engine.ISessionImplementor)
> >> 096fd228 06dc88d0
> >> NHibernate.Persister.Entity.AbstractEntityPersister.Load
> >> (System.Object, System.Object, NHibernate.LockMode,
> >> NHibernate.Engine.ISessionImplementor)
> >> 096fd24c 06dc87de
> >> NHibernate.Event.Default.DefaultLoadEventListener.LoadFromDatasource
> >> (NHibernate.Event.LoadEvent,
> >> NHibernate.Persister.Entity.IEntityPersister,
> >> NHibernate.Engine.EntityKey, NHibernate.Event.LoadType)
> >> 096fd27c 06974e9d
> >> NHibernate.Event.Default.DefaultLoadEventListener.DoLoad
> >> (NHibernate.Event.LoadEvent,
> >> NHibernate.Persister.Entity.IEntityPersister,
> >> NHibernate.Engine.EntityKey, NHibernate.Event.LoadType)
> >> 096fd2b4 06974b77
> >> NHibernate.Event.Default.DefaultLoadEventListener.Load
> >> (NHibernate.Event.LoadEvent,
> >> NHibernate.Persister.Entity.IEntityPersister,
> >> NHibernate.Engine.EntityKey, NHibernate.Event.LoadType)
> >> 096fd2dc 06974a9b
> >> NHibernate.Event.Default.DefaultLoadEventListener.ProxyOrLoad
> >> (NHibernate.Event.LoadEvent,
> >> NHibernate.Persister.Entity.IEntityPersister,
> >> NHibernate.Engine.EntityKey, NHibernate.Event.LoadType)
> >> 096fd30c 0697485b
> >> NHibernate.Event.Default.DefaultLoadEventListener.OnLoad
> >> (NHibernate.Event.LoadEvent, NHibernate.Event.LoadType)
> >> 096fd348 069746da NHibernate.Impl.SessionImpl.FireLoad
> >> (NHibernate.Event.LoadEvent, NHibernate.Event.LoadType)
> >> 096fd360 06dc8500 NHibernate.Impl.SessionImpl.Get(System.String,
> >> System.Object)
> >> 096fd398 06dc848d NHibernate.Impl.SessionImpl.Get(System.Type,
> >> System.Object)
> >> 096fd3a8 06dc7d9f Castle.ActiveRecord.ActiveRecordBase.FindByPrimaryKey
> >> (System.Type, System.Object, Boolean)
> >> 096fd3f8 06dc7cfe Castle.ActiveRecord.ActiveRecordMediator`1
> >> [[System.__Canon, mscorlib]].FindByPrimaryKey(System.Object, Boolean)
> >> ...my code here...
> >> 096fd76c 06980981 DynamicClass.lambda_method
> >> (System.Runtime.CompilerServices.ExecutionScope,
> >> System.Web.Mvc.ControllerBase, System.Object[])
> >> 096fd778 036cad22 System.Web.Mvc.ActionMethodDispatcher.Execute
> >> (System.Web.Mvc.ControllerBase, System.Object[])
> >> 096fd784 036ca8c0
> >> System.Web.Mvc.ControllerActionInvoker.InvokeActionMethod
> >> (System.Reflection.MethodInfo,
> >> System.Collections.Generic.IDictionary`2<System.String,System.Object>)
> >> 096fd7a4 036ca7d8 System.Web.Mvc.ControllerActionInvoker
> >> +<>c__DisplayClassc.<InvokeActionMethodWithFilters>b__9()
> >> 096fd7b8 036ca6c0
> >> System.Web.Mvc.ControllerActionInvoker.InvokeActionMethodFilter
> >> (System.Web.Mvc.IActionFilter, System.Web.Mvc.ActionExecutingContext,
> >> System.Func`1<System.Web.Mvc.ActionExecutedContext>)
> >> 096fd7f4 036ca62d System.Web.Mvc.ControllerActionInvoker
> >> +<>c__DisplayClassc
> >> +<>c__DisplayClasse.<InvokeActionMethodWithFilters>b__b()
> >> 096fd7fc 036ca6c0
> >> System.Web.Mvc.ControllerActionInvoker.InvokeActionMethodFilter
> >> (System.Web.Mvc.IActionFilter, System.Web.Mvc.ActionExecutingContext,
> >> System.Func`1<System.Web.Mvc.ActionExecutedContext>)
> >> 096fd838 036ca62d System.Web.Mvc.ControllerActionInvoker
> >> +<>c__DisplayClassc
> >> +<>c__DisplayClasse.<InvokeActionMethodWithFilters>b__b()
> >> 096fd840 036ca6c0
> >> System.Web.Mvc.ControllerActionInvoker.InvokeActionMethodFilter
> >> (System.Web.Mvc.IActionFilter, System.Web.Mvc.ActionExecutingContext,
> >> System.Func`1<System.Web.Mvc.ActionExecutedContext>)
> >> 096fd87c 036ca62d System.Web.Mvc.ControllerActionInvoker
> >> +<>c__DisplayClassc
> >> +<>c__DisplayClasse.<InvokeActionMethodWithFilters>b__b()
> >> 096fd884 036ca6c0
> >> System.Web.Mvc.ControllerActionInvoker.InvokeActionMethodFilter
> >> (System.Web.Mvc.IActionFilter, System.Web.Mvc.ActionExecutingContext,
> >> System.Func`1<System.Web.Mvc.ActionExecutedContext>)
> >> 096fd8c0 036ca62d System.Web.Mvc.ControllerActionInvoker
> >> +<>c__DisplayClassc
> >> +<>c__DisplayClasse.<InvokeActionMethodWithFilters>b__b()
> >> 096fd8c8 036ca4b2
> >> System.Web.Mvc.ControllerActionInvoker.InvokeActionMethodWithFilters
> >> (System.Reflection.MethodInfo,
> >> System.Collections.Generic.IDictionary`2<System.String,System.Object>,
> >> System.Collections.Generic.IList`1<System.Web.Mvc.IActionFilter>)
> >> 096fd8e8 036c9401
>
> ...
>
> read more »
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups 
"Castle Project Development List" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to 
[email protected]
For more options, visit this group at 
http://groups.google.com/group/castle-project-devel?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to