Good catch. But I'll bet it's another source of problems, not the sole
one. I'll fix all the points today.

On Fri, Jan 9, 2009 at 2:08 AM, Yuriy Ostapenko <[email protected]> wrote:
>
> 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 »
> >
>



-- 
Cheers,
hammett
http://hammett.castleproject.org/

--~--~---------~--~----~------------~-------~--~----~
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