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